00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #include <vector>
00038 #include <string>
00039 #include <time.h>
00040 #include <stdio.h>
00041 #include <list>
00042 #ifdef _WIN32
00043 # include <io.h>
00044 #endif
00045 #include <stdlib.h>
00046 #include <sys/stat.h>
00047
00048 #include "sock.h"
00049 #include "log.h"
00050 #include "irc.h"
00051 #include "lang.h"
00052 #include "md5.h"
00053 #include "conf.h"
00054 #include "botnet.h"
00055 #include "shared.h"
00056 #include "filesys.h"
00057 #include "stats.h"
00058 #include "ssl.h"
00059 #include "exec.h"
00060
00061 #pragma hdrstop
00062
00063 #include "match.h"
00064
00065 #ifdef _MSC_VER
00066 # define __FUNC__ __FUNCTION__
00067 #endif
00068
00069 #ifdef __GNUC__
00070 #define __FUNC__ "<unknown>"
00071 #endif
00072
00073 #ifdef _WIN32
00074 # define FILE_SLASH "\\"
00075 #else
00076 # define FILE_SLASH "/"
00077 #endif
00078
00079 using namespace std;
00080
00081 #include "dcc.h"
00082
00083 #include "params.h"
00084
00085
00086 #ifdef __BORLANDC__
00087 #pragma package(smart_init)
00088 #endif
00089
00090
00091
00092
00093
00094 #define NEW_INSTANCE_TIMEOUT_AFTER_LAST_JOIN 3*60
00095
00096 extern void logic_partyline_add_user(s_user& user, vector<s_channel>& channels);
00097 extern void logic_partyline_get_user(string user_name, s_user& user, vector<s_channel>& channels);
00098 extern void logic_partyline_get_user_template(string user_name, s_user& user, vector<s_channel>& channels);
00099 extern void logic_partyline_access(string user, vector<string>& access_to_users,
00100 vector<string>& access_to_groups,
00101 vector<string>& access_grant_groups,
00102 vector<string>& access_to_proc_groups,
00103 vector<string>& access_grant_proc_groups,
00104 vector<string>& access_grant_proc,
00105 vector<string>& access_to_channel,
00106 vector<string>& access_grant_channel,
00107 bool& access_grant_partyline,
00108 vector<string>& access_to_procs,
00109 bool& access_to_backup, bool& access_grant_backup,
00110 bool& access_to_rehash, bool& access_grant_rehash,
00111 bool& access_to_plususer, bool& access_grant_plususer,
00112 bool& access_to_plusproc, bool& access_grant_plusproc,
00113 s_flood& partyline_msg_flood, bool& access_to_replication,
00114 bool& access_grant_replication,
00115 vector<string>& access_to_chan_defs,
00116 bool& access_to_restart, bool& access_grant_restart,
00117 bool& access_to_die, bool& access_grant_die,
00118 bool& access_to_filesystem, bool& access_grant_filesystem,
00119 bool& access_to_private, bool& access_grant_private,
00120 bool& access_to_can_send_all_users,
00121 bool& access_grant_can_send_all_users,
00122 bool& access_to_can_send_unknown_users,
00123 bool& access_grant_can_send_unknown_users,
00124 vector<string>& access_usage_proc,
00125 vector<string>& access_usage_proc_groups,
00126 bool& access_to_upgrade, bool& access_grant_upgrade,
00127 bool& access_to_apply, bool& access_grant_apply
00128 );
00129 extern bool logic_partyline_get_channel_def(string channel_name, s_channel_def& chd);
00130 extern void logic_partyline_remove_channel_def(string channel_name);
00131 extern bool logic_partyline_add_channel_def(s_channel_def& chd);
00132
00133 vector<s_dcc_awaiting_user> dcc_awaiting_users;
00134
00135 extern vector<s_user> r_users;
00136 extern vector<s_user> r_user_templates;
00137 extern vector<s_channel> r_channels;
00138 extern vector<s_channel> r_channel_templates;
00139 extern vector<s_procedure> r_procedures;
00140 extern vector<s_group> r_all_groups;
00141 extern vector<s_channel_def> r_channel_defs;
00142 extern s_private r_private;
00143 extern vector<s_online_channel> irc_channels;
00144
00145 extern char irc_nick[512];
00146
00147 extern s_ssl_conf ssl_conf;
00148
00149 bool dcc_want_to_restart=false;
00150 bool dcc_want_to_die=false;
00151 bool dcc_want_to_upgrade=false;
00152 string dcc_who_is_killing;
00153 s_socket* dcc_killing_user_socket=NULL;
00154 string dcc_killing_user_eol;
00155 string dcc_killing_user_lang;
00156 time_t last_new_instance_join;
00157
00158 #ifndef _WIN32
00159 #ifndef HAVE_LTOA
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171 char *ltoa(long value, char *buffer, int radix)
00172 {
00173 sprintf(buffer,"%ld",value);
00174 return buffer;
00175 }
00176 #endif
00177 #endif
00178
00179
00180
00181
00182
00183
00184
00185 struct s_dcc_send_file {
00186 bool using_ipv6;
00187 in_addr remote_ip;
00188 in_addr6_ remote_ip6;
00189 string file_name;
00190 time_t start_time;
00191 size_t size;
00192 string user_name_as_in_logic;
00193 string public_name;
00194 size_t resume_pos;
00195
00196 s_dcc_send_file()
00197 {
00198 using_ipv6=false;
00199 #ifdef _WIN32
00200 remote_ip.S_un.S_addr=0;
00201 #else
00202 remote_ip.s_addr=0;
00203 #endif
00204
00205 memset(&remote_ip6,0,sizeof(remote_ip6));
00206 file_name="";
00207 start_time=0;
00208 size=0;
00209 user_name_as_in_logic="";
00210 public_name="";
00211 resume_pos=0;
00212 }
00213 };
00214
00215
00216
00217
00218
00219
00220
00221 struct s_dcc_client {
00222 s_socket server_socket;
00223
00224 string remote;
00225
00226 string nick;
00227 string ident;
00228 string host;
00229 string fullname;
00230
00231 bool chat;
00232 bool send;
00233 bool send_from_filesystem;
00234 bool telnet;
00235 bool replication_partner;
00236 s_socket socket;
00237
00238 bool got_user_name;
00239
00240 bool ssl_connection;
00241 SSL* ssl;
00242
00243 s_user u;
00244 vector<s_channel> chs;
00245
00246 bool access_to_can_send_all_users;
00247 bool access_grant_can_send_all_users;
00248
00249 size_t resume_pos;
00250
00251 s_dcc_send_file send_file;
00252
00253 string hostname;
00254 string as_in_logic;
00255 string supposed_to_be;
00256
00257
00258
00259 string in_buff;
00260 time_t last_input;
00261
00262 string lang;
00263
00264 int got_passwd;
00265
00266 time_t last_filesys_lookup;
00267
00268 vector<string> access_to_users;
00269 vector<string> access_to_groups;
00270 vector<string> access_grant_groups;
00271
00272 vector<string> access_to_procs;
00273 vector<string> access_to_proc_groups;
00274
00275 vector<string> access_grant_proc;
00276 vector<string> access_grant_proc_groups;
00277
00278 vector<string> access_usage_proc;
00279 vector<string> access_usage_proc_groups;
00280
00281 vector<string> access_to_channel;
00282 vector<string> access_grant_channel;
00283 bool access_grant_partyline;
00284 bool access_to_plususer;
00285 bool access_grant_plususer;
00286
00287 bool access_to_plusproc;
00288 bool access_grant_plusproc;
00289
00290 bool access_to_replication;
00291 bool access_grant_replication;
00292
00293 bool access_to_restart;
00294 bool access_grant_restart;
00295 bool access_to_die;
00296 bool access_grant_die;
00297
00298 bool access_to_filesystem;
00299 bool access_grant_filesystem;
00300
00301 bool access_to_can_send_unknown_users;
00302 bool access_grant_can_send_unknown_users;
00303
00304 bool access_to_upgrade;
00305 bool access_grant_upgrade;
00306
00307 bool access_to_apply;
00308 bool access_grant_apply;
00309
00310 s_flood partyline_msg_flood;
00311 vector<s_flood_history> msg_flood_hist;
00312
00313 s_flood user_partyline_msg_flood;
00314
00315 int new_user;
00316 string user_name;
00317 vector<string> user_hosts;
00318 vector<s_dcc_host> user_dcc_hosts;
00319 s_dcc_host user_dcc_host;
00320 vector<string> user_fullnames;
00321 bool user_access_to_partyline;
00322 bool user_access_grant_partyline;
00323 vector<string> user_access_to_groups;
00324 vector<string> user_access_grant_groups;
00325 vector<string> user_access_to_proc_groups;
00326 vector<string> user_access_grant_proc_groups;
00327 vector<string> user_access_usage_proc_groups;
00328 vector<string> user_access_to_channel;
00329 vector<string> user_access_grant_channel;
00330 s_channel user_channel;
00331 vector<s_channel> user_channels;
00332 int num_not_configured_channels;
00333 vector<string> user_member_of;
00334 bool user_access_to_plususer;
00335 bool user_access_grant_plususer;
00336
00337 bool user_access_to_plusproc;
00338 bool user_access_grant_plusproc;
00339
00340 bool user_access_to_replication;
00341 bool user_access_grant_replication;
00342
00343 bool user_access_to_can_send_unknown_users;
00344 bool user_access_grant_can_send_unknown_users;
00345
00346 map<string,string> user_meta;
00347
00348 int edit_user;
00349 int edit_channel_num;
00350
00351 int filesystem;
00352 tm filesystem_expiration;
00353
00354 int msg;
00355 string msg_content;
00356 time_t msg_expiration;
00357
00358 int private_edit;
00359 s_private private_;
00360
00361 int replication;
00362 bool b_repl_user;
00363 s_user repl_user;
00364 bool b_repl_user_template;
00365 s_user repl_user_template;
00366 bool b_repl_chandef;
00367 s_channel_def repl_chandef;
00368 bool b_repl_proc;
00369 s_procedure repl_proc;
00370 bool b_repl_private;
00371 s_private repl_private;
00372 s_replication repl_add;
00373
00374 int terminator;
00375 string terminator_user;
00376
00377 int language;
00378
00379 int dynbans;
00380 string dynbans_channel;
00381
00382
00383
00384
00385
00386
00387
00388 struct s_fs {
00389 string name;
00390 s_file file;
00391
00392 s_access new_access;
00393
00394 s_fs()
00395 {
00396 name="";
00397 file.clear();
00398 new_access.clear();
00399 }
00400 } fs;
00401
00402 int edit_proc;
00403 string proc_name;
00404 string proc_to_delete;
00405 string proc_decl;
00406 bool plus_proc;
00407 list<string> proc_commands;
00408 int edit_proc_addbefore_line;
00409 int edit_proc_addafter_line;
00410 int edit_proc_replace_line;
00411 string proc_error;
00412 vector<string> proc_groups;
00413
00414 int edit_rproc;
00415 vector<s_rproc> rproc;
00416
00417 bool access_to_backup;
00418 bool access_grant_backup;
00419 bool access_to_rehash;
00420 bool access_grant_rehash;
00421
00422 bool user_access_to_backup;
00423 bool user_access_grant_backup;
00424 bool user_access_to_rehash;
00425 bool user_access_grant_rehash;
00426
00427 bool user_access_to_restart;
00428 bool user_access_grant_restart;
00429 bool user_access_to_die;
00430 bool user_access_grant_die;
00431
00432 bool user_access_to_filesystem;
00433 bool user_access_grant_filesystem;
00434
00435 bool user_access_to_upgrade;
00436 bool user_access_grant_upgrade;
00437
00438 bool user_access_to_apply;
00439 bool user_access_grant_apply;
00440
00441 bool access_to_private;
00442 bool access_grant_private;
00443 bool user_access_to_private;
00444 bool user_access_grant_private;
00445
00446 s_dynamic_rule user_channel_allow_dynamic;
00447
00448 int edit_chan;
00449 vector<string> access_to_chan_defs;
00450 s_channel_def user_channel_def;
00451
00452 char telnet_buffer[5*1024];
00453 size_t telnet_buffer_pos;
00454 bool telnet_botnet_called;
00455
00456 string partyline_channel;
00457
00458 bool user_access_to_can_send_all_users;
00459 bool user_access_grant_can_send_all_users;
00460
00461
00462
00463
00464
00465
00466
00467 struct s_dcc_client_send {
00468 char tmp_file_name[1024];
00469 FILE* f;
00470 size_t size;
00471 size_t received;
00472 time_t last_packet;
00473 bool response_sent;
00474 string original_name;
00475 bool is_file_server_proto;
00476 } dcc_send;
00477
00478 s_dcc_client()
00479 {
00480 remote="";
00481 dcc_send.f=NULL;
00482 memset(dcc_send.tmp_file_name,0,sizeof(dcc_send.tmp_file_name));
00483 dcc_send.size=0;
00484 dcc_send.received=0;
00485 dcc_send.last_packet=0;
00486 dcc_send.response_sent=false;
00487 dcc_send.original_name="";
00488
00489 user_access_to_can_send_all_users=false;
00490 user_access_grant_can_send_all_users=false;
00491
00492 user_access_to_can_send_unknown_users=false;
00493 user_access_grant_can_send_unknown_users=false;
00494
00495 access_to_can_send_all_users=false;
00496 access_grant_can_send_all_users=false;
00497
00498 access_to_can_send_unknown_users=false;
00499 access_grant_can_send_unknown_users=false;
00500
00501 access_to_can_send_all_users=false;
00502 access_grant_can_send_all_users=false;
00503
00504 replication=0;
00505 b_repl_user=false;
00506 b_repl_user_template=false;
00507 b_repl_chandef=false;
00508 b_repl_proc=false;
00509 b_repl_private=false;
00510
00511 private_edit=0;
00512 private_.clear();
00513
00514 send_from_filesystem=false;
00515
00516 filesystem=0;
00517
00518 resume_pos=0;
00519
00520 msg=0;
00521 msg_content="";
00522 msg_expiration=0;
00523
00524 language=0;
00525
00526 dcc_send.is_file_server_proto=false;
00527
00528 server_socket.clear();
00529 chat=false;
00530 send=false;
00531 telnet=false;
00532 replication_partner=false;
00533 ssl_connection=false;
00534 socket.clear();
00535 hostname="";
00536 as_in_logic="";
00537 in_buff="";
00538 last_input=0;
00539 lang="";
00540 got_passwd=0;
00541 access_to_users.clear();
00542 access_to_groups.clear();
00543 access_grant_groups.clear();
00544 access_to_proc_groups.clear();
00545 access_grant_proc_groups.clear();
00546 access_usage_proc.clear();
00547 access_usage_proc_groups.clear();
00548 access_grant_proc.clear();
00549 access_to_channel.clear();
00550 access_grant_channel.clear();
00551 access_grant_partyline=false;
00552
00553 access_to_procs.clear();
00554 access_to_proc_groups.clear();
00555
00556 access_grant_proc.clear();
00557 access_grant_proc_groups.clear();
00558
00559 access_usage_proc.clear();
00560 access_usage_proc_groups.clear();
00561
00562 access_to_plususer=false;
00563 access_grant_plususer=false;
00564 access_to_plusproc=false;
00565 access_grant_plusproc=false;
00566 access_to_replication=false;
00567 access_grant_replication=false;
00568 access_to_restart=false;
00569 access_grant_restart=false;
00570 access_to_die=false;
00571 access_grant_die=false;
00572 access_to_filesystem=false;
00573 access_grant_filesystem=false;
00574 access_to_upgrade=access_grant_upgrade=false;
00575 access_to_apply=access_grant_apply=false;
00576 user_access_to_upgrade=user_access_grant_upgrade=false;
00577 user_access_to_apply=user_access_grant_apply=false;
00578 user_access_to_filesystem=false;
00579 user_access_grant_filesystem=false;
00580 access_to_private=false;
00581 access_grant_private=false;
00582 user_access_to_private=false;
00583 user_access_grant_private=false;
00584 msg_flood_hist.clear();
00585 new_user=0;
00586 user_name="";
00587 user_hosts.clear();
00588 user_dcc_hosts.clear();
00589 user_fullnames.clear();
00590 user_meta.clear();
00591 user_access_to_partyline=false;
00592 user_access_grant_partyline=false;
00593 user_access_to_groups.clear();
00594 user_access_grant_groups.clear();
00595 user_access_to_proc_groups.clear();
00596 user_access_grant_proc_groups.clear();
00597 user_access_usage_proc_groups.clear();
00598 user_access_to_channel.clear();
00599 user_access_grant_channel.clear();
00600 user_channels.clear();
00601 num_not_configured_channels=0;
00602 user_member_of.clear();
00603 user_access_to_plususer=false;
00604 user_access_grant_plususer=false;
00605 user_access_to_plusproc=false;
00606 user_access_grant_plusproc=false;
00607 user_access_to_replication=false;
00608 user_access_grant_replication=false;
00609 edit_user=0;
00610 edit_channel_num=0;
00611 edit_proc=0;
00612 plus_proc=false;
00613 proc_name="";
00614 proc_to_delete="";
00615 proc_decl="";
00616 proc_commands.clear();
00617 edit_proc_addbefore_line=0;
00618 edit_proc_addafter_line=0;
00619 edit_proc_replace_line=0;
00620 proc_error="";
00621 proc_groups.clear();
00622 access_to_backup=false;
00623 access_grant_backup=false;
00624 access_to_rehash=false;
00625 access_grant_rehash=false;
00626 user_access_to_backup=false;
00627 user_access_grant_backup=false;
00628 user_access_to_rehash=false;
00629 user_access_grant_rehash=false;
00630 user_access_to_restart=false;
00631 user_access_grant_restart=false;
00632 user_access_to_die=false;
00633 user_access_grant_die=false;
00634 edit_chan=false;
00635 access_to_chan_defs.clear();
00636 memset(telnet_buffer,0,sizeof(telnet_buffer));
00637 telnet_buffer_pos=0;
00638 telnet_botnet_called=false;
00639 partyline_channel="";
00640
00641 last_filesys_lookup=0;
00642
00643 terminator=0;
00644
00645 nick=ident=host=fullname="";
00646
00647 got_user_name=false;
00648 }
00649
00650 ~s_dcc_client()
00651 {
00652 if(dcc_send.f)
00653 fclose(dcc_send.f);
00654 dcc_send.f=NULL;
00655 }
00656 };
00657
00658
00659
00660
00661
00662
00663
00664 struct s_dcc_server {
00665 int group;
00666 bool using_ipv6;
00667 int dcc_addr;
00668 in_addr6_ dcc_addr6;
00669 unsigned short port;
00670 string bind_ip;
00671 s_socket socket;
00672 string server_type;
00673
00674 s_dcc_server()
00675 {
00676 group=0;
00677 using_ipv6=false;
00678 dcc_addr=0;
00679 memset(&dcc_addr6,0,sizeof(dcc_addr6));
00680 port=0;
00681 bind_ip="";
00682 socket.clear();
00683 }
00684 };
00685
00686
00687
00688
00689
00690
00691
00692 struct s_telnet_server {
00693 int telnet_addr;
00694 unsigned short port;
00695 string bind_ip;
00696 s_socket socket;
00697
00698 s_telnet_server()
00699 {
00700 telnet_addr=0;
00701 port=0;
00702 bind_ip="";
00703 socket.clear();
00704 }
00705 };
00706
00707
00708
00709
00710
00711
00712
00713 struct s_dcc_client_to_resume {
00714 bool using_ipv6;
00715 string ip_addr4;
00716 unsigned int ip_4;
00717 string ip_addr6;
00718 in_addr6_ ip_6;
00719 unsigned short port;
00720 string user_name;
00721 string nick;
00722 string file_name;
00723 size_t file_size;
00724 size_t resume_position;
00725
00726 time_t start_time;
00727
00728 s_dcc_client_to_resume()
00729 {
00730 ip_addr4="";
00731 ip_4=0;
00732 ip_addr6="";
00733 memset(&ip_6,0,sizeof(ip_6));
00734 port=0;
00735 user_name="";
00736 nick="";
00737 file_name="";
00738 file_size=0;
00739 resume_position=0;
00740 start_time=0;
00741 }
00742 };
00743
00744 vector<s_dcc_client> dcc_clients;
00745 vector<s_dcc_server> dcc_servers;
00746 vector<s_telnet_server> telnet_servers;
00747
00748 vector<s_dcc_send_file> dcc_awaiting_send;
00749
00750 vector<s_dcc_client_to_resume> dcc_to_resume;
00751
00752
00753
00754
00755
00756
00757
00758 struct s_user_to_lag {
00759 string user_name;
00760 int cnt;
00761 time_t last_try;
00762 bool notified;
00763
00764 s_user_to_lag() {
00765 user_name="";
00766 cnt=0;
00767 last_try=0;
00768 notified=false;
00769 }
00770 };
00771
00772 vector<s_user_to_lag> users_to_lag;
00773
00774 vector<s_dcc_request_whois> dcc_request_whois;
00775
00776 void dcc_check_for_filesystem(string user_name);
00777
00778 vector<s_user_to_lock_out> dcc_users_to_lock_out;
00779
00780 void dcc_broadcast(string msg);
00781
00782
00783
00784
00785
00786
00787
00788
00789
00790
00791 void dcc_send_msg(s_socket& socket, string msg, int& ec)
00792 {
00793 ec=0;
00794 size_t sent=sock_send(socket,msg.c_str(),msg.length(),ec);
00795 if(!ec)
00796 stats_dcc_chat_bytes_sent(sent);
00797 }
00798
00799
00800
00801
00802
00803
00804
00805 void dcc_close_servers()
00806 {
00807 {
00808 vector<s_dcc_server>::iterator i1;
00809 again_a:
00810 for(i1=dcc_servers.begin(); i1!=dcc_servers.end(); i1++) {
00811 sock_close((*i1).socket);
00812 dcc_servers.erase(i1);
00813 goto again_a;
00814 }
00815 }
00816 {
00817 vector<s_telnet_server>::iterator i1;
00818 again_b:
00819 for(i1=telnet_servers.begin(); i1!=telnet_servers.end(); i1++) {
00820 sock_close((*i1).socket);
00821 telnet_servers.erase(i1);
00822 goto again_b;
00823 }
00824 }
00825 }
00826
00827
00828
00829
00830
00831
00832
00833 void dcc_upgrade(vector<s_dcc_client>::iterator i, string& eol, string new_file_name)
00834 {
00835 string path="upgrade" FILE_SLASH;
00836 path+=new_file_name;
00837 {
00838 FILE* f=fopen(path.c_str(),"rb");
00839 if(f==NULL) {
00840 string disp=lang_get_string(1,(*i).lang,630)+eol;
00841 int ec=0;
00842 dcc_send_msg((*i).socket,disp,ec);
00843 return;
00844 } else {
00845 fclose(f);
00846 }
00847 }
00848 dcc_killing_user_eol=eol;
00849 dcc_killing_user_socket=&((*i).socket);
00850
00851 char* tmp=new char[(*i).as_in_logic.length()+128];
00852 sprintf(tmp,"%s%s","UPGRADE by ",(*i).as_in_logic.c_str());
00853 log_bot(tmp);
00854 dcc_broadcast(tmp);
00855 delete[] tmp;
00856 tmp=NULL;
00857
00858 logic_on_internal_event("@upgrade@",(*i).as_in_logic,path,"","",PRIVATE_EVENT_SEVERITY_CODE_INFORMATIONAL,"","");
00859
00860 dcc_close_servers();
00861
00862 log_free_locks();
00863
00864 logic_partyline_backup((*i).as_in_logic);
00865
00866 string msg="Entering UPGRADE state. All server sockets have been closed. Spawning new instance.";
00867 log_bot(msg.c_str());
00868 dcc_broadcast(msg);
00869
00870 #ifndef _WIN32
00871 chmod(path.c_str(),S_IRWXU);
00872 #endif
00873
00874 extern string binary_name;
00875 string arg="--upgrade=";
00876 string tmp2=binary_name;
00877 while(tmp2.find(FILE_SLASH,0)!=string::npos)
00878 tmp2.erase(0,tmp2.find(FILE_SLASH,0)+1);
00879 arg+=tmp2;
00880
00881 string tmp3=(string)"\""+path+"\"";
00882 s_exec_handle* h=exec_async_exec2(tmp3.c_str(),arg.c_str(),"." FILE_SLASH);
00883
00884 if(!h || h->error) {
00885 string disp=lang_get_string(1,(*i).lang,631)+eol;
00886 int ec=0;
00887 dcc_send_msg((*i).socket,disp,ec);
00888 dcc_want_to_upgrade=false;
00889 char msg1[]="UPGRADE panic! Error spawning new instance. You should use .restart command now.";
00890 log_bot(msg1);
00891
00892 logic_on_internal_event("@upgrade@",(*i).as_in_logic,path,"","",PRIVATE_EVENT_SEVERITY_CODE_ERROR,msg1,"");
00893 } else {
00894 string disp=lang_get_string(1,(*i).lang,632)+eol;
00895 int ec=0;
00896 dcc_send_msg((*i).socket,disp,ec);
00897 char msg1[]="UPGRADE: New instance spawned, waiting for it to come in.";
00898 log_bot(msg1);
00899
00900 logic_on_internal_event("@upgrade@",(*i).as_in_logic,path,"","",PRIVATE_EVENT_SEVERITY_CODE_INFORMATIONAL,msg1,"");
00901
00902 last_new_instance_join=time(NULL);
00903 dcc_killing_user_socket=&(*i).socket;
00904 dcc_who_is_killing=(*i).as_in_logic;
00905 dcc_killing_user_lang=(*i).lang;
00906 dcc_want_to_upgrade=true;
00907 }
00908 }
00909
00910
00911
00912
00913
00914
00915
00916
00917
00918
00919
00920
00921 void dcc_upgrade_bot_join(string nick, string ident, string host, string fullname, string channel)
00922 {
00923 last_new_instance_join=time(NULL);
00924 string eol=dcc_killing_user_eol;
00925 s_socket* s=dcc_killing_user_socket;
00926 string lang=dcc_killing_user_lang;
00927 if(s->cmp()) {
00928 string disp=lang_get_string(1,lang,633)+eol;
00929 disp+=" ";
00930 disp+=channel+eol;
00931 disp+=" ";
00932 disp+=nick;
00933 disp+="!";
00934 disp+=ident;
00935 disp+="@";
00936 disp+=host;
00937 disp+=" * ";
00938 disp+=fullname;
00939 disp+=eol;
00940 int ec=0;
00941 dcc_send_msg(*s,disp,ec);
00942 }
00943 }
00944
00945
00946
00947
00948
00949
00950
00951
00952
00953
00954
00955
00956
00957 void dcc_upgrade_bot_mode(string nick, string ident, string host, string fullname, string channel, string mode)
00958 {
00959 string eol=dcc_killing_user_eol;
00960 s_socket* s=dcc_killing_user_socket;
00961 string lang=dcc_killing_user_lang;
00962 if(s->cmp()) {
00963 string disp=lang_get_string(1,lang,634)+eol;
00964 disp+=" ";
00965 disp+=channel;
00966 disp+=" ";
00967 disp+=mode;
00968 disp+=eol;
00969 disp+=" ";
00970 disp+=nick;
00971 disp+="!";
00972 disp+=ident;
00973 disp+="@";
00974 disp+=host;
00975 disp+=" * ";
00976 disp+=fullname;
00977 disp+=eol;
00978 int ec=0;
00979 dcc_send_msg(*s,disp,ec);
00980 }
00981 }
00982
00983
00984
00985
00986
00987
00988
00989
00990
00991
00992
00993
00994 void dcc_upgrade_bot_nick(string nick, string ident, string host, string fullname, string new_nick)
00995 {
00996 string eol=dcc_killing_user_eol;
00997 s_socket* s=dcc_killing_user_socket;
00998 string lang=dcc_killing_user_lang;
00999 if(s->cmp()) {
01000 string disp=lang_get_string(1,lang,635);
01001 disp+=" ";
01002 disp+=new_nick;
01003 disp+=eol;
01004 disp+=" ";
01005 disp+=nick;
01006 disp+="!";
01007 disp+=ident;
01008 disp+="@";
01009 disp+=host;
01010 disp+=" * ";
01011 disp+=fullname;
01012 disp+=eol;
01013 int ec=0;
01014 dcc_send_msg(*s,disp,ec);
01015 }
01016 }
01017
01018
01019
01020
01021
01022
01023
01024
01025 int dcc_get_num_of_transfers()
01026 {
01027 int num=0;
01028 vector<s_dcc_client>::iterator i1;
01029 for(i1=dcc_clients.begin(); i1!=dcc_clients.end(); i1++)
01030 if((*i1).send || (*i1).send_from_filesystem)
01031 num++;
01032
01033 return num;
01034 }
01035
01036
01037
01038
01039
01040
01041
01042
01043
01044
01045
01046 int dcc_send_file(bool from_dcc, string public_name, string nick, int dcc_group)
01047 {
01048 string ident=irc_get_ident(nick);
01049 string host=irc_get_host(nick);
01050 string full_name=irc_get_fullname(nick);
01051
01052 string user_name=logic_find_user(nick,ident,host,full_name,irc_is_ircop(nick));
01053
01054 if(!logic_access_to_filesystem(user_name))
01055 return DCC_ACCESS_DENIED;
01056
01057 vector<s_file> files;
01058 filesys_dcc_filelist(user_name,files,false);
01059
01060 s_file f;
01061
01062 bool got=false;
01063
01064 vector<s_file>::iterator i1;
01065 for(i1=files.begin(); i1!=files.end(); i1++) {
01066 if(!(*i1).public_name.compare(public_name)) {
01067 got=true;
01068 f=*i1;
01069 }
01070 }
01071
01072 if(!got)
01073 return DCC_NO_SUCH_FILE;
01074
01075 got=false;
01076 vector<s_access>::iterator i2;
01077 for(i2=f.access.begin(); i2!=f.access.end(); i2++)
01078 if((*i2).all_users || !(*i2).user_name.compare(user_name) || (*i2).also_unknown)
01079 if((*i2).read) {
01080 if(!from_dcc && (*i2).secure) {
01081 string msg="PRIVMSG ";
01082 msg+=nick;
01083 msg+=" :";
01084 msg+=lang_get_string(1,"en",333);
01085 irc_putserv(msg.c_str(),false,LOW_PRIORITY);
01086 return DCC_ACCESS_DENIED;
01087 }
01088 got=true;
01089 break;
01090 }
01091 if(!got)
01092 return DCC_ACCESS_DENIED;
01093
01094 bool using_ipv6=false;
01095 in_addr ip;
01096 #ifdef _WIN32
01097 ip.S_un.S_addr=0;
01098 #else
01099 ip.s_addr=0;
01100 #endif
01101 in_addr6_ ip6;
01102 memset(&ip6,0,sizeof(ip6));
01103 in_addr ip_serv;
01104 #ifdef _WIN32
01105 ip_serv.S_un.S_addr=0;
01106 #else
01107 ip_serv.s_addr=0;
01108 #endif
01109 in_addr6_ ip6_serv;
01110 string bind_ip6;
01111 memset(&ip6_serv,0,sizeof(ip6_serv));
01112
01113 bool want_ipv6=false;
01114 again_ipv6:
01115 got=false;
01116 vector<s_dcc_server>::iterator i3;
01117 for(i3=dcc_servers.begin(); i3!=dcc_servers.end(); i3++)
01118 if((*i3).group==dcc_group) {
01119 if(!want_ipv6 && !(*i3).using_ipv6) {
01120 using_ipv6=false;
01121 int type=sock_get_address_type(host);
01122 if(type==4)
01123 inet_pton(AF_INET,host.c_str(),&ip);
01124 if(type==0)
01125 ip=sock_resolve(host.c_str(),NULL);
01126 if(type==6) {
01127 want_ipv6=true;
01128 goto again_ipv6;
01129 }
01130 {
01131 #ifdef _WIN32
01132 if(!ip.S_un.S_addr)
01133 #else
01134 if(!ip.s_addr)
01135 #endif
01136 return DCC_IO_ERROR;
01137 }
01138 #ifdef _WIN32
01139 ip_serv.S_un.S_addr=(*i3).dcc_addr;
01140 #else
01141 ip_serv.s_addr=(*i3).dcc_addr;
01142 #endif
01143 } else {
01144 using_ipv6=true;
01145 int type=sock_get_address_type(host);
01146 if(type==0)
01147 ip6=sock_resolve6((char*)host.c_str());
01148 if(type==6)
01149 inet_pton(AF_INET6,host.c_str(),&ip6);
01150 if(true) {
01151 if(!ip6.bytes[0] && !ip6.bytes[1] && !ip6.bytes[2] && !ip6.bytes[3]
01152 && !ip6.bytes[4] && !ip6.bytes[5] && !ip6.bytes[6] && !ip6.bytes[7]
01153 && !ip6.bytes[8] && !ip6.bytes[9] && !ip6.bytes[10] && !ip6.bytes[11]
01154 && !ip6.bytes[12] && !ip6.bytes[13] && !ip6.bytes[14] && !ip6.bytes[15])
01155 return DCC_IO_ERROR;
01156 }
01157 memcpy(&ip6_serv,&(*i3).dcc_addr6,sizeof(ip6_serv));
01158 bind_ip6=(*i3).bind_ip;
01159 if(bind_ip6.find("%",0)!=string::npos)
01160 bind_ip6.erase(bind_ip6.find("%",0),bind_ip6.length()-bind_ip6.find("%",0));
01161 }
01162 got=true;
01163 break;
01164 }
01165
01166 if(!got)
01167 return DCC_IO_ERROR;
01168
01169 s_dcc_send_file send;
01170 send.user_name_as_in_logic=user_name;
01171 send.resume_pos=0;
01172 send.public_name=public_name;
01173 send.start_time=time(NULL);
01174 send.using_ipv6=using_ipv6;
01175 if(!using_ipv6) {
01176 send.remote_ip=ip;
01177 memset(&send.remote_ip6,0,sizeof(send.remote_ip6));
01178 } else {
01179 #ifdef _WIN32
01180 send.remote_ip.S_un.S_addr=(unsigned long)-1;
01181 #else
01182 send.remote_ip.s_addr=(unsigned long)-1;
01183 #endif
01184 memcpy(&send.remote_ip6,&ip6,sizeof(send.remote_ip6));
01185 }
01186
01187 if(!using_ipv6) {
01188 char tmp[4];
01189 memcpy(tmp,&ip_serv,4);
01190
01191 #if !defined(HIGHFIRST)
01192
01193 char x;
01194
01195 x=tmp[0];
01196 tmp[0]=tmp[3];
01197 tmp[3]=x;
01198
01199 x=tmp[1];
01200 tmp[1]=tmp[2];
01201 tmp[2]=x;
01202
01203 #endif
01204 memcpy(&ip_serv,tmp,4);
01205 }
01206
01207 send.file_name="." FILE_SLASH "filesystem" FILE_SLASH;
01208 send.file_name+=f.internal_name;
01209
01210 FILE* ff=fopen(send.file_name.c_str(),"rb");
01211 if(!ff)
01212 return DCC_IO_ERROR;
01213
01214 fseek(ff,0,SEEK_END);
01215 send.size=ftell(ff);
01216 fclose(ff);
01217
01218 dcc_awaiting_send.push_back(send);
01219
01220 string inv="PRIVMSG ";
01221 inv+=nick;
01222 inv+=" :\x01";
01223 inv+="DCC SEND ";
01224 inv+=public_name;
01225 inv+=" ";
01226
01227 string ip_string;
01228
01229 char tmp[64];
01230 if(!using_ipv6) {
01231 sprintf(tmp,"%u",ip_serv);
01232 inv+=tmp;
01233 inet_ntop(AF_INET,&ip,tmp,63);
01234 ip_string=tmp;
01235 } else {
01236 inv+=bind_ip6;
01237 ip_string=bind_ip6;
01238 }
01239 inv+=" ";
01240
01241 ltoa((*i3).port,tmp,10);
01242
01243 inv+=tmp;
01244 inv+=" ";
01245 sprintf(tmp,"%u",send.size);
01246 inv+=tmp;
01247 inv+="\x01";
01248
01249 string inv2="NOTICE ";
01250 inv2+=nick;
01251 inv2+=" :DCC Send ";
01252 inv2+=public_name;
01253 inv2+=" (";
01254 inv2+=ip_string;
01255 inv2+=")";
01256
01257 irc_putserv(inv2.c_str(),false,HIGH_PRIORITY);
01258 irc_putserv(inv.c_str(),false,HIGH_PRIORITY);
01259
01260 return 0;
01261 }
01262
01263
01264
01265
01266
01267
01268
01269
01270
01271 void dcc_file_has_been_read(string public_name, string nick)
01272 {
01273 if(dcc_get_num_of_transfers()>=atol(conf_getvar("dcc_max_transfers").c_str())) {
01274 return;
01275 }
01276
01277 string ident=irc_get_ident(nick);
01278 string host=irc_get_host(nick);
01279 string full_name=irc_get_fullname(nick);
01280 in_addr ip=sock_resolve(host.c_str(),NULL);
01281 #ifdef _WIN32
01282 if(!ip.S_un.S_addr)
01283 #else
01284 if(!ip.s_addr)
01285 #endif
01286 return;
01287
01288 string user_name=logic_find_user(nick,ident,host,full_name,irc_is_ircop(nick));
01289
01290 if(!logic_access_to_filesystem(user_name))
01291 return;
01292
01293 vector<s_file> files;
01294 filesys_dcc_filelist(user_name,files,false);
01295
01296 s_file f;
01297
01298 bool got=false;
01299
01300 vector<s_file>::iterator i1;
01301 for(i1=files.begin(); i1!=files.end(); i1++) {
01302 if(!(*i1).public_name.compare(public_name)) {
01303 got=true;
01304 f=*i1;
01305 }
01306 }
01307
01308 if(!got)
01309 return;
01310
01311 got=false;
01312 vector<s_access>::iterator i2;
01313 for(i2=f.access.begin(); i2!=f.access.end(); i2++)
01314 if((*i2).all_users || !(*i2).user_name.compare(user_name))
01315 if((*i2).read) {
01316 if((*i2).notify_owner) {
01317 vector<s_event>::iterator i3;
01318 bool has_read=false;
01319 for(i3=f.events.begin(); i3!=f.events.end(); i3++) {
01320 if(!(*i3).user_name.compare(user_name)) {
01321 if((*i3).has_read)
01322 has_read=true;
01323 break;
01324 }
01325 }
01326 if(!has_read) {
01327 s_event e;
01328 e.clear();
01329 e.has_read=true;
01330 e.owner_notified=false;
01331 e.user_name=user_name;
01332 e.user_notified=false;
01333 e.first=time(NULL);
01334
01335 f.events.push_back(e);
01336 filesys_dcc_set_file_attrs(f);
01337 }
01338 break;
01339 }
01340 got=true;
01341 break;
01342 }
01343 if(!got)
01344 return;
01345 }
01346
01347
01348
01349
01350
01351
01352
01353
01354
01355
01356 string dcc_get_password(string user)
01357 {
01358 FILE* in=fopen("pass.txt","r");
01359 if(!in)
01360 return "";
01361 char ln[10240+1];
01362 while(!feof(in)) {
01363 if(fgets(ln,1024*10-1,in)==NULL)
01364 break;
01365 ln[10240]=0;
01366 if(ln[strlen(ln)-1]=='\r')
01367 ln[strlen(ln)-1]=0;
01368 if(ln[strlen(ln)-1]=='\n')
01369 ln[strlen(ln)-1]=0;
01370 if(ln[strlen(ln)-1]=='\r')
01371 ln[strlen(ln)-1]=0;
01372 if(ln[strlen(ln)-1]=='\n')
01373 ln[strlen(ln)-1]=0;
01374
01375 string name, pswd;
01376 int pos=0;
01377 for(unsigned int i1=0; i1<strlen(ln); i1++) {
01378 if(pos==0 && ln[i1]=='=') {
01379 pos++;
01380 continue;
01381 }
01382 if(pos==0)
01383 name+=ln[i1];
01384 if(pos==1)
01385 pswd+=ln[i1];
01386 }
01387
01388 if(!name.compare(user)) {
01389 fclose(in);
01390 return pswd;
01391 }
01392 }
01393 fclose(in);
01394 return "";
01395 }
01396
01397
01398
01399
01400
01401
01402
01403
01404
01405
01406 void dcc_set_password(string user, string md5pass)
01407 {
01408 if(dcc_want_to_upgrade)
01409 return;
01410
01411 map<string,string> pswd_;
01412
01413 bool got=false;
01414
01415 FILE* in=fopen("pass.txt","r");
01416 char ln[10240+1];
01417 while(in && !feof(in)) {
01418 if(fgets(ln,1024*10-1,in)==NULL)
01419 break;
01420 ln[10240]=0;
01421 if(ln[strlen(ln)-1]=='\r')
01422 ln[strlen(ln)-1]=0;
01423 if(ln[strlen(ln)-1]=='\n')
01424 ln[strlen(ln)-1]=0;
01425 if(ln[strlen(ln)-1]=='\r')
01426 ln[strlen(ln)-1]=0;
01427 if(ln[strlen(ln)-1]=='\n')
01428 ln[strlen(ln)-1]=0;
01429
01430 string name, pswd;
01431 int pos=0;
01432 for(unsigned int i1=0; i1<strlen(ln); i1++) {
01433 if(pos==0 && ln[i1]=='=') {
01434 pos++;
01435 continue;
01436 }
01437 if(pos==0)
01438 name+=ln[i1];
01439 if(pos==1)
01440 pswd+=ln[i1];
01441 }
01442
01443 pair<string,string> p;
01444 p.first=name;
01445 p.second=pswd;
01446 if(!name.compare(user)) {
01447 p.second=md5pass;
01448 got=true;
01449 }
01450 pswd_.insert(p);
01451 }
01452 if(!got) {
01453 pair<string,string> p;
01454 p.first=user;
01455 p.second=md5pass;
01456 pswd_.insert(p);
01457 }
01458 if(in)
01459 fclose(in);
01460 FILE* f=fopen("pass.txt","w");
01461 if(f) {
01462 map<string,string>::iterator i1;
01463 for(i1=pswd_.begin(); i1!=pswd_.end(); i1++)
01464 fprintf(f,"%s=%s\n",(*i1).first.c_str(),(*i1).second.c_str());
01465 fclose(f);
01466 }
01467 }
01468
01469 void dcc_check_limit();
01470
01471
01472
01473
01474
01475
01476
01477
01478
01479
01480 void irc_quoted_callback(const char* str, const char* nick, const char* host_mask)
01481 {
01482 if(strstr(str,"DCC ")==NULL)
01483 return;
01484
01485 string user_name;
01486 {
01487 if(irc_get_host(nick).empty()) {
01488 bool got=false;
01489 vector<s_dcc_request_whois>::iterator i1;
01490 l1:
01491 for(i1=dcc_request_whois.begin(); i1!=dcc_request_whois.end(); i1++) {
01492 if((*i1).start+120<time(NULL)) {
01493 dcc_request_whois.erase(i1);
01494 goto l1;
01495 }
01496 }
01497 for(i1=dcc_request_whois.begin(); i1!=dcc_request_whois.end(); i1++) {
01498 if(!(*i1).nick.compare(nick) && (*i1).got_whois) {
01499 user_name=logic_find_user(nick,(*i1).ident,(*i1).host,(*i1).full_name,(*i1).irc_op);
01500 got=true;
01501 break;
01502 }
01503 }
01504
01505 if(!got) {
01506 s_dcc_request_whois r;
01507 r.clear();
01508 time(&r.start);
01509 r.str=str;
01510 r.nick=nick;
01511 r.host_mask=host_mask;
01512 dcc_request_whois.push_back(r);
01513
01514 string msg="WHOIS ";
01515 msg+=nick;
01516 irc_putserv(msg.c_str(),true,HIGH_PRIORITY);
01517 return;
01518 }
01519 } else
01520 user_name=logic_find_user(nick,irc_get_ident(nick), irc_get_host(nick), irc_get_fullname(nick), irc_is_ircop(nick));
01521 vector<s_user_to_lag>::iterator i1;
01522 again:
01523 for(i1=users_to_lag.begin(); i1!=users_to_lag.end(); i1++) {
01524 if((*i1).last_try+atol(conf_getvar("ctcp_lag_user_seconds").c_str())<time(NULL)) {
01525 users_to_lag.erase(i1);
01526 goto again;
01527 }
01528 }
01529 bool got=false;
01530 for(i1=users_to_lag.begin(); i1!=users_to_lag.end(); i1++) {
01531 if(!(*i1).user_name.compare(user_name)) {
01532 (*i1).cnt++;
01533 (*i1).last_try=time(NULL);
01534 got=true;
01535 break;
01536 }
01537 }
01538 if(got) {
01539 if((*i1).cnt>atol(conf_getvar("ctcp_lag_user_msgs").c_str())) {
01540 time_t x=(*i1).last_try;
01541 time_t now=time(NULL);
01542 while((signed)x>0 && (*i1).cnt>0 && (signed)now-(signed)x>atol(conf_getvar("ctcp_lag_user_seconds").c_str())) {
01543 x-=atol(conf_getvar("ctcp_lag_user_seconds").c_str());
01544 (*i1).cnt--;
01545 }
01546 if((*i1).cnt>atol(conf_getvar("ctcp_lag_user_msgs").c_str())) {
01547 if(!(*i1).notified) {
01548 (*i1).notified=true;
01549 string msg="PRIVMSG ";
01550 msg+=nick;
01551 msg+=" :";
01552 string lang="en";
01553 msg+=lang_get_string(1,lang,446);
01554 irc_putserv(msg.c_str(),false,LOW_PRIORITY);
01555 }
01556 return;
01557 }
01558 if((*i1).cnt==0) {
01559 (*i1).cnt=1;
01560 (*i1).notified=false;
01561 }
01562 }
01563 } else {
01564 s_user_to_lag u;
01565 u.cnt=1;
01566 u.last_try=time(NULL);
01567 u.user_name=user_name;
01568 u.notified=false;
01569 users_to_lag.push_back(u);
01570 }
01571 }
01572
01573 if((strlen(str)>=14 && str[0]=='D' && str[1]=='C' && str[2]=='C' && str[3]==' ' && str[4]=='C' && str[5]=='H' && str[6]=='A' && str[7]=='T' && str[8]==' ' && str[9]=='c' && str[10]=='h' && str[11]=='a' && str[12]=='t' && str[13]==' ') ||
01574 (strlen(str)>=9 && str[0]=='D' && str[1]=='C' && str[2]=='C' && str[3]==' ' && str[4]=='S' && str[5]=='E' && str[6]=='N' && str[7]=='D' && str[8]==' ')) {
01575 bool send=str[4]=='S';
01576
01577 string user_name_as_in_logic=user_name;
01578
01579 {
01580 s_user u;
01581 vector<s_channel> chs;
01582 logic_partyline_get_user(user_name_as_in_logic,u,chs);
01583 if(send && !u.access_to_filesystem)
01584 return;
01585 if(!send && !u.access_to_partyline)
01586 return;
01587 }
01588
01589 string file_name;
01590
01591 int begin_pos=14;
01592
01593 if(send) {
01594 if(dcc_get_num_of_transfers()>=atol(conf_getvar("dcc_max_transfers").c_str())) {
01595 string msg="PRIVMSG ";
01596 msg+=nick;
01597 msg+=" :";
01598 string lang="en";
01599 msg+=lang_get_string(1,lang,445);
01600 irc_putserv(msg.c_str(),false,LOW_PRIORITY);
01601 return;
01602 }
01603
01604 int i1=9;
01605 for(; str[i1]!=0; i1++) {
01606 if(str[i1]==0x20)
01607 break;
01608 file_name+=str[i1];
01609 }
01610 if(str[i1]==0x20)
01611 i1++;
01612 begin_pos=i1;
01613 }
01614
01615 string ip_, port_;
01616 int i1=begin_pos;
01617 for(; str[i1]!=0; i1++) {
01618 if(str[i1]==0x20)
01619 break;
01620 ip_+=str[i1];
01621 }
01622 if(str[i1]!=0)
01623 i1++;
01624 for(; str[i1]!=0; i1++) {
01625 if(str[i1]==0x20)
01626 break;
01627 port_+=str[i1];
01628 }
01629
01630 if(str[i1]!=0)
01631 i1++;
01632
01633 string size;
01634
01635 if(send) {
01636 while(str[i1]!=0 && str[i1]==0x20)
01637 i1++;
01638 for(; str[i1]!=0; i1++) {
01639 if(str[i1]==0x20)
01640 break;
01641 size+=str[i1];
01642 }
01643 }
01644
01645 long ip=0;
01646 string ip_addr;
01647 in_addr6_ ip6;
01648 memset(&ip6,0,sizeof(ip6));
01649 bool got_ipv6=false;
01650 long i_size=atol(size.c_str());
01651 unsigned short port=(unsigned short)atol(port_.c_str());
01652
01653 if(ip_.find(":",0)==string::npos && ip_.find(".",0)==string::npos) {
01654 got_ipv6=false;
01655
01656 long ip=atol(ip_.c_str());
01657 byteReverse((unsigned char*)&ip,1);
01658 unsigned char* i=(unsigned char*)&ip;
01659 char tmp[64];
01660
01661 ltoa(*i,tmp,10);
01662 ip_addr=(string)"."+tmp;
01663 i++;
01664
01665 ltoa(*i,tmp,10);
01666 ip_addr=(string)"."+tmp+ip_addr;
01667 i++;
01668
01669 ltoa(*i,tmp,10);
01670 ip_addr=(string)"."+tmp+ip_addr;
01671 i++;
01672
01673 ltoa(*i,tmp,10);
01674 ip_addr=(string)tmp+ip_addr;
01675 i++;
01676 }
01677 if(ip_.find(":",0)==string::npos && ip_.find(".",0)!=string::npos) {
01678 got_ipv6=false;
01679 if(inet_pton(AF_INET,ip_.c_str(),&ip)==1) {
01680 ip_addr=ip_;
01681 } else
01682 return;
01683 }
01684 if(ip_.find(":",0)!=string::npos) {
01685 got_ipv6=true;
01686 if(inet_pton(AF_INET6,ip_.c_str(),&ip6)==1) {
01687 ip_addr=ip_;
01688 } else
01689 return;
01690 }
01691
01692 string dcc_bind_ip=conf_getvar("dcc_bind_ip");
01693 if(dcc_bind_ip.empty())
01694 dcc_bind_ip="0.0.0.0";
01695 string dcc_bind_ip6=conf_getvar("dcc_bind_ip6");
01696 if(dcc_bind_ip6.empty())
01697 dcc_bind_ip6="::";
01698
01699 if(send) {
01700 size_t got_bytes;
01701 bool resume=filesys_dcc_check_for_resume(user_name_as_in_logic,file_name,got_bytes);
01702 if(resume) {
01703 string msg="PRIVMSG ";
01704 msg+=nick;
01705 msg+=" :\x01" "DCC RESUME ";
01706 msg+=file_name;
01707 msg+=" ";
01708 msg+=port_;
01709 msg+=" ";
01710 char tmp[64];
01711 ltoa((long)got_bytes,tmp,10);
01712 msg+=tmp;
01713 msg+="\x01";
01714 irc_putserv(msg.c_str(),false,LOW_PRIORITY);
01715
01716 s_dcc_client_to_resume res;
01717 res.file_name=file_name;
01718 res.file_size=i_size;
01719 res.using_ipv6=got_ipv6;
01720 if(!got_ipv6) {
01721 res.ip_addr4=ip_;
01722 res.ip_4=ip;
01723
01724 res.ip_addr6="";
01725 memset(&res.ip_6,0,sizeof(res.ip_6));
01726 } else {
01727 res.ip_addr4="";
01728 res.ip_4=0;
01729
01730 res.ip_addr6=ip_;
01731 res.ip_6=ip6;
01732 }
01733 res.nick=nick;
01734 res.port=port;
01735 res.start_time=time(NULL);
01736 res.resume_position=got_bytes;
01737 res.user_name=user_name_as_in_logic;
01738
01739 dcc_to_resume.push_back(res);
01740 return;
01741 } else {
01742 int ec=filesys_check_add_file_raw(file_name,user_name_as_in_logic);
01743 if(ec==FILESYS_ALREADY_EXISTS) {
01744 string msg="PRIVMSG ";
01745 msg+=nick;
01746 msg+=" :";
01747
01748 string lang="en";
01749 string m=lang_subst(lang_get_string(1,lang,444),file_name);
01750
01751 msg+=m;
01752 irc_putserv(msg.c_str(),false,LOW_PRIORITY);
01753 return;
01754 }
01755 }
01756 }
01757
01758 {
01759 bool spoofing=false;
01760 in_addr6_ supplied6;
01761 in_addr6_ originator6;
01762 in_addr supplied4;
01763 in_addr originator4;
01764 if(got_ipv6) {
01765 supplied6=sock_resolve6((char*)ip_addr.c_str());
01766 originator6=sock_resolve6((char*)irc_get_host(nick).c_str());
01767 unsigned char sum_supplied=0;
01768 unsigned char sum_originator=0;
01769 for(int i1=0; i1<sizeof(supplied6); i1++) {
01770 sum_supplied|=((unsigned char*)&supplied6)[i1];
01771 sum_originator|=((unsigned char*)&originator6)[i1];
01772 if(((unsigned char*)&supplied6)[i1]!=((unsigned char*)&originator6)[i1]) {
01773 spoofing=true;
01774 break;
01775 }
01776 }
01777 if(!sum_supplied || !sum_originator)
01778 spoofing=true;
01779 } else {
01780 supplied4=sock_resolve(ip_addr.c_str(),NULL);
01781 originator4=sock_resolve(irc_get_host(nick).c_str(),NULL);
01782 unsigned char sum_supplied=0;
01783 unsigned char sum_originator=0;
01784 for(int i1=0; i1<sizeof(supplied4); i1++) {
01785 sum_supplied|=((unsigned char*)&supplied4)[i1];
01786 sum_originator|=((unsigned char*)&originator4)[i1];
01787 if(((unsigned char*)&supplied4)[i1]!=((unsigned char*)&originator4)[i1]) {
01788 spoofing=true;
01789 break;
01790 }
01791 }
01792 if(!sum_supplied || !sum_originator)
01793 spoofing=true;
01794 }
01795 if(spoofing) {
01796 string msg="DCC IP address spoofing from user ";
01797 msg+=host_mask;
01798 msg+=" with supplied IPv";
01799 msg+=(got_ipv6?"6":"4");
01800 msg+=" address \"";
01801 msg+=ip_;
01802 msg+="\" translated to ";
01803 char tmp[128+1];
01804 tmp[0]=tmp[128]=0;
01805 if(got_ipv6)
01806 inet_ntop(AF_INET6,(const void*)&supplied6,tmp,128);
01807 else
01808 inet_ntop(AF_INET,(const void*)&supplied4,tmp,128);
01809 msg+=tmp;
01810 msg+=", but host of sender of CTCP message was decoded/and/or/DNS-translated to IPv";
01811 msg+=(got_ipv6?"6":"4");
01812 msg+=" address ";
01813 tmp[0]=tmp[128]=0;
01814 if(got_ipv6)
01815 inet_ntop(AF_INET6,(const void*)&originator6,tmp,128);
01816 else
01817 inet_ntop(AF_INET,(const void*)&originator4,tmp,128);
01818 msg+=tmp;
01819 log_bot(msg.c_str());
01820 return;
01821 }
01822 }
01823
01824 int ec=0;
01825 s_socket s;
01826 if(!got_ipv6)
01827 s=sock_connect((char*)dcc_bind_ip.c_str(),(char*)ip_addr.c_str(),port,ec,true);
01828 else
01829 s=sock_connect((char*)dcc_bind_ip6.c_str(),(char*)ip_addr.c_str(),port,ec,true);
01830 if(s.cmp()==false || ec) {
01831 log_socket(ec,sock_error(ec),"while calling sock_connect in file " __FILE__ " in function " __FUNC__);
01832 return;
01833 }
01834
01835 s_dcc_client c;
01836
01837 c.nick=nick;
01838 c.ident=irc_get_ident(nick);
01839 c.host=irc_get_host(nick);
01840 c.fullname=irc_get_fullname(nick);
01841
01842 c.resume_pos=0;
01843
01844 c.chat=!send;
01845 c.send=send;
01846 c.send_from_filesystem=false;
01847 c.socket=s;
01848
01849 c.server_socket.clear();
01850 c.telnet=false;
01851 c.got_passwd=0;
01852 c.new_user=0;
01853 c.edit_user=0;
01854 c.filesystem=0;
01855 c.as_in_logic=user_name_as_in_logic;
01856 c.got_user_name=(c.as_in_logic.empty()?false:true);
01857
01858 if(send) {
01859 c.dcc_send.size=i_size;
01860 c.dcc_send.original_name=file_name;
01861 c.dcc_send.is_file_server_proto=false;
01862 }
01863
01864 dcc_clients.push_back(c);
01865 dcc_check_limit();
01866 }
01867
01868 if(strlen(str)>=11 && str[0]=='D' && str[1]=='C' && str[2]=='C' && str[3]==' ' && str[4]=='A' && str[5]=='C' && str[6]=='C' && str[7]=='E' && str[8]=='P' && str[9]=='T' && str[10]==' ') {
01869 if(dcc_get_num_of_transfers()>=atol(conf_getvar("dcc_max_transfers").c_str())) {
01870 string msg="PRIVMSG ";
01871 msg+=nick;
01872 msg+=" :";
01873 string lang="en";
01874 msg+=lang_get_string(1,lang,445);
01875 irc_putserv(msg.c_str(),false,HIGH_PRIORITY);
01876 return;
01877 }
01878
01879 string file_name;
01880
01881 int begin_pos=11;
01882
01883 bool send=true;
01884 if(send) {
01885 int i1=11;
01886 for(; str[i1]!=0; i1++) {
01887 if(str[i1]==0x20)
01888 break;
01889 file_name+=str[i1];
01890 }
01891 if(str[i1]==0x20)
01892 i1++;
01893 begin_pos=i1;
01894 }
01895
01896 string user_name_as_in_logic=user_name;
01897
01898 {
01899 s_user u;
01900 vector<s_channel> chs;
01901 logic_partyline_get_user(user_name_as_in_logic,u,chs);
01902 if(send && !u.access_to_filesystem)
01903 return;
01904 if(!send && !u.access_to_partyline)
01905 return;
01906 }
01907
01908 string port_, position_;
01909 int i1=begin_pos;
01910 for(; str[i1]!=0; i1++) {
01911 if(str[i1]==0x20)
01912 break;
01913 port_+=str[i1];
01914 }
01915 if(str[i1]!=0)
01916 i1++;
01917 for(; str[i1]!=0; i1++) {
01918 if(str[i1]==0x20)
01919 break;
01920 position_+=str[i1];
01921 }
01922
01923 if(str[i1]!=0)
01924 i1++;
01925
01926 unsigned short port=(unsigned short)atol(port_.c_str());
01927
01928 {
01929 bool got=false;
01930 vector<s_dcc_client_to_resume>::iterator i1;
01931 for(i1=dcc_to_resume.begin(); i1!=dcc_to_resume.end(); i1++)
01932
01933
01934 if(!(*i1).nick.compare(nick) && !(*i1).user_name.compare(user_name_as_in_logic)) {
01935 file_name=(*i1).file_name;
01936 port=(*i1).port;
01937 char tmp[64];
01938 ltoa((long)(*i1).resume_position,tmp,10);
01939 position_=tmp;
01940
01941 got=true;
01942 break;
01943 }
01944
01945 if(!got) {
01946
01947 log_debug("in file " __FILE__ " in function " __FUNC__ " occurred panic: cannot find entry for DCC RESUME! huh?!");
01948 return;
01949 }
01950
01951 s_dcc_client_to_resume res=*i1;
01952 dcc_to_resume.erase(i1);
01953
01954 size_t i_size=res.file_size;
01955 string ip_addr;
01956 if(!res.using_ipv6)
01957 ip_addr=res.ip_addr4;
01958 else
01959 ip_addr=res.ip_addr6;
01960
01961 string dcc_bind_ip=conf_getvar("dcc_bind_ip");
01962 if(dcc_bind_ip.empty())
01963 dcc_bind_ip="0.0.0.0";
01964 string dcc_bind_ip6=conf_getvar("dcc_bind_ip6");
01965 if(dcc_bind_ip6.empty())
01966 dcc_bind_ip6="::";
01967
01968 int ec=0;
01969 s_socket s;
01970 if(!res.using_ipv6)
01971 s=sock_connect((char*)dcc_bind_ip.c_str(),(char*)ip_addr.c_str(),port,ec,true);
01972 else
01973 s=sock_connect((char*)dcc_bind_ip6.c_str(),(char*)ip_addr.c_str(),port,ec,true);
01974 if(s.cmp()==false || ec) {
01975 log_socket(ec,sock_error(ec),"while calling sock_connect in file " __FILE__ " in function " __FUNC__);
01976 return;
01977 }
01978
01979 s_dcc_client c;
01980
01981 c.nick=nick;
01982 c.ident=irc_get_ident(nick);
01983 c.host=irc_get_host(nick);
01984 c.fullname=irc_get_fullname(nick);
01985
01986 c.resume_pos=atol(position_.c_str());
01987
01988 c.chat=!send;
01989 c.send=send;
01990 c.send_from_filesystem=false;
01991 c.socket=s;
01992
01993 c.server_socket.clear();
01994 c.telnet=false;
01995 c.got_passwd=0;
01996 c.new_user=0;
01997 c.edit_user=0;
01998 c.filesystem=0;
01999 c.as_in_logic=user_name_as_in_logic;
02000 c.got_user_name=(c.as_in_logic.empty()?false:true);
02001
02002 c.dcc_send.size=i_size;
02003 c.dcc_send.original_name=file_name;
02004 c.dcc_send.is_file_server_proto=false;
02005
02006 dcc_clients.push_back(c);
02007 dcc_check_limit();
02008 }
02009 }
02010
02011 if((strlen(str)>=11 && str[0]=='D' && str[1]=='C' && str[2]=='C' && str[3]==' ' && str[4]=='R' && str[5]=='E' && str[6]=='S' && str[7]=='U' && str[8]=='M' && str[9]=='E' && str[10]==' ')) {
02012 if(dcc_get_num_of_transfers()>=atol(conf_getvar("dcc_max_transfers").c_str())) {
02013 string msg="PRIVMSG ";
02014 msg+=nick;
02015 msg+=" :";
02016 string lang="en";
02017 msg+=lang_get_string(1,lang,445);
02018 irc_putserv(msg.c_str(),false,HIGH_PRIORITY);
02019 return;
02020 }
02021
02022
02023
02024 string file_name;
02025
02026 int begin_pos=11;
02027
02028 string user_name_as_in_logic=user_name;
02029
02030 {
02031 s_user u;
02032 vector<s_channel> chs;
02033 logic_partyline_get_user(user_name_as_in_logic,u,chs);
02034 if(!u.access_to_filesystem)
02035 return;
02036 }
02037
02038 string port_, position_;
02039 int i1=begin_pos;
02040
02041 bool q=str[i1]=='\"';
02042 for(; str[i1]!=0; i1++) {
02043 if(str[i1]==0x20 && !q)
02044 break;
02045 if(str[i1]=='\"')
02046 q=false;
02047 file_name+=str[i1];
02048 }
02049 if(file_name.length()>0 && file_name[0]=='\"')
02050 file_name.erase(0,1);
02051 if(file_name.length()>0 && file_name[file_name.length()-1]=='\"')
02052 file_name.erase(file_name.length()-1,1);
02053
02054 if(str[i1]!=0)
02055 i1++;
02056
02057 for(; str[i1]!=0; i1++) {
02058 if(str[i1]==0x20)
02059 break;
02060 port_+=str[i1];
02061 }
02062 if(str[i1]!=0)
02063 i1++;
02064 for(; str[i1]!=0; i1++) {
02065 if(str[i1]==0x20)
02066 break;
02067 position_+=str[i1];
02068 }
02069
02070 if(str[i1]!=0)
02071 i1++;
02072
02073
02074 long pos=atol(position_.c_str());
02075
02076 string msg="PRIVMSG ";
02077 msg+=nick;
02078 msg+=" :\x01" "DCC ACCEPT ";
02079 msg+=(string)"\""+file_name+"\"";
02080 msg+=" ";
02081 msg+=port_;
02082 msg+=" ";
02083 msg+=position_;
02084 msg+="\x01";
02085 irc_putserv(msg.c_str(),false,HIGH_PRIORITY);
02086
02087 {
02088 vector<s_dcc_send_file>::iterator i1;
02089 for(i1=dcc_awaiting_send.begin(); i1!=dcc_awaiting_send.end(); i1++) {
02090 if(!(*i1).user_name_as_in_logic.compare(user_name_as_in_logic) && !(*i1).public_name.compare(file_name)) {
02091 (*i1).resume_pos=pos;
02092 break;
02093 }
02094 }
02095 }
02096 }
02097 }
02098
02099
02100
02101
02102
02103
02104
02105
02106
02107 string dcc_get_line(string& buff)
02108 {
02109 string res;
02110 bool got_eol=false;
02111 unsigned int i1;
02112 for(i1=0; i1<buff.length(); i1++) {
02113 if(buff[i1]=='\n') {
02114 got_eol=true;
02115 break;
02116 }
02117 res+=buff[i1];
02118 }
02119
02120 if(got_eol)
02121 buff.erase(0,i1+1);
02122 else
02123 return "";
02124
02125 if(res.length()>0 && res[res.length()-1]=='\r')
02126 res.erase(res.length()-1,1);
02127 if(res.length()>0 && res[res.length()-1]=='\n')
02128 res.erase(res.length()-1,1);
02129 if(res.length()>0 && res[res.length()-1]=='\r')
02130 res.erase(res.length()-1,1);
02131 if(res.length()>0 && res[res.length()-1]=='\n')
02132 res.erase(res.length()-1,1);
02133
02134
02135 l:
02136 for(i1=0; i1<res.length(); i1++)
02137 if(res[i1]==8) {
02138 if(i1==0) {
02139 res.erase(0,1);
02140 goto l;
02141 }
02142 res.erase(i1-1,2);
02143 goto l;
02144 }
02145
02146 return res;
02147 }
02148
02149
02150
02151
02152
02153
02154
02155
02156
02157 void dcc_loop_msg(vector<s_dcc_client>::iterator i, string& eol)
02158 {
02159 if((*i).msg==0)
02160 return;
02161
02162 if((*i).msg==1) {
02163 (*i).fs.file.clear();
02164 (*i).fs.name="";
02165 (*i).fs.new_access.clear();
02166 (*i).msg_expiration=0;
02167
02168 (*i).msg_content="";
02169
02170 string disp=lang_get_string(1,(*i).lang,315)+eol;
02171 vector<s_user>::iterator i1;
02172 for(i1=r_users.begin(); i1!=r_users.end(); i1++)
02173 disp+=(*i1).name+eol;
02174 disp+=lang_get_string(1,(*i).lang,316)+eol;
02175 disp+=lang_get_string(1,(*i).lang,338)+eol;
02176 int ec=0;
02177 dcc_send_msg((*i).socket,disp,ec);
02178 (*i).msg++;
02179 return;
02180 }
02181
02182 if((*i).msg==2) {
02183 string p=dcc_get_line((*i).in_buff);
02184 if(!p.compare(""))
02185 return;
02186
02187 if(!p.compare(".")) {
02188 (*i).msg++;
02189 string disp=lang_get_string(1,(*i).lang,337)+eol;
02190 int ec=0;
02191 dcc_send_msg((*i).socket,disp,ec);
02192 return;
02193 }
02194 bool all_users=!p.compare("*");
02195 string all_channel;
02196 if(p.length()>=2 && p[0]=='*') {
02197 p.erase(0,1);
02198 bool got=false;
02199 vector<string>::iterator i1;
02200 for(i1=(*i).access_to_channel.begin(); i1!=(*i).access_to_channel.end(); i1++)
02201 if(!cmp_strings_case_insensitive(*i1,p)) {
02202 got=true;
02203 break;
02204 }
02205 if(got) {
02206 all_channel=p;
02207 } else {
02208 all_channel="";
02209 all_users=false;
02210 string disp=lang_get_string(1,(*i).lang,323)+eol;
02211 int ec=0;
02212 dcc_send_msg((*i).socket,disp,ec);
02213 return;
02214 }
02215 }
02216
02217 if(!all_users && all_channel.empty()) {
02218 string disp=lang_get_string(1,(*i).lang,304)+eol;
02219 disp+=lang_get_string(1,(*i).lang,315)+eol;
02220 vector<s_user>::iterator i1;
02221 for(i1=r_users.begin(); i1!=r_users.end(); i1++) {
02222 disp+=(*i1).name+eol;
02223 if(!(*i1).name.compare(p)) {
02224 (*i).fs.new_access.clear();
02225 (*i).fs.new_access.user_name=p;
02226
02227 s_user u;
02228 vector<s_channel> chs;
02229 logic_partyline_get_user(p,u,chs);
02230 bool unknown_user=u.host_unknown;
02231 logic_partyline_get_user((*i).as_in_logic,u,chs);
02232 vector<s_channel>::iterator i2;
02233 bool can=(*i).access_to_can_send_unknown_users;
02234
02235
02236
02237
02238
02239 if(!unknown_user)
02240 can=true;
02241 if(unknown_user && !can) {
02242 string disp=lang_get_string(1,(*i).lang,480)+eol;
02243 int ec=0;
02244 dcc_send_msg((*i).socket,disp,ec);
02245 return;
02246 }
02247 (*i).fs.new_access.user_name=p;
02248 (*i).fs.file.access.push_back((*i).fs.new_access);
02249 (*i).fs.new_access.clear();
02250 string disp=lang_get_string(1,(*i).lang,339)+eol;
02251 int ec=0;
02252 dcc_send_msg((*i).socket,disp,ec);
02253 return;
02254 }
02255 }
02256 int ec=0;
02257 dcc_send_msg((*i).socket,disp,ec);
02258 }
02259 if(!all_channel.empty()) {
02260
02261
02262
02263
02264
02265
02266
02267
02268
02269
02270
02271
02272 vector<s_channel>::iterator i1;
02273 bool got=false;
02274 map<string,string> vars;
02275 for(i1=r_channels.begin(); i1!=r_channels.end(); i1++) {
02276 if(!(*i).as_in_logic.compare((*i1).username) && !cmp_strings_case_insensitive(logic_eval((*i1).channel_name,vars),all_channel) && !(*i1).host_unknown && (*i1).can_send_unknown_users) {
02277 (*i).fs.new_access.clear();
02278 (*i).fs.new_access.all_on_channel=all_channel;
02279 got=true;
02280 break;
02281 }
02282 }
02283
02284 if(!got) {
02285 (*i).fs.new_access.clear();
02286 (*i).fs.new_access.all_on_channel=all_channel;
02287 (*i).fs.file.access.push_back((*i).fs.new_access);
02288
02289 string disp=lang_get_string(1,(*i).lang,339)+eol;
02290 int ec=0;
02291 dcc_send_msg((*i).socket,disp,ec);
02292 return;
02293 }
02294 (*i).msg=2000;
02295 return;
02296 }
02297 if(all_users) {
02298 if(!(*i).access_to_can_send_all_users) {
02299 string disp=lang_get_string(1,(*i).lang,479)+eol;
02300 int ec=0;
02301 dcc_send_msg((*i).socket,disp,ec);
02302 return;
02303 }
02304
02305 s_access a;
02306 a.all_users=true;
02307 (*i).fs.file.access.clear();
02308 (*i).fs.file.access.push_back(a);
02309 (*i).msg++;
02310
02311 string disp=lang_get_string(1,(*i).lang,337)+eol;
02312 int ec=0;
02313 dcc_send_msg((*i).socket,disp,ec);
02314 }
02315 return;
02316 }
02317
02318 if((*i).msg==3) {
02319 string p=dcc_get_line((*i).in_buff);
02320 if(!p.compare(""))
02321 return;
02322
02323 if(p.compare(".")) {
02324 if(atol(conf_getvar("dcc_max_message_size").c_str())!=0 && (*i).msg_content.length()+p.length()>(unsigned)atol(conf_getvar("dcc_max_message_size").c_str())) {
02325 string disp=lang_get_string(1,(*i).lang,613)+eol;
02326 int ec=0;
02327 dcc_send_msg((*i).socket,disp,ec);
02328 } else {
02329 (*i).msg_content+=p;
02330 (*i).msg_content+="\n";
02331 }
02332 } else {
02333 (*i).msg++;
02334 }
02335 return;
02336 }
02337
02338
02339 if((*i).msg==4) {
02340 string disp=lang_get_string(1,(*i).lang,340)+eol;
02341 int ec=0;
02342 dcc_send_msg((*i).socket,disp,ec);
02343 (*i).msg++;
02344 return;
02345 }
02346
02347 if((*i).msg==5) {
02348 string p=dcc_get_line((*i).in_buff);
02349 if(!p.compare(""))
02350 return;
02351
02352 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) {
02353 string disp=lang_get_string(1,(*i).lang,340)+eol;
02354 int ec=0;
02355 dcc_send_msg((*i).socket,disp,ec);
02356 } else {
02357 if(!p.compare("n") || !p.compare("N")) {
02358 } else {
02359 vector<s_access>::iterator i1;
02360 for(i1=(*i).fs.file.access.begin(); i1!=(*i).fs.file.access.end(); i1++)
02361 (*i1).notify_owner=true;
02362 }
02363 (*i).msg++;
02364 return;
02365 }
02366 }
02367
02368 if((*i).msg==6) {
02369 string disp=lang_get_string(1,(*i).lang,341)+eol;
02370 int ec=0;
02371 dcc_send_msg((*i).socket,disp,ec);
02372 (*i).msg++;
02373 return;
02374 }
02375
02376 if((*i).msg==7) {
02377 string p=dcc_get_line((*i).in_buff);
02378 if(!p.compare(""))
02379 return;
02380
02381 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) {
02382 string disp=lang_get_string(1,(*i).lang,341)+eol;
02383 int ec=0;
02384 dcc_send_msg((*i).socket,disp,ec);
02385 } else {
02386 if(!p.compare("n") || !p.compare("N")) {
02387 vector<s_access>::iterator i1;
02388 for(i1=(*i).fs.file.access.begin(); i1!=(*i).fs.file.access.end(); i1++)
02389 (*i1).secure=false;
02390 } else {
02391 vector<s_access>::iterator i1;
02392 for(i1=(*i).fs.file.access.begin(); i1!=(*i).fs.file.access.end(); i1++)
02393 (*i1).secure=true;
02394 }
02395 (*i).msg++;
02396 return;
02397 }
02398 }
02399
02400 if((*i).msg==8) {
02401 (*i).msg++;
02402 return;
02403 }
02404
02405 if((*i).msg==9) {
02406 string disp=lang_get_string(1,(*i).lang,473)+eol;
02407 int ec=0;
02408 dcc_send_msg((*i).socket,disp,ec);
02409 (*i).msg++;
02410 return;
02411 }
02412
02413 if((*i).msg==10) {
02414 string p=dcc_get_line((*i).in_buff);
02415 if(p.empty())
02416 return;
02417
02418 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) {
02419 string disp=lang_get_string(1,(*i).lang,473)+eol;
02420 int ec=0;
02421 dcc_send_msg((*i).socket,disp,ec);
02422 } else {
02423 if(!p.compare("n") || !p.compare("N")) {
02424 (*i).msg=1000;
02425 return;
02426 } else {
02427 string disp=lang_get_string(1,(*i).lang,436)+eol;
02428 int ec=0;
02429 dcc_send_msg((*i).socket,disp,ec);
02430 (*i).msg++;
02431 return;
02432 }
02433 }
02434 }
02435 if((*i).msg==11) {
02436 string p=dcc_get_line((*i).in_buff);
02437 if(p.empty())
02438 return;
02439
02440 int x=atol(p.c_str());
02441 if(x==0) {
02442 (*i).fs.file.expiration=0;
02443 string disp=lang_get_string(1,(*i).lang,441)+eol;
02444 int ec=0;
02445 dcc_send_msg((*i).socket,disp,ec);
02446 (*i).msg=1000;
02447 return;
02448 }
02449 if(x<1970) {
02450 string disp=lang_get_string(1,(*i).lang,436)+eol;
02451 int ec=0;
02452 dcc_send_msg((*i).socket,disp,ec);
02453 return;
02454 }
02455 (*i).filesystem_expiration.tm_year=x;
02456 string disp=lang_get_string(1,(*i).lang,437)+eol;
02457 int ec=0;
02458 dcc_send_msg((*i).socket,disp,ec);
02459 (*i).msg++;
02460 return;
02461 }
02462 if((*i).msg==12) {
02463 string p=dcc_get_line((*i).in_buff);
02464 if(p.empty())
02465 return;
02466
02467 int x=atol(p.c_str());
02468 if(x<1 || x>12) {
02469 string disp=lang_get_string(1,(*i).lang,437)+eol;
02470 int ec=0;
02471 dcc_send_msg((*i).socket,disp,ec);
02472 return;
02473 }
02474 (*i).filesystem_expiration.tm_mon=x;
02475 string disp=lang_get_string(1,(*i).lang,438)+eol;
02476 int ec=0;
02477 dcc_send_msg((*i).socket,disp,ec);
02478 (*i).msg++;
02479 return;
02480 }
02481 if((*i).msg==13) {
02482 string p=dcc_get_line((*i).in_buff);
02483 if(p.empty())
02484 return;
02485
02486 int x=atol(p.c_str());
02487 if(x<1 || x>31) {
02488 string disp=lang_get_string(1,(*i).lang,438)+eol;
02489 int ec=0;
02490 dcc_send_msg((*i).socket,disp,ec);
02491 return;
02492 }
02493 (*i).filesystem_expiration.tm_mday=x;
02494 string disp=lang_get_string(1,(*i).lang,439)+eol;
02495 int ec=0;
02496 dcc_send_msg((*i).socket,disp,ec);
02497 (*i).msg++;
02498 return;
02499 }
02500 if((*i).msg==14) {
02501 string p=dcc_get_line((*i).in_buff);
02502 if(p.empty())
02503 return;
02504
02505 int x=atol(p.c_str());
02506 if(x<0 || x>23) {
02507 string disp=lang_get_string(1,(*i).lang,439)+eol;
02508 int ec=0;
02509 dcc_send_msg((*i).socket,disp,ec);
02510 return;
02511 }
02512 (*i).filesystem_expiration.tm_hour=x;
02513 string disp=lang_get_string(1,(*i).lang,440)+eol;
02514 int ec=0;
02515 dcc_send_msg((*i).socket,disp,ec);
02516 (*i).msg++;
02517 return;
02518 }
02519 if((*i).msg==15) {
02520 string p=dcc_get_line((*i).in_buff);
02521 if(p.empty())
02522 return;
02523
02524 int x=atol(p.c_str());
02525 if(x<0 || x>59) {
02526 string disp=lang_get_string(1,(*i).lang,440)+eol;
02527 int ec=0;
02528 dcc_send_msg((*i).socket,disp,ec);
02529 return;
02530 }
02531 (*i).filesystem_expiration.tm_min=x;
02532 (*i).filesystem_expiration.tm_isdst=-1;
02533 (*i).filesystem_expiration.tm_sec=0;
02534 (*i).filesystem_expiration.tm_wday=0;
02535 (*i).filesystem_expiration.tm_yday=0;
02536
02537 (*i).filesystem_expiration.tm_mon-=1;
02538 (*i).filesystem_expiration.tm_year-=1900;
02539
02540 time_t ex=mktime(&(*i).filesystem_expiration);
02541 if(ex==-1) {
02542 string disp=lang_get_string(1,(*i).lang,442)+eol;
02543 disp+=lang_get_string(1,(*i).lang,436)+eol;
02544 int ec=0;
02545 dcc_send_msg((*i).socket,disp,ec);
02546 (*i).msg=11;
02547 return;
02548 }
02549 if(ex<time(NULL)) {
02550 string disp=lang_get_string(1,(*i).lang,443)+eol;
02551 disp+=lang_get_string(1,(*i).lang,436)+eol;
02552 int ec=0;
02553 dcc_send_msg((*i).socket,disp,ec);
02554 (*i).msg=11;
02555 return;
02556 }
02557
02558 (*i).msg_expiration=ex;
02559
02560 string disp=lang_get_string(1,(*i).lang,433)+eol;
02561 if(ex==0)
02562 disp+=lang_get_string(1,(*i).lang,434)+eol;
02563 else {
02564 char* t1=ctime(&ex);
02565 char t2[128];
02566 strcpy(t2,t1);
02567 t2[strlen(t2)-1]=0;
02568 disp+=t2;
02569 disp+=eol;
02570 }
02571
02572 int ec=0;
02573 dcc_send_msg((*i).socket,disp,ec);
02574 (*i).msg=1000;
02575 return;
02576 }
02577
02578 if((*i).msg==1000) {
02579 string disp=lang_get_string(1,(*i).lang,342)+eol;
02580 int ec=0;
02581 dcc_send_msg((*i).socket,disp,ec);
02582 (*i).msg++;
02583 return;
02584 }
02585
02586 if((*i).msg==1001) {
02587 string p=dcc_get_line((*i).in_buff);
02588 if(!p.compare(""))
02589 return;
02590
02591 (*i).fs.file.public_name=p;
02592 (*i).fs.file.expiration=(*i).msg_expiration;
02593
02594 string disp=lang_get_string(1,(*i).lang,343)+eol;
02595 int ec=0;
02596 dcc_send_msg((*i).socket,disp,ec);
02597 (*i).msg++;
02598 return;
02599 }
02600
02601 if((*i).msg==1002) {
02602 string p=dcc_get_line((*i).in_buff);
02603 if(!p.compare(""))
02604 return;
02605
02606 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) {
02607 string disp=lang_get_string(1,(*i).lang,343)+eol;
02608 int ec=0;
02609 dcc_send_msg((*i).socket,disp,ec);
02610 } else {
02611 if(!p.compare("n") || !p.compare("N")) {
02612 string disp=lang_get_string(1,(*i).lang,344)+eol;
02613 int ec=0;
02614 dcc_send_msg((*i).socket,disp,ec);
02615 (*i).fs.file.clear();
02616 (*i).fs.name="";
02617 (*i).fs.new_access.clear();
02618 (*i).msg=0;
02619 } else {
02620 l1:
02621 vector<s_access>::iterator i1;
02622
02623 bool read=true;
02624 bool notify_user=true;
02625 bool old_secure=false;
02626 bool notify_owner=false;
02627
02628 for(i1=(*i).fs.file.access.begin(); i1!=(*i).fs.file.access.end(); i1++) {
02629 read|=(*i1).read;
02630 notify_user|=(*i1).notify_user;
02631 notify_owner|=(*i1).notify_owner;
02632 old_secure|=(*i1).secure;
02633 }
02634
02635
02636 for(i1=(*i).fs.file.access.begin(); i1!=(*i).fs.file.access.end(); i1++) {
02637 vector<s_access>::iterator i2;
02638 for(i2=(*i).fs.file.access.begin(); i2!=(*i).fs.file.access.end(); i2++) {
02639 if(i1==i2)
02640 continue;
02641 if((!(*i2).user_name.compare((*i1).user_name) || (*i2).all_users) && !(*i2).user_name.empty()) {
02642 (*i).fs.file.access.erase(i2);
02643 goto l1;
02644 }
02645 }
02646 }
02647
02648 for(i1=(*i).fs.file.access.begin(); i1!=(*i).fs.file.access.end(); i1++) {
02649 (*i1).read=read;
02650 (*i1).notify_user=notify_user;
02651 (*i1).notify_owner=notify_owner;
02652 (*i1).secure=old_secure;
02653 }
02654
02655
02656
02657
02658
02659
02660
02661 s_access a;
02662 a.del=true;
02663 a.owner=true;
02664 a.read=true;
02665 a.secure=old_secure;
02666 a.user_name=(*i).as_in_logic;
02667 (*i).fs.file.access.push_back(a);
02668
02669 bool force_secure=false;
02670 string internal_name=filesys_dcc_add_message((*i).as_in_logic,(*i).fs.file,(*i).msg_content,force_secure);
02671
02672 string disp;
02673 if(!old_secure && force_secure)
02674 disp+=lang_get_string(1,(*i).lang,346)+eol;
02675
02676 disp+=lang_get_string(1,(*i).lang,345)+eol;
02677 int ec=0;
02678 dcc_send_msg((*i).socket,disp,ec);
02679
02680 (*i).fs.file.clear();
02681 (*i).fs.name="";
02682 (*i).fs.new_access.clear();
02683 (*i).msg_content="";
02684 (*i).msg=0;
02685
02686 logic_filesys_got_new((*i).as_in_logic,"","","",internal_name);
02687 }
02688 (*i).msg=0;
02689 return;
02690 }
02691 }
02692
02693
02694 if((*i).msg==2000) {
02695 string disp=lang_get_string(1,(*i).lang,476)+eol;
02696 int ec=0;
02697 dcc_send_msg((*i).socket,disp,ec);
02698 (*i).msg++;
02699 return;
02700 }
02701 if((*i).msg==2001) {
02702 string p=dcc_get_line((*i).in_buff);
02703 if(!p.compare(""))
02704 return;
02705
02706 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) {
02707 string disp=lang_get_string(1,(*i).lang,476)+eol;
02708 int ec=0;
02709 dcc_send_msg((*i).socket,disp,ec);
02710 } else {
02711 if(!p.compare("n") || !p.compare("N")) {
02712 (*i).fs.new_access.also_unknown=false;
02713 } else {
02714 (*i).fs.new_access.also_unknown=true;;
02715 }
02716 (*i).fs.file.access.push_back((*i).fs.new_access);
02717 (*i).fs.new_access.clear();
02718 string disp=lang_get_string(1,(*i).lang,339)+eol;
02719 int ec=0;
02720 dcc_send_msg((*i).socket,disp,ec);
02721 (*i).msg=2;
02722 return;
02723 }
02724 return;
02725 }
02726 }
02727
02728
02729
02730
02731
02732
02733
02734
02735
02736
02737
02738 bool dcc_can_unassign(vector<s_dcc_client>::iterator i, string& eol, string proc_name)
02739 {
02740 if(proc_name.empty())
02741 return true;
02742
02743 if(proc_name.find("(",0)!=string::npos)
02744 proc_name.erase(proc_name.find("(",0),proc_name.length()-proc_name.find("(",0));
02745
02746 vector<string>::iterator i1;
02747 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++) {
02748 if(!(*i1).compare("*"))
02749 return true;
02750
02751 string name_only=*i1;
02752 if(name_only.find("(",0)!=string::npos)
02753 name_only.erase(name_only.find("(",0),name_only.length()-name_only.find("(",0));
02754
02755 if(!name_only.compare(proc_name))
02756 return true;
02757 }
02758
02759 return false;
02760 }
02761
02762
02763
02764
02765
02766
02767
02768
02769
02770 void dcc_loop_private(vector<s_dcc_client>::iterator i, string& eol)
02771 {
02772 if((*i).private_edit==0)
02773 return;
02774
02775 if((*i).private_edit==1) {
02776 (*i).private_=r_private;
02777
02778 int ec=0;
02779 string disp=lang_get_string(1,(*i).lang,413)+eol;
02780 dcc_send_msg((*i).socket,disp,ec);
02781
02782 vector<string>::iterator i3;
02783 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
02784 if(!(*i3).compare("*"))
02785 continue;
02786 disp=*i3+eol;
02787 dcc_send_msg((*i).socket,disp,ec);
02788 }
02789
02790 disp=(string)"----------------"+eol;
02791 dcc_send_msg((*i).socket,disp,ec);
02792
02793 disp=lang_get_string(1,(*i).lang,414)+eol;
02794 dcc_send_msg((*i).socket,disp,ec);
02795
02796 disp=lang_get_string(1,(*i).lang,130)+eol;
02797 dcc_send_msg((*i).socket,disp,ec);
02798
02799 (*i).private_edit++;
02800 return;
02801 }
02802 if((*i).private_edit==2) {
02803 if(!dcc_can_unassign(i,eol,(*i).private_.on_privmsg)) {
02804 int ec=0;
02805 string disp=lang_get_string(1,(*i).lang,592)+eol;
02806 dcc_send_msg((*i).socket,disp,ec);
02807 (*i).private_edit++;
02808 return;
02809 }
02810
02811 string p=dcc_get_line((*i).in_buff);
02812 if(!p.compare(""))
02813 return;
02814
02815 vector<string>::iterator i1;
02816 bool got=false;
02817 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
02818 if(!(*i1).compare(p))
02819 got=true;
02820 if(!p.compare(".")) {
02821 got=true;
02822 string disp=lang_get_string(1,(*i).lang,131)+eol;
02823 int ec=0;
02824 dcc_send_msg((*i).socket,disp,ec);
02825 (*i).private_edit++;
02826 } else {
02827 if(!p.compare("..")) {
02828 (*i).private_.on_privmsg="";
02829 got=true;
02830 string disp=lang_get_string(1,(*i).lang,132)+eol;
02831 int ec=0;
02832 dcc_send_msg((*i).socket,disp,ec);
02833 (*i).private_edit++;
02834 } else {
02835 string disp;
02836 if(got)
02837 disp=lang_get_string(1,(*i).lang,57)+eol;
02838 else
02839 disp=lang_get_string(1,(*i).lang,58)+eol;
02840 int ec=0;
02841 dcc_send_msg((*i).socket,disp,ec);
02842 if(got)
02843 (*i).private_.on_privmsg=p;
02844 else {
02845 (*i).private_edit--;
02846 return;
02847 }
02848 (*i).private_edit++;
02849 }
02850 }
02851 }
02852
02853 if((*i).private_edit==3) {
02854 int ec=0;
02855 string disp=lang_get_string(1,(*i).lang,605)+eol;
02856 dcc_send_msg((*i).socket,disp,ec);
02857
02858 vector<string>::iterator i3;
02859 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
02860 if(!(*i3).compare("*"))
02861 continue;
02862 disp=*i3+eol;
02863 dcc_send_msg((*i).socket,disp,ec);
02864 }
02865
02866 disp=(string)"----------------"+eol;
02867 dcc_send_msg((*i).socket,disp,ec);
02868
02869 disp=lang_get_string(1,(*i).lang,607)+eol;
02870 dcc_send_msg((*i).socket,disp,ec);
02871
02872 disp=lang_get_string(1,(*i).lang,130)+eol;
02873 dcc_send_msg((*i).socket,disp,ec);
02874
02875 (*i).private_edit++;
02876 return;
02877 }
02878 if((*i).private_edit==4) {
02879 if(!dcc_can_unassign(i,eol,(*i).private_.on_notice)) {
02880 int ec=0;
02881 string disp=lang_get_string(1,(*i).lang,592)+eol;
02882 dcc_send_msg((*i).socket,disp,ec);
02883 (*i).private_edit++;
02884 return;
02885 }
02886
02887 string p=dcc_get_line((*i).in_buff);
02888 if(!p.compare(""))
02889 return;
02890
02891 vector<string>::iterator i1;
02892 bool got=false;
02893 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
02894 if(!(*i1).compare(p))
02895 got=true;
02896 if(!p.compare(".")) {
02897 got=true;
02898 string disp=lang_get_string(1,(*i).lang,131)+eol;
02899 int ec=0;
02900 dcc_send_msg((*i).socket,disp,ec);
02901 (*i).private_edit++;
02902 } else {
02903 if(!p.compare("..")) {
02904 (*i).private_.on_notice="";
02905 got=true;
02906 string disp=lang_get_string(1,(*i).lang,132)+eol;
02907 int ec=0;
02908 dcc_send_msg((*i).socket,disp,ec);
02909 (*i).private_edit++;
02910 } else {
02911 string disp;
02912 if(got)
02913 disp=lang_get_string(1,(*i).lang,57)+eol;
02914 else
02915 disp=lang_get_string(1,(*i).lang,58)+eol;
02916 int ec=0;
02917 dcc_send_msg((*i).socket,disp,ec);
02918 if(got)
02919 (*i).private_.on_notice=p;
02920 else {
02921 (*i).private_edit--;
02922 return;
02923 }
02924 (*i).private_edit++;
02925 }
02926 }
02927 }
02928
02929 if((*i).private_edit==5) {
02930 int ec=0;
02931 string disp=lang_get_string(1,(*i).lang,415)+eol;
02932 dcc_send_msg((*i).socket,disp,ec);
02933
02934 vector<string>::iterator i3;
02935 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
02936 if(!(*i3).compare("*"))
02937 continue;
02938 disp=*i3+eol;
02939 dcc_send_msg((*i).socket,disp,ec);
02940 }
02941
02942 disp=(string)"----------------"+eol;
02943 dcc_send_msg((*i).socket,disp,ec);
02944
02945 disp=lang_get_string(1,(*i).lang,416)+eol;
02946 dcc_send_msg((*i).socket,disp,ec);
02947
02948 disp=lang_get_string(1,(*i).lang,130)+eol;
02949 dcc_send_msg((*i).socket,disp,ec);
02950
02951 (*i).private_edit++;
02952 return;
02953 }
02954 if((*i).private_edit==6) {
02955 if(!dcc_can_unassign(i,eol,(*i).private_.on_ctcp)) {
02956 int ec=0;
02957 string disp=lang_get_string(1,(*i).lang,592)+eol;
02958 dcc_send_msg((*i).socket,disp,ec);
02959 (*i).private_edit++;
02960 return;
02961 }
02962
02963 string p=dcc_get_line((*i).in_buff);
02964 if(!p.compare(""))
02965 return;
02966
02967 vector<string>::iterator i1;
02968 bool got=false;
02969 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
02970 if(!(*i1).compare(p))
02971 got=true;
02972 if(!p.compare(".")) {
02973 got=true;
02974 string disp=lang_get_string(1,(*i).lang,131)+eol;
02975 int ec=0;
02976 dcc_send_msg((*i).socket,disp,ec);
02977 (*i).private_edit++;
02978 } else {
02979 if(!p.compare("..")) {
02980 (*i).private_.on_ctcp="";
02981 got=true;
02982 string disp=lang_get_string(1,(*i).lang,132)+eol;
02983 int ec=0;
02984 dcc_send_msg((*i).socket,disp,ec);
02985 (*i).private_edit++;
02986 } else {
02987 string disp;
02988 if(got)
02989 disp=lang_get_string(1,(*i).lang,57)+eol;
02990 else
02991 disp=lang_get_string(1,(*i).lang,58)+eol;
02992 int ec=0;
02993 dcc_send_msg((*i).socket,disp,ec);
02994 if(got)
02995 (*i).private_.on_ctcp=p;
02996 else {
02997 (*i).private_edit--;
02998 return;
02999 }
03000 (*i).private_edit++;
03001 }
03002 }
03003 }
03004
03005 if((*i).private_edit==7) {
03006 int ec=0;
03007 string disp=lang_get_string(1,(*i).lang,667)+eol;
03008 dcc_send_msg((*i).socket,disp,ec);
03009
03010 vector<string>::iterator i3;
03011 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
03012 if(!(*i3).compare("*"))
03013 continue;
03014 disp=*i3+eol;
03015 dcc_send_msg((*i).socket,disp,ec);
03016 }
03017
03018 disp=(string)"----------------"+eol;
03019 dcc_send_msg((*i).socket,disp,ec);
03020
03021 disp=lang_get_string(1,(*i).lang,668)+eol;
03022 dcc_send_msg((*i).socket,disp,ec);
03023
03024 disp=lang_get_string(1,(*i).lang,130)+eol;
03025 dcc_send_msg((*i).socket,disp,ec);
03026
03027 (*i).private_edit++;
03028 return;
03029 }
03030 if((*i).private_edit==8) {
03031 if(!dcc_can_unassign(i,eol,(*i).private_.on_filesys_got_new)) {
03032 int ec=0;
03033 string disp=lang_get_string(1,(*i).lang,592)+eol;
03034 dcc_send_msg((*i).socket,disp,ec);
03035 (*i).private_edit++;
03036 return;
03037 }
03038
03039 string p=dcc_get_line((*i).in_buff);
03040 if(!p.compare(""))
03041 return;
03042
03043 vector<string>::iterator i1;
03044 bool got=false;
03045 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
03046 if(!(*i1).compare(p))
03047 got=true;
03048 if(!p.compare(".")) {
03049 got=true;
03050 string disp=lang_get_string(1,(*i).lang,131)+eol;
03051 int ec=0;
03052 dcc_send_msg((*i).socket,disp,ec);
03053 (*i).private_edit++;
03054 } else {
03055 if(!p.compare("..")) {
03056 (*i).private_.on_filesys_got_new="";
03057 got=true;
03058 string disp=lang_get_string(1,(*i).lang,132)+eol;
03059 int ec=0;
03060 dcc_send_msg((*i).socket,disp,ec);
03061 (*i).private_edit++;
03062 } else {
03063 string disp;
03064 if(got)
03065 disp=lang_get_string(1,(*i).lang,57)+eol;
03066 else
03067 disp=lang_get_string(1,(*i).lang,58)+eol;
03068 int ec=0;
03069 dcc_send_msg((*i).socket,disp,ec);
03070 if(got)
03071 (*i).private_.on_filesys_got_new=p;
03072 else {
03073 (*i).private_edit--;
03074 return;
03075 }
03076 (*i).private_edit++;
03077 }
03078 }
03079 }
03080
03081 if((*i).private_edit==9) {
03082 int ec=0;
03083 string disp=lang_get_string(1,(*i).lang,669)+eol;
03084 dcc_send_msg((*i).socket,disp,ec);
03085
03086 vector<string>::iterator i3;
03087 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
03088 if(!(*i3).compare("*"))
03089 continue;
03090 disp=*i3+eol;
03091 dcc_send_msg((*i).socket,disp,ec);
03092 }
03093
03094 disp=(string)"----------------"+eol;
03095 dcc_send_msg((*i).socket,disp,ec);
03096
03097 disp=lang_get_string(1,(*i).lang,670)+eol;
03098 dcc_send_msg((*i).socket,disp,ec);
03099
03100 disp=lang_get_string(1,(*i).lang,130)+eol;
03101 dcc_send_msg((*i).socket,disp,ec);
03102
03103 (*i).private_edit++;
03104 return;
03105 }
03106 if((*i).private_edit==10) {
03107 if(!dcc_can_unassign(i,eol,(*i).private_.on_fnc)) {
03108 int ec=0;
03109 string disp=lang_get_string(1,(*i).lang,592)+eol;
03110 dcc_send_msg((*i).socket,disp,ec);
03111 (*i).private_edit++;
03112 return;
03113 }
03114
03115 string p=dcc_get_line((*i).in_buff);
03116 if(!p.compare(""))
03117 return;
03118
03119 vector<string>::iterator i1;
03120 bool got=false;
03121 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
03122 if(!(*i1).compare(p))
03123 got=true;
03124 if(!p.compare(".")) {
03125 got=true;
03126 string disp=lang_get_string(1,(*i).lang,131)+eol;
03127 int ec=0;
03128 dcc_send_msg((*i).socket,disp,ec);
03129 (*i).private_edit++;
03130 } else {
03131 if(!p.compare("..")) {
03132 (*i).private_.on_fnc="";
03133 got=true;
03134 string disp=lang_get_string(1,(*i).lang,132)+eol;
03135 int ec=0;
03136 dcc_send_msg((*i).socket,disp,ec);
03137 (*i).private_edit++;
03138 } else {
03139 string disp;
03140 if(got)
03141 disp=lang_get_string(1,(*i).lang,57)+eol;
03142 else
03143 disp=lang_get_string(1,(*i).lang,58)+eol;
03144 int ec=0;
03145 dcc_send_msg((*i).socket,disp,ec);
03146 if(got)
03147 (*i).private_.on_fnc=p;
03148 else {
03149 (*i).private_edit--;
03150 return;
03151 }
03152 (*i).private_edit++;
03153 }
03154 }
03155 }
03156
03157 if((*i).private_edit==11) {
03158 int ec=0;
03159 string disp=lang_get_string(1,(*i).lang,671)+eol;
03160 dcc_send_msg((*i).socket,disp,ec);
03161
03162 vector<string>::iterator i3;
03163 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
03164 if(!(*i3).compare("*"))
03165 continue;
03166 disp=*i3+eol;
03167 dcc_send_msg((*i).socket,disp,ec);
03168 }
03169
03170 disp=(string)"----------------"+eol;
03171 dcc_send_msg((*i).socket,disp,ec);
03172
03173 disp=lang_get_string(1,(*i).lang,672)+eol;
03174 dcc_send_msg((*i).socket,disp,ec);
03175
03176 disp=lang_get_string(1,(*i).lang,130)+eol;
03177 dcc_send_msg((*i).socket,disp,ec);
03178
03179 (*i).private_edit++;
03180 return;
03181 }
03182 if((*i).private_edit==12) {
03183 if(!dcc_can_unassign(i,eol,(*i).private_.on_broadcast)) {
03184 int ec=0;
03185 string disp=lang_get_string(1,(*i).lang,592)+eol;
03186 dcc_send_msg((*i).socket,disp,ec);
03187 (*i).private_edit++;
03188 return;
03189 }
03190
03191 string p=dcc_get_line((*i).in_buff);
03192 if(!p.compare(""))
03193 return;
03194
03195 vector<string>::iterator i1;
03196 bool got=false;
03197 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
03198 if(!(*i1).compare(p))
03199 got=true;
03200 if(!p.compare(".")) {
03201 got=true;
03202 string disp=lang_get_string(1,(*i).lang,131)+eol;
03203 int ec=0;
03204 dcc_send_msg((*i).socket,disp,ec);
03205 (*i).private_edit++;
03206 } else {
03207 if(!p.compare("..")) {
03208 (*i).private_.on_broadcast="";
03209 got=true;
03210 string disp=lang_get_string(1,(*i).lang,132)+eol;
03211 int ec=0;
03212 dcc_send_msg((*i).socket,disp,ec);
03213 (*i).private_edit++;
03214 } else {
03215 string disp;
03216 if(got)
03217 disp=lang_get_string(1,(*i).lang,57)+eol;
03218 else
03219 disp=lang_get_string(1,(*i).lang,58)+eol;
03220 int ec=0;
03221 dcc_send_msg((*i).socket,disp,ec);
03222 if(got)
03223 (*i).private_.on_broadcast=p;
03224 else {
03225 (*i).private_edit--;
03226 return;
03227 }
03228 (*i).private_edit++;
03229 }
03230 }
03231 }
03232
03233 if((*i).private_edit==13) {
03234 int ec=0;
03235 string disp=lang_get_string(1,(*i).lang,673)+eol;
03236 dcc_send_msg((*i).socket,disp,ec);
03237
03238 vector<string>::iterator i3;
03239 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
03240 if(!(*i3).compare("*"))
03241 continue;
03242 disp=*i3+eol;
03243 dcc_send_msg((*i).socket,disp,ec);
03244 }
03245
03246 disp=(string)"----------------"+eol;
03247 dcc_send_msg((*i).socket,disp,ec);
03248
03249 disp=lang_get_string(1,(*i).lang,674)+eol;
03250 dcc_send_msg((*i).socket,disp,ec);
03251
03252 disp=lang_get_string(1,(*i).lang,130)+eol;
03253 dcc_send_msg((*i).socket,disp,ec);
03254
03255 (*i).private_edit++;
03256 return;
03257 }
03258 if((*i).private_edit==14) {
03259 if(!dcc_can_unassign(i,eol,(*i).private_.on_server_msg)) {
03260 int ec=0;
03261 string disp=lang_get_string(1,(*i).lang,592)+eol;
03262 dcc_send_msg((*i).socket,disp,ec);
03263 (*i).private_edit++;
03264 return;
03265 }
03266
03267 string p=dcc_get_line((*i).in_buff);
03268 if(!p.compare(""))
03269 return;
03270
03271 vector<string>::iterator i1;
03272 bool got=false;
03273 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
03274 if(!(*i1).compare(p))
03275 got=true;
03276 if(!p.compare(".")) {
03277 got=true;
03278 string disp=lang_get_string(1,(*i).lang,131)+eol;
03279 int ec=0;
03280 dcc_send_msg((*i).socket,disp,ec);
03281 (*i).private_edit++;
03282 } else {
03283 if(!p.compare("..")) {
03284 (*i).private_.on_server_msg="";
03285 got=true;
03286 string disp=lang_get_string(1,(*i).lang,132)+eol;
03287 int ec=0;
03288 dcc_send_msg((*i).socket,disp,ec);
03289 (*i).private_edit++;
03290 } else {
03291 string disp;
03292 if(got)
03293 disp=lang_get_string(1,(*i).lang,57)+eol;
03294 else
03295 disp=lang_get_string(1,(*i).lang,58)+eol;
03296 int ec=0;
03297 dcc_send_msg((*i).socket,disp,ec);
03298 if(got)
03299 (*i).private_.on_server_msg=p;
03300 else {
03301 (*i).private_edit--;
03302 return;
03303 }
03304 (*i).private_edit++;
03305 }
03306 }
03307 }
03308
03309
03310 if((*i).private_edit==15) {
03311 int ec=0;
03312 string disp=lang_get_string(1,(*i).lang,696)+eol;
03313 dcc_send_msg((*i).socket,disp,ec);
03314
03315 vector<string>::iterator i3;
03316 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
03317 if(!(*i3).compare("*"))
03318 continue;
03319 disp=*i3+eol;
03320 dcc_send_msg((*i).socket,disp,ec);
03321 }
03322
03323 disp=(string)"----------------"+eol;
03324 dcc_send_msg((*i).socket,disp,ec);
03325
03326 disp=lang_get_string(1,(*i).lang,697)+eol;
03327 dcc_send_msg((*i).socket,disp,ec);
03328
03329 disp=lang_get_string(1,(*i).lang,130)+eol;
03330 dcc_send_msg((*i).socket,disp,ec);
03331
03332 (*i).private_edit++;
03333 return;
03334 }
03335 if((*i).private_edit==16) {
03336 if(!dcc_can_unassign(i,eol,(*i).private_.on_internal_event)) {
03337 int ec=0;
03338 string disp=lang_get_string(1,(*i).lang,592)+eol;
03339 dcc_send_msg((*i).socket,disp,ec);
03340 (*i).private_edit++;
03341 return;
03342 }
03343
03344 string p=dcc_get_line((*i).in_buff);
03345 if(!p.compare(""))
03346 return;
03347
03348 vector<string>::iterator i1;
03349 bool got=false;
03350 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
03351 if(!(*i1).compare(p))
03352 got=true;
03353 if(!p.compare(".")) {
03354 got=true;
03355 string disp=lang_get_string(1,(*i).lang,131)+eol;
03356 int ec=0;
03357 dcc_send_msg((*i).socket,disp,ec);
03358 (*i).private_edit++;
03359 } else {
03360 if(!p.compare("..")) {
03361 (*i).private_.on_internal_event="";
03362 got=true;
03363 string disp=lang_get_string(1,(*i).lang,132)+eol;
03364 int ec=0;
03365 dcc_send_msg((*i).socket,disp,ec);
03366 (*i).private_edit++;
03367 } else {
03368 string disp;
03369 if(got)
03370 disp=lang_get_string(1,(*i).lang,57)+eol;
03371 else
03372 disp=lang_get_string(1,(*i).lang,58)+eol;
03373 int ec=0;
03374 dcc_send_msg((*i).socket,disp,ec);
03375 if(got)
03376 (*i).private_.on_internal_event=p;
03377 else {
03378 (*i).private_edit--;
03379 return;
03380 }
03381 (*i).private_edit++;
03382 }
03383 }
03384 }
03385
03386
03387 if((*i).private_edit==17) {
03388 int ec=0;
03389 string disp=lang_get_string(1,(*i).lang,417)+eol;
03390 dcc_send_msg((*i).socket,disp,ec);
03391 (*i).private_edit++;
03392 return;
03393 }
03394 if((*i).private_edit==18) {
03395 string p=dcc_get_line((*i).in_buff);
03396 if(!p.compare(""))
03397 return;
03398
03399 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) {
03400 string disp=lang_get_string(1,(*i).lang,417)+eol;
03401 int ec=0;
03402 dcc_send_msg((*i).socket,disp,ec);
03403 } else {
03404 if(!p.compare("n") || !p.compare("N")) {
03405 string disp=lang_get_string(1,(*i).lang,70)+eol;
03406 int ec=0;
03407 dcc_send_msg((*i).socket,disp,ec);
03408 } else {
03409 (*i).private_.last_changed=time(NULL);
03410 r_private=(*i).private_;
03411 string disp=lang_get_string(1,(*i).lang,231)+eol;
03412 int ec=0;
03413 dcc_send_msg((*i).socket,disp,ec);
03414 }
03415 (*i).private_edit=0;
03416 return;
03417 }
03418 }
03419 }
03420
03421
03422
03423
03424
03425
03426
03427
03428
03429 void dcc_loop_new_user(vector<s_dcc_client>::iterator i, string& eol)
03430 {
03431 if((*i).new_user==-1) {
03432 string p=dcc_get_line((*i).in_buff);
03433 if(!p.compare(""))
03434 return;
03435 if(p.compare(".")) {
03436 bool got=false;
03437 vector<string>::iterator i1;
03438 for(i1=(*i).access_grant_groups.begin(); i1!=(*i).access_grant_groups.end(); i1++)
03439 if(!(*i1).compare(p)) {
03440 got=true;
03441 p=(string)"\""+p+"\"";
03442 (*i).user_member_of.push_back(p);
03443 break;
03444 }
03445 if(got) {
03446 string disp=lang_subst(lang_get_string(1,(*i).lang,104),p)+eol;
03447 int ec=0;
03448 dcc_send_msg((*i).socket,disp,ec);
03449 } else {
03450 string disp=lang_subst(lang_get_string(1,(*i).lang,47),p)+eol;
03451 int ec=0;
03452 dcc_send_msg((*i).socket,disp,ec);
03453 }
03454 } else {
03455 string disp=lang_subst(lang_get_string(1,(*i).lang,34),p)+eol;
03456 int ec=0;
03457 dcc_send_msg((*i).socket,disp,ec);
03458 (*i).new_user=2;
03459 }
03460 }
03461
03462 if((*i).new_user==1) {
03463 string p=dcc_get_line((*i).in_buff);
03464 if(!p.compare(""))
03465 return;
03466 if(logic_partyline_user_exists(p)) {
03467 string disp=lang_subst(lang_get_string(1,(*i).lang,33),p)+eol;
03468 int ec=0;
03469 dcc_send_msg((*i).socket,disp,ec);
03470 } else {
03471 (*i).new_user=-100;
03472 (*i).user_name=p;
03473 return;
03474 }
03475 }
03476 if((*i).new_user==-100) {
03477 string disp=lang_get_string(1,(*i).lang,386)+eol;
03478 vector<s_user>::iterator i1;
03479 bool got=false;
03480 for(i1=r_user_templates.begin(); i1!=r_user_templates.end(); i1++) {
03481 got=true;
03482 disp+=(*i1).name+eol;
03483 }
03484 if(!got) {
03485 disp+=lang_get_string(1,(*i).lang,387)+eol;
03486 (*i).new_user=-150;
03487 } else
03488 (*i).new_user++;
03489 int ec=0;
03490 dcc_send_msg((*i).socket,disp,ec);
03491 return;
03492 }
03493 if((*i).new_user==-99) {
03494 string p=dcc_get_line((*i).in_buff);
03495 if(!p.compare(""))
03496 return;
03497
03498 if(!p.compare(".")) {
03499 string disp=lang_subst(lang_get_string(1,(*i).lang,389),p)+eol;
03500 int ec=0;
03501 dcc_send_msg((*i).socket,disp,ec);
03502 (*i).new_user=-150;
03503 return;
03504 }
03505
03506 vector<s_user>::iterator i1;
03507 bool got=false;
03508 for(i1=r_user_templates.begin(); i1!=r_user_templates.end(); i1++) {
03509 if(!(*i1).name.compare(p)) {
03510 got=true;
03511 break;
03512 }
03513 }
03514 if(!got) {
03515 string disp=lang_subst(lang_get_string(1,(*i).lang,388),p)+eol;
03516 int ec=0;
03517 dcc_send_msg((*i).socket,disp,ec);
03518 (*i).new_user=-100;
03519 return;
03520 } else {
03521 s_user u;
03522 vector<s_channel> chs;
03523 logic_partyline_get_user_template(p,u,chs);
03524
03525 u.is_template=false;
03526 u.host_bot=false;
03527 u.host_unknown=false;
03528
03529 {
03530 (*i).user_member_of.clear();
03531 (*i).user_hosts.clear();
03532 (*i).user_dcc_hosts.clear();
03533 (*i).user_fullnames.clear();
03534 (*i).user_meta.clear();
03535 (*i).user_access_to_groups.clear();
03536 (*i).user_access_grant_groups.clear();
03537 (*i).user_access_to_proc_groups.clear();
03538 (*i).user_access_grant_proc_groups.clear();
03539 (*i).user_access_usage_proc_groups.clear();
03540 (*i).user_access_to_channel.clear();
03541 (*i).user_access_grant_channel.clear();
03542 (*i).user_channels.clear();
03543 }
03544
03545 vector<s_group>::iterator i1;
03546
03547 for(i1=u.groups.begin(); i1!=u.groups.begin(); i1++)
03548 (*i).user_member_of.push_back((*i1).name);
03549
03550 vector<string>::iterator i2;
03551 for(i2=u.hostmask.begin(); i2!=u.hostmask.end(); i2++)
03552 (*i).user_hosts.push_back(*i2);
03553
03554 vector<s_dcc_host>::iterator i3;
03555 for(i3=u.dcc_hosts.begin(); i3!=u.dcc_hosts.end(); i3++) {
03556 (*i).user_dcc_hosts.push_back(*i3);
03557 }
03558
03559 for(i2=u.fullname.begin(); i2!=u.fullname.end(); i2++)
03560 (*i).user_fullnames.push_back(*i2);
03561
03562 map<string,string>::iterator i5;
03563 for(i5=u.meta.begin(); i5!=u.meta.end(); i5++)
03564 (*i).user_meta.insert(*i5);
03565
03566 for(i2=u.access_to_group.begin(); i2!=u.access_to_group.end(); i2++)
03567 (*i).user_access_to_groups.push_back(*i2);
03568
03569 for(i2=u.access_grant_group.begin(); i2!=u.access_grant_group.end(); i2++)
03570 (*i).user_access_grant_groups.push_back(*i2);
03571
03572 for(i2=u.access_to_proc.begin(); i2!=u.access_to_proc.end(); i2++)
03573 (*i).user_access_to_proc_groups.push_back(*i2);
03574
03575 for(i2=u.access_grant_procedure.begin(); i2!=u.access_grant_procedure.end(); i2++)
03576 (*i).user_access_grant_proc_groups.push_back(*i2);
03577
03578 for(i2=u.access_usage_procedure.begin(); i2!=u.access_usage_procedure.end(); i2++)
03579 (*i).user_access_usage_proc_groups.push_back(*i2);
03580
03581 for(i2=u.access_to_channel.begin(); i2!=u.access_to_channel.end(); i2++)
03582 (*i).user_access_to_channel.push_back(*i2);
03583
03584 for(i2=u.access_grant_channel.begin(); i2!=u.access_grant_channel.end(); i2++)
03585 (*i).user_access_grant_channel.push_back(*i2);
03586
03587 (*i).user_channels.clear();
03588 vector<s_channel>::iterator i4;
03589 for(i4=chs.begin(); i4!=chs.end(); i4++) {
03590 (*i4).configured=true;
03591 (*i4).is_template=false;
03592 (*i).user_channels.push_back(*i4);
03593 }
03594
03595 (*i).user_access_to_backup=u.access_to_backup;
03596 (*i).user_access_to_die=u.access_to_die;
03597 (*i).user_access_to_filesystem=u.access_to_filesystem;
03598 (*i).user_access_to_partyline=u.access_to_partyline;
03599 (*i).user_access_to_plusproc=u.access_to_plusproc;
03600 (*i).user_access_to_plususer=u.access_to_plususer;
03601 (*i).user_access_to_rehash=u.access_to_rehash;
03602 (*i).user_access_to_restart=u.access_to_restart;
03603 (*i).user_access_grant_backup=u.access_grant_backup;
03604 (*i).user_access_grant_die=u.access_grant_die;
03605 (*i).user_access_grant_filesystem=u.access_grant_filesystem;
03606 (*i).user_access_grant_partyline=u.access_grant_partyline;
03607 (*i).user_access_grant_plusproc=u.access_grant_plusproc;
03608 (*i).user_access_grant_plususer=u.access_grant_plususer;
03609 (*i).user_access_grant_rehash=u.access_grant_rehash;
03610 (*i).user_access_to_replication=u.access_to_replication;
03611 (*i).user_access_grant_replication=u.access_grant_replication;
03612 (*i).user_access_grant_restart=u.access_grant_restart;
03613
03614 (*i).user_access_to_private=u.access_to_private;
03615 (*i).user_access_grant_private=u.access_grant_private;
03616
03617 (*i).user_partyline_msg_flood=u.partyline_msg_flood;
03618
03619 (*i).user_access_to_can_send_all_users=u.access_to_can_send_all_users;
03620 (*i).user_access_grant_can_send_all_users=u.access_grant_can_send_all_users;
03621
03622 (*i).user_access_to_can_send_unknown_users=u.access_to_can_send_unknown_users;
03623 (*i).user_access_grant_can_send_unknown_users=u.access_grant_can_send_unknown_users;
03624
03625 (*i).user_access_to_upgrade=u.access_to_upgrade;
03626 (*i).user_access_grant_upgrade=u.access_grant_upgrade;
03627
03628 (*i).user_access_to_apply=u.access_to_apply;
03629 (*i).user_access_grant_apply=u.access_grant_apply;
03630
03631 (*i).new_user=0;
03632 (*i).edit_user=2;
03633 return;
03634 }
03635 }
03636 if((*i).new_user==-150) {
03637 (*i).user_fullnames.clear();
03638 (*i).user_meta.clear();
03639 (*i).user_hosts.clear();
03640 (*i).user_dcc_hosts.clear();
03641 (*i).user_fullnames.clear();
03642 (*i).user_access_grant_partyline=false;
03643 (*i).user_channels.clear();
03644 (*i).user_member_of.clear();
03645 (*i).user_access_to_backup=false;
03646 (*i).user_access_grant_backup=false;
03647 (*i).user_access_to_rehash=false;
03648 (*i).user_access_grant_rehash=false;
03649 (*i).user_access_to_plususer=false;
03650 (*i).user_access_grant_plususer=false;
03651
03652 (*i).user_access_to_plusproc=false;
03653 (*i).user_access_grant_plusproc=false;
03654
03655 (*i).user_access_to_replication=false;
03656 (*i).user_access_grant_replication=false;
03657
03658 (*i).user_access_to_restart=false;
03659 (*i).user_access_grant_restart=false;
03660 (*i).user_access_to_die=false;
03661 (*i).user_access_grant_die=false;
03662
03663 (*i).user_access_to_filesystem=false;
03664 (*i).user_access_grant_filesystem=false;
03665
03666 (*i).user_access_to_upgrade=false;
03667 (*i).user_access_grant_upgrade=false;
03668
03669 (*i).user_access_to_apply=false;
03670 (*i).user_access_grant_apply=false;
03671
03672 (*i).user_access_to_private=false;
03673 (*i).user_access_grant_private=false;
03674
03675 (*i).user_access_to_can_send_all_users=false;
03676 (*i).user_access_grant_can_send_all_users=false;
03677
03678 (*i).new_user=-300;
03679 return;
03680 }
03681 if((*i).new_user==-200) {
03682 string disp=lang_get_string(1,(*i).lang,102)+eol;
03683 int ec=0;
03684 dcc_send_msg((*i).socket,disp,ec);
03685 vector<string>::iterator i1;
03686 disp="";
03687 for(i1=(*i).access_grant_groups.begin(); i1!=(*i).access_grant_groups.end(); i1++)
03688 disp+=*i1+eol;
03689 dcc_send_msg((*i).socket,disp,ec);
03690 disp=lang_get_string(1,(*i).lang,103)+eol;
03691 dcc_send_msg((*i).socket,disp,ec);
03692
03693 (*i).user_member_of.clear();
03694 (*i).new_user=-1;
03695 return;
03696 }
03697
03698 if((*i).new_user==-300) {
03699 (*i).new_user=-200;
03700 return;
03701 }
03702
03703 if((*i).new_user==2) {
03704 string p=dcc_get_line((*i).in_buff);
03705 if(!p.compare(""))
03706 return;
03707 if(p.compare(".")) {
03708 p=(string)"\""+p+"\"";
03709 (*i).user_hosts.push_back(p);
03710 string disp=lang_get_string(1,(*i).lang,35)+eol;
03711 int ec=0;
03712 dcc_send_msg((*i).socket,disp,ec);
03713 } else {
03714 if((*i).user_hosts.begin()==(*i).user_hosts.end()) {
03715 string disp=lang_get_string(1,(*i).lang,105)+eol;
03716 int ec=0;
03717 dcc_send_msg((*i).socket,disp,ec);
03718 } else {
03719 string disp=lang_get_string(1,(*i).lang,36)+eol;
03720 int ec=0;
03721 dcc_send_msg((*i).socket,disp,ec);
03722 (*i).new_user++;
03723 }
03724 }
03725 }
03726 if((*i).new_user==3) {
03727 string p=dcc_get_line((*i).in_buff);
03728 if(!p.compare(""))
03729 return;
03730 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) {
03731 string disp=lang_get_string(1,(*i).lang,36)+eol;
03732 int ec=0;
03733 dcc_send_msg((*i).socket,disp,ec);
03734 } else {
03735 if(!p.compare("n") || !p.compare("N")) {
03736 (*i).new_user=6;
03737 string disp=lang_get_string(1,(*i).lang,39)+eol;
03738 int ec=0;
03739 dcc_send_msg((*i).socket,disp,ec);
03740 } else {
03741 string disp=lang_get_string(1,(*i).lang,37)+eol;
03742 int ec=0;
03743 dcc_send_msg((*i).socket,disp,ec);
03744 (*i).new_user++;
03745 }
03746 }
03747 }
03748 if((*i).new_user==4) {
03749 string p=dcc_get_line((*i).in_buff);
03750 if(!p.compare(""))
03751 return;
03752 if(p.compare(".")) {
03753 (*i).user_dcc_host.group=atol(p.c_str());
03754 string disp=lang_get_string(1,(*i).lang,38)+eol;
03755 int ec=0;
03756 dcc_send_msg((*i).socket,disp,ec);
03757 (*i).new_user++;
03758 } else {
03759 if((*i).user_fullnames.begin()==(*i).user_fullnames.end()) {
03760 string disp=lang_get_string(1,(*i).lang,545)+eol;
03761 int ec=0;
03762 dcc_send_msg((*i).socket,disp,ec);
03763 } else {
03764 string disp=lang_get_string(1,(*i).lang,39)+eol;
03765 int ec=0;
03766 dcc_send_msg((*i).socket,disp,ec);
03767 (*i).new_user=6;
03768 }
03769 }
03770 }
03771 if((*i).new_user==5) {
03772 string p=dcc_get_line((*i).in_buff);
03773 if(!p.compare(""))
03774 return;
03775 if(p.compare(".")) {
03776 p=(string)"\""+p+"\"";
03777 (*i).user_dcc_host.host=p;
03778 (*i).user_dcc_hosts.push_back((*i).user_dcc_host);
03779 string disp=lang_get_string(1,(*i).lang,37)+eol;
03780 int ec=0;
03781 dcc_send_msg((*i).socket,disp,ec);
03782 (*i).new_user=4;
03783 } else {
03784 string disp=lang_get_string(1,(*i).lang,39)+eol;
03785 int ec=0;
03786 dcc_send_msg((*i).socket,disp,ec);
03787 (*i).new_user++;
03788 }
03789 }
03790 if((*i).new_user==6) {
03791 string p=dcc_get_line((*i).in_buff);
03792 if(!p.compare(""))
03793 return;
03794 if(p.compare(".")) {
03795 p=(string)"\""+p+"\"";
03796 (*i).user_fullnames.push_back(p);
03797 string disp=lang_get_string(1,(*i).lang,40)+eol;
03798 int ec=0;
03799 dcc_send_msg((*i).socket,disp,ec);
03800 } else {
03801 if((*i).access_grant_partyline) {
03802 string disp=lang_get_string(1,(*i).lang,43)+eol;
03803 int ec=0;
03804 dcc_send_msg((*i).socket,disp,ec);
03805 (*i).new_user++;
03806 } else {
03807 (*i).new_user=100;
03808 }
03809 }
03810 }
03811 if((*i).new_user==7) {
03812 string p=dcc_get_line((*i).in_buff);
03813 if(!p.compare(""))
03814 return;
03815 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) {
03816 string disp=lang_get_string(1,(*i).lang,43)+eol;
03817 int ec=0;
03818 dcc_send_msg((*i).socket,disp,ec);
03819 } else {
03820 if(!p.compare("n") || !p.compare("N")) {
03821 (*i).user_access_to_partyline=false;
03822
03823 (*i).new_user=1000;
03824 (*i).user_partyline_msg_flood.lines=0;
03825 (*i).user_partyline_msg_flood.seconds=0;
03826 return;
03827 } else {
03828 (*i).user_access_to_partyline=true;
03829
03830 (*i).new_user=1100;
03831 return;
03832 }
03833 }
03834 }
03835
03836
03837 if((*i).new_user==8) {
03838 string p=dcc_get_line((*i).in_buff);
03839 if(!p.compare(""))
03840 return;
03841 if(p.compare(".")) {
03842 vector<string>::iterator i1;
03843 bool got=false;
03844 for(i1=(*i).access_grant_groups.begin(); i1!=(*i).access_grant_groups.end(); i1++)
03845 if(!(*i1).compare(p))
03846 got=true;
03847 string disp;
03848 if(got)
03849 disp=lang_get_string(1,(*i).lang,46)+eol;
03850 else
03851 disp=lang_get_string(1,(*i).lang,47)+eol;
03852 int ec=0;
03853 dcc_send_msg((*i).socket,disp,ec);
03854 p=(string)"\""+p+"\"";
03855 if(got)
03856 (*i).user_access_to_groups.push_back(p);
03857 } else {
03858 string disp=lang_get_string(1,(*i).lang,48)+eol;
03859 int ec=0;
03860 dcc_send_msg((*i).socket,disp,ec);
03861 vector<string>::iterator i1;
03862 for(i1=(*i).access_grant_groups.begin(); i1!=(*i).access_grant_groups.end(); i1++) {
03863 disp=*i1+eol;
03864 dcc_send_msg((*i).socket,disp,ec);
03865 }
03866 disp=lang_get_string(1,(*i).lang,45)+eol;
03867 dcc_send_msg((*i).socket,disp,ec);
03868 (*i).new_user++;
03869 }
03870 }
03871 if((*i).new_user==9) {
03872 string p=dcc_get_line((*i).in_buff);
03873 if(!p.compare(""))
03874 return;
03875 if(p.compare(".")) {
03876 vector<string>::iterator i1;
03877 bool got=false;
03878 for(i1=(*i).access_grant_groups.begin(); i1!=(*i).access_grant_groups.end(); i1++)
03879 if(!(*i1).compare(p))
03880 got=true;
03881 string disp;
03882 if(got)
03883 disp=lang_get_string(1,(*i).lang,46)+eol;
03884 else
03885 disp=lang_get_string(1,(*i).lang,47)+eol;
03886 int ec=0;
03887 dcc_send_msg((*i).socket,disp,ec);
03888 p=(string)"\""+p+"\"";
03889 if(got)
03890 (*i).user_access_grant_groups.push_back(p);
03891 } else {
03892 string disp=lang_get_string(1,(*i).lang,49)+eol;
03893 int ec=0;
03894 dcc_send_msg((*i).socket,disp,ec);
03895 vector<string>::iterator i1;
03896 for(i1=(*i).access_grant_proc_groups.begin(); i1!=(*i).access_grant_proc_groups.end(); i1++) {
03897 disp=*i1+eol;
03898 dcc_send_msg((*i).socket,disp,ec);
03899 }
03900 disp=lang_get_string(1,(*i).lang,45)+eol;
03901 dcc_send_msg((*i).socket,disp,ec);
03902 (*i).new_user++;
03903 }
03904 }
03905 if((*i).new_user==10) {
03906 string p=dcc_get_line((*i).in_buff);
03907 if(!p.compare(""))
03908 return;
03909 if(p.compare(".")) {
03910 vector<string>::iterator i1;
03911 bool got=false;
03912 for(i1=(*i).access_grant_proc_groups.begin(); i1!=(*i).access_grant_proc_groups.end(); i1++)
03913 if(!(*i1).compare(p))
03914 got=true;
03915 string disp;
03916 if(got)
03917 disp=lang_get_string(1,(*i).lang,46)+eol;
03918 else
03919 disp=lang_get_string(1,(*i).lang,47)+eol;
03920 int ec=0;
03921 dcc_send_msg((*i).socket,disp,ec);
03922 p=(string)"\""+p+"\"";
03923 if(got)
03924 (*i).user_access_to_proc_groups.push_back(p);
03925 } else {
03926 string disp=lang_get_string(1,(*i).lang,50)+eol;
03927 int ec=0;
03928 dcc_send_msg((*i).socket,disp,ec);
03929 vector<string>::iterator i1;
03930 for(i1=(*i).access_grant_proc_groups.begin(); i1!=(*i).access_grant_proc_groups.end(); i1++) {
03931 disp=*i1+eol;
03932 dcc_send_msg((*i).socket,disp,ec);
03933 }
03934 disp=lang_get_string(1,(*i).lang,45)+eol;
03935 dcc_send_msg((*i).socket,disp,ec);
03936 (*i).new_user++;
03937 }
03938 }
03939 if((*i).new_user==11) {
03940 string p=dcc_get_line((*i).in_buff);
03941 if(!p.compare(""))
03942 return;
03943 if(p.compare(".")) {
03944 vector<string>::iterator i1;
03945 bool got=false;
03946 for(i1=(*i).access_grant_proc_groups.begin(); i1!=(*i).access_grant_proc_groups.end(); i1++)
03947 if(!(*i1).compare(p))
03948 got=true;
03949 string disp;
03950 if(got)
03951 disp=lang_get_string(1,(*i).lang,46)+eol;
03952 else
03953 disp=lang_get_string(1,(*i).lang,47)+eol;
03954 int ec=0;
03955 dcc_send_msg((*i).socket,disp,ec);
03956 p=(string)"\""+p+"\"";
03957 if(got)
03958 (*i).user_access_grant_proc_groups.push_back(p);
03959 } else {
03960 string disp=lang_get_string(1,(*i).lang,590)+eol;
03961 int ec=0;
03962 dcc_send_msg((*i).socket,disp,ec);
03963 vector<string>::iterator i1;
03964 for(i1=(*i).access_grant_proc_groups.begin(); i1!=(*i).access_grant_proc_groups.end(); i1++) {
03965 disp=*i1+eol;
03966 dcc_send_msg((*i).socket,disp,ec);
03967 }
03968 disp=lang_get_string(1,(*i).lang,45)+eol;
03969 dcc_send_msg((*i).socket,disp,ec);
03970 (*i).new_user=1200;
03971 return;
03972 }
03973 }
03974
03975 if((*i).new_user==12) {
03976 string p=dcc_get_line((*i).in_buff);
03977 if(!p.compare(""))
03978 return;
03979 if(p.compare(".")) {
03980 vector<string>::iterator i1;
03981 bool got=false;
03982 for(i1=(*i).access_to_channel.begin(); i1!=(*i).access_to_channel.end(); i1++)
03983 if(!(*i1).compare(p))
03984 got=true;
03985 string disp;
03986 if(got)
03987 disp=lang_get_string(1,(*i).lang,46)+eol;
03988 else
03989 disp=lang_get_string(1,(*i).lang,47)+eol;
03990 int ec=0;
03991 dcc_send_msg((*i).socket,disp,ec);
03992 p=(string)"\""+p+"\"";
03993 if(got)
03994 (*i).access_to_channel.push_back(p);
03995 } else {
03996 string disp=lang_get_string(1,(*i).lang,52)+eol;
03997 int ec=0;
03998 dcc_send_msg((*i).socket,disp,ec);
03999 vector<string>::iterator i1;
04000 for(i1=(*i).access_grant_channel.begin(); i1!=(*i).access_grant_channel.end(); i1++) {
04001 disp=*i1+eol;
04002 dcc_send_msg((*i).socket,disp,ec);
04003 }
04004 disp=lang_get_string(1,(*i).lang,45)+eol;
04005 dcc_send_msg((*i).socket,disp,ec);
04006 (*i).new_user++;
04007 }
04008 }
04009 if((*i).new_user==13) {
04010 string p=dcc_get_line((*i).in_buff);
04011 if(!p.compare(""))
04012 return;
04013 if(p.compare(".")) {
04014 vector<string>::iterator i1;
04015 bool got=false;
04016 for(i1=(*i).access_grant_channel.begin(); i1!=(*i).access_grant_channel.end(); i1++)
04017 if(!(*i1).compare(p))
04018 got=true;
04019 string disp;
04020 if(got)
04021 disp=lang_get_string(1,(*i).lang,46)+eol;
04022 else
04023 disp=lang_get_string(1,(*i).lang,47)+eol;
04024 int ec=0;
04025 dcc_send_msg((*i).socket,disp,ec);
04026 p=(string)"\""+p+"\"";
04027 if(got)
04028 (*i).access_grant_channel.push_back(p);
04029 } else {
04030 string disp=lang_get_string(1,(*i).lang,53)+eol;
04031 int ec=0;
04032 dcc_send_msg((*i).socket,disp,ec);
04033 (*i).new_user++;
04034 }
04035 }
04036 if((*i).new_user==14) {
04037 vector<string> channels;
04038 logic_partyline_get_channels(channels);
04039 vector<string>::iterator i1;
04040 for(i1=channels.begin(); i1!=channels.end(); i1++) {
04041 vector<string>::iterator i2;
04042 for(i2=(*i).access_grant_channel.begin(); i2!=(*i).access_grant_channel.end(); i2++) {
04043 vector<s_channel>::iterator i3;
04044 bool got=false;
04045 for(i3=(*i).user_channels.begin(); i3!=(*i).user_channels.end(); i3++)
04046 if(!((*i3).channel_name.compare(*i2))) {
04047 got=true;
04048 break;
04049 }
04050 if(got)
04051 continue;
04052 if(!(*i2).compare("*"))
04053 continue;
04054 s_channel ch;
04055 ch.username=(*i).user_name;
04056 ch.channel_name=*i2;
04057 ch.on_deop="";
04058 ch.on_ban="";
04059 ch.on_unban="";
04060 ch.on_kick="";
04061 ch.on_op="";
04062 ch.on_voice="";
04063 ch.on_devoice="";
04064 ch.on_creator="";
04065 ch.on_decreator="";
04066 ch.on_join="";
04067 ch.on_banned="";
04068 ch.on_flood="";
04069 ch.on_privmsg="";
04070 ch.on_notice="";
04071 ch.on_except="";
04072 ch.on_unexcept="";
04073 ch.on_invite="";
04074 ch.on_uninvite="";
04075 ch.on_not_invited="";
04076 ch.on_not_in_reop="";
04077 ch.on_reop="";
04078 ch.on_other_mode="";
04079 ch.msg_flood.lines=0;
04080 ch.notice_flood.lines=0;
04081 ch.repeat_flood.lines=0;
04082 ch.nick_flood.lines=0;
04083 ch.join_flood.lines=0;
04084 ch.mode_flood.lines=0;
04085 ch.ctcp_flood.lines=0;
04086 ch.allow_dynamic.clear();
04087 ch.configured=false;
04088 ch.can_send_unknown_users=false;
04089 (*i).user_channels.push_back(ch);
04090 string disp=*i2+eol;
04091 int ec=0;
04092 dcc_send_msg((*i).socket,disp,ec);
04093 }
04094 }
04095 (*i).new_user++;
04096 }
04097
04098 if((*i).new_user==15) {
04099 int num_not_configured_channels=0;
04100
04101 string channel="";
04102
04103 vector<s_channel>::iterator i2;
04104 for(i2=(*i).user_channels.begin(); i2!=(*i).user_channels.end(); i2++)
04105 if(!(*i2).configured) {
04106 num_not_configured_channels++;
04107 if(!channel.compare(""))
04108 channel=(*i2).channel_name;
04109 }
04110 (*i).num_not_configured_channels=num_not_configured_channels;
04111 (*i).user_channel.username=(*i).user_name;
04112 (*i).user_channel.channel_name=channel;
04113 (*i).user_channel.on_deop="";
04114 (*i).user_channel.on_ban="";
04115 (*i).user_channel.on_unban="";
04116 (*i).user_channel.on_kick="";
04117 (*i).user_channel.on_op="";
04118 (*i).user_channel.on_voice="";
04119 (*i).user_channel.on_devoice="";
04120 (*i).user_channel.on_creator="";
04121 (*i).user_channel.on_decreator="";
04122 (*i).user_channel.on_join="";
04123 (*i).user_channel.on_banned="";
04124 (*i).user_channel.on_flood="";
04125 (*i).user_channel.on_privmsg="";
04126 (*i).user_channel.on_notice="";
04127 (*i).user_channel.on_except="";
04128 (*i).user_channel.on_unexcept="";
04129 (*i).user_channel.on_invite="";
04130 (*i).user_channel.on_uninvite="";
04131 (*i).user_channel.on_not_invited="";
04132 (*i).user_channel.on_not_in_reop="";
04133 (*i).user_channel.on_reop="";
04134 (*i).user_channel.on_other_mode="";
04135 (*i).user_channel.msg_flood.lines=0;
04136 (*i).user_channel.notice_flood.lines=0;
04137 (*i).user_channel.repeat_flood.lines=0;
04138 (*i).user_channel.nick_flood.lines=0;
04139 (*i).user_channel.join_flood.lines=0;
04140 (*i).user_channel.mode_flood.lines=0;
04141 (*i).user_channel.ctcp_flood.lines=0;
04142
04143 (*i).user_channel_allow_dynamic.group="";
04144 (*i).user_channel_allow_dynamic.plus_modes="";
04145 (*i).user_channel_allow_dynamic.minus_modes="";
04146
04147 (*i).user_channel.configured=false;
04148 (*i).user_channel.can_send_unknown_users=false;
04149
04150 (*i).new_user++;
04151
04152
04153 if(num_not_configured_channels==0)
04154 (*i).new_user=38;
04155 (*i).num_not_configured_channels=num_not_configured_channels;
04156 }
04157
04158 if((*i).new_user==16) {
04159 string disp;
04160 int ec=0;
04161
04162 disp=lang_get_string(1,(*i).lang,55)+eol;
04163 dcc_send_msg((*i).socket,disp,ec);
04164
04165 vector<string>::iterator i3;
04166 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
04167 if(!(*i3).compare("*"))
04168 continue;
04169 disp=*i3+eol;
04170 dcc_send_msg((*i).socket,disp,ec);
04171 }
04172
04173 disp=(string)"----------------"+eol;
04174 dcc_send_msg((*i).socket,disp,ec);
04175
04176 disp=lang_get_string(1,(*i).lang,75)+eol;
04177 dcc_send_msg((*i).socket,disp,ec);
04178
04179 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol;
04180 dcc_send_msg((*i).socket,disp,ec);
04181
04182 disp=lang_get_string(1,(*i).lang,541)+eol;
04183 dcc_send_msg((*i).socket,disp,ec);
04184
04185 (*i).new_user++;
04186 }
04187 if((*i).new_user==17) {
04188 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_deop)) {
04189 int ec=0;
04190 string disp=lang_get_string(1,(*i).lang,592)+eol;
04191 dcc_send_msg((*i).socket,disp,ec);
04192 (*i).new_user++;
04193 return;
04194 }
04195
04196 string p=dcc_get_line((*i).in_buff);
04197 if(!p.compare(""))
04198 return;
04199 vector<string>::iterator i1;
04200 bool got=false;
04201 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
04202 if(!(*i1).compare(p))
04203 got=true;
04204 if(!p.compare(".")) {
04205 got=true;
04206 string disp=lang_get_string(1,(*i).lang,57)+eol;
04207 int ec=0;
04208 dcc_send_msg((*i).socket,disp,ec);
04209 (*i).new_user++;
04210 } else {
04211 if(!p.compare("!")) {
04212 vector<s_channel>::iterator i2;
04213 for(i2=(*i).user_channels.begin(); i2!=(*i).user_channels.end(); i2++)
04214 if(!(*i2).channel_name.compare((*i).user_channel.channel_name)) {
04215 (*i).user_channels.erase(i2);
04216 break;
04217 }
04218 if((*i).num_not_configured_channels>0) {
04219 (*i).new_user=15;
04220 return;
04221 } else {
04222 string disp=lang_get_string(1,(*i).lang,69)+eol;
04223 int ec=0;
04224 dcc_send_msg((*i).socket,disp,ec);
04225 (*i).new_user=39;
04226 return;
04227 }
04228 } else {
04229 string disp;
04230 if(got)
04231 disp=lang_get_string(1,(*i).lang,57)+eol;
04232 else
04233 disp=lang_get_string(1,(*i).lang,58)+eol;
04234 int ec=0;
04235 dcc_send_msg((*i).socket,disp,ec);
04236 if(got)
04237 (*i).user_channel.on_deop=p;
04238 else {
04239 (*i).new_user--;
04240 return;
04241 }
04242 (*i).new_user++;
04243 }
04244 }
04245 }
04246
04247 if((*i).new_user==18) {
04248 string disp;
04249 int ec=0;
04250
04251 disp=lang_get_string(1,(*i).lang,59)+eol;
04252 dcc_send_msg((*i).socket,disp,ec);
04253
04254 vector<string>::iterator i3;
04255 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
04256 if(!(*i3).compare("*"))
04257 continue;
04258 disp=*i3+eol;
04259 dcc_send_msg((*i).socket,disp,ec);
04260 }
04261
04262 disp=(string)"----------------"+eol;
04263 dcc_send_msg((*i).socket,disp,ec);
04264
04265 disp=lang_get_string(1,(*i).lang,76)+eol;
04266 dcc_send_msg((*i).socket,disp,ec);
04267
04268 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol;
04269 dcc_send_msg((*i).socket,disp,ec);
04270
04271 disp=lang_get_string(1,(*i).lang,56)+eol;
04272 dcc_send_msg((*i).socket,disp,ec);
04273
04274 (*i).new_user++;
04275 }
04276 if((*i).new_user==19) {
04277 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_ban)) {
04278 int ec=0;
04279 string disp=lang_get_string(1,(*i).lang,592)+eol;
04280 dcc_send_msg((*i).socket,disp,ec);
04281 (*i).new_user++;
04282 return;
04283 }
04284
04285 string p=dcc_get_line((*i).in_buff);
04286 if(!p.compare(""))
04287 return;
04288 vector<string>::iterator i1;
04289 bool got=false;
04290 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
04291 if(!(*i1).compare(p))
04292 got=true;
04293 if(!p.compare(".")) {
04294 got=true;
04295 string disp=lang_get_string(1,(*i).lang,57)+eol;
04296 int ec=0;
04297 dcc_send_msg((*i).socket,disp,ec);
04298 (*i).new_user++;
04299 } else {
04300 string disp;
04301 if(got)
04302 disp=lang_get_string(1,(*i).lang,57)+eol;
04303 else
04304 disp=lang_get_string(1,(*i).lang,58)+eol;
04305 int ec=0;
04306 dcc_send_msg((*i).socket,disp,ec);
04307 if(got)
04308 (*i).user_channel.on_ban=p;
04309 else {
04310 (*i).new_user--;
04311 return;
04312 }
04313 (*i).new_user++;
04314 }
04315 }
04316
04317 if((*i).new_user==20) {
04318 string disp;
04319 int ec=0;
04320
04321 disp=lang_get_string(1,(*i).lang,60)+eol;
04322 dcc_send_msg((*i).socket,disp,ec);
04323
04324 vector<string>::iterator i3;
04325 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
04326 if(!(*i3).compare("*"))
04327 continue;
04328 disp=*i3+eol;
04329 dcc_send_msg((*i).socket,disp,ec);
04330 }
04331
04332 disp=(string)"----------------"+eol;
04333 dcc_send_msg((*i).socket,disp,ec);
04334
04335 disp=lang_get_string(1,(*i).lang,77)+eol;
04336 dcc_send_msg((*i).socket,disp,ec);
04337
04338 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol;
04339 dcc_send_msg((*i).socket,disp,ec);
04340
04341 disp=lang_get_string(1,(*i).lang,56)+eol;
04342 dcc_send_msg((*i).socket,disp,ec);
04343
04344 (*i).new_user++;
04345 }
04346 if((*i).new_user==21) {
04347 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_unban)) {
04348 int ec=0;
04349 string disp=lang_get_string(1,(*i).lang,592)+eol;
04350 dcc_send_msg((*i).socket,disp,ec);
04351 (*i).new_user++;
04352 return;
04353 }
04354
04355 string p=dcc_get_line((*i).in_buff);
04356 if(!p.compare(""))
04357 return;
04358 vector<string>::iterator i1;
04359 bool got=false;
04360 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
04361 if(!(*i1).compare(p))
04362 got=true;
04363 if(!p.compare(".")) {
04364 got=true;
04365 string disp=lang_get_string(1,(*i).lang,57)+eol;
04366 int ec=0;
04367 dcc_send_msg((*i).socket,disp,ec);
04368 (*i).new_user++;
04369 } else {
04370 string disp;
04371 if(got)
04372 disp=lang_get_string(1,(*i).lang,57)+eol;
04373 else
04374 disp=lang_get_string(1,(*i).lang,58)+eol;
04375 int ec=0;
04376 dcc_send_msg((*i).socket,disp,ec);
04377 if(got)
04378 (*i).user_channel.on_unban=p;
04379 else {
04380 (*i).new_user--;
04381 return;
04382 }
04383 (*i).new_user++;
04384 }
04385 }
04386
04387 if((*i).new_user==22) {
04388 string disp;
04389 int ec=0;
04390
04391 disp=lang_get_string(1,(*i).lang,61)+eol;
04392 dcc_send_msg((*i).socket,disp,ec);
04393
04394 vector<string>::iterator i3;
04395 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
04396 if(!(*i3).compare("*"))
04397 continue;
04398 disp=*i3+eol;
04399 dcc_send_msg((*i).socket,disp,ec);
04400 }
04401
04402 disp=(string)"----------------"+eol;
04403 dcc_send_msg((*i).socket,disp,ec);
04404
04405 disp=lang_get_string(1,(*i).lang,78)+eol;
04406 dcc_send_msg((*i).socket,disp,ec);
04407
04408 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol;
04409 dcc_send_msg((*i).socket,disp,ec);
04410
04411 disp=lang_get_string(1,(*i).lang,56)+eol;
04412 dcc_send_msg((*i).socket,disp,ec);
04413
04414 (*i).new_user++;
04415 }
04416 if((*i).new_user==23) {
04417 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_kick)) {
04418 int ec=0;
04419 string disp=lang_get_string(1,(*i).lang,592)+eol;
04420 dcc_send_msg((*i).socket,disp,ec);
04421 (*i).new_user++;
04422 return;
04423 }
04424
04425 string p=dcc_get_line((*i).in_buff);
04426 if(!p.compare(""))
04427 return;
04428 vector<string>::iterator i1;
04429 bool got=false;
04430 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
04431 if(!(*i1).compare(p))
04432 got=true;
04433 if(!p.compare(".")) {
04434 got=true;
04435 string disp=lang_get_string(1,(*i).lang,57)+eol;
04436 int ec=0;
04437 dcc_send_msg((*i).socket,disp,ec);
04438 (*i).new_user++;
04439 } else {
04440 string disp;
04441 if(got)
04442 disp=lang_get_string(1,(*i).lang,57)+eol;
04443 else
04444 disp=lang_get_string(1,(*i).lang,58)+eol;
04445 int ec=0;
04446 dcc_send_msg((*i).socket,disp,ec);
04447 if(got)
04448 (*i).user_channel.on_kick=p;
04449 else {
04450 (*i).new_user--;
04451 return;
04452 }
04453 (*i).new_user++;
04454 }
04455 }
04456
04457 if((*i).new_user==24) {
04458 string disp;
04459 int ec=0;
04460
04461 disp=lang_get_string(1,(*i).lang,62)+eol;
04462 dcc_send_msg((*i).socket,disp,ec);
04463
04464 vector<string>::iterator i3;
04465 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
04466 if(!(*i3).compare("*"))
04467 continue;
04468 disp=*i3+eol;
04469 dcc_send_msg((*i).socket,disp,ec);
04470 }
04471
04472 disp=(string)"----------------"+eol;
04473 dcc_send_msg((*i).socket,disp,ec);
04474
04475 disp=lang_get_string(1,(*i).lang,79)+eol;
04476 dcc_send_msg((*i).socket,disp,ec);
04477
04478 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol;
04479 dcc_send_msg((*i).socket,disp,ec);
04480
04481 disp=lang_get_string(1,(*i).lang,56)+eol;
04482 dcc_send_msg((*i).socket,disp,ec);
04483
04484 (*i).new_user++;
04485 }
04486 if((*i).new_user==25) {
04487 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_op)) {
04488 int ec=0;
04489 string disp=lang_get_string(1,(*i).lang,592)+eol;
04490 dcc_send_msg((*i).socket,disp,ec);
04491 (*i).new_user++;
04492 return;
04493 }
04494
04495 string p=dcc_get_line((*i).in_buff);
04496 if(!p.compare(""))
04497 return;
04498 vector<string>::iterator i1;
04499 bool got=false;
04500 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
04501 if(!(*i1).compare(p))
04502 got=true;
04503 if(!p.compare(".")) {
04504 got=true;
04505 string disp=lang_get_string(1,(*i).lang,57)+eol;
04506 int ec=0;
04507 dcc_send_msg((*i).socket,disp,ec);
04508 (*i).new_user++;
04509 } else {
04510 string disp;
04511 if(got)
04512 disp=lang_get_string(1,(*i).lang,57)+eol;
04513 else
04514 disp=lang_get_string(1,(*i).lang,58)+eol;
04515 int ec=0;
04516 dcc_send_msg((*i).socket,disp,ec);
04517 if(got)
04518 (*i).user_channel.on_op=p;
04519 else {
04520 (*i).new_user--;
04521 return;
04522 }
04523 (*i).new_user++;
04524 }
04525 }
04526
04527 if((*i).new_user==26) {
04528 string disp;
04529 int ec=0;
04530
04531 disp=lang_get_string(1,(*i).lang,63)+eol;
04532 dcc_send_msg((*i).socket,disp,ec);
04533
04534 vector<string>::iterator i3;
04535 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
04536 if(!(*i3).compare("*"))
04537 continue;
04538 disp=*i3+eol;
04539 dcc_send_msg((*i).socket,disp,ec);
04540 }
04541
04542 disp=(string)"----------------"+eol;
04543 dcc_send_msg((*i).socket,disp,ec);
04544
04545 disp=lang_get_string(1,(*i).lang,80)+eol;
04546 dcc_send_msg((*i).socket,disp,ec);
04547
04548 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol;
04549 dcc_send_msg((*i).socket,disp,ec);
04550
04551 disp=lang_get_string(1,(*i).lang,56)+eol;
04552 dcc_send_msg((*i).socket,disp,ec);
04553
04554 (*i).new_user++;
04555 }
04556 if((*i).new_user==27) {
04557 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_voice)) {
04558 int ec=0;
04559 string disp=lang_get_string(1,(*i).lang,592)+eol;
04560 dcc_send_msg((*i).socket,disp,ec);
04561 (*i).new_user++;
04562 return;
04563 }
04564
04565 string p=dcc_get_line((*i).in_buff);
04566 if(!p.compare(""))
04567 return;
04568 vector<string>::iterator i1;
04569 bool got=false;
04570 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
04571 if(!(*i1).compare(p))
04572 got=true;
04573 if(!p.compare(".")) {
04574 got=true;
04575 string disp=lang_get_string(1,(*i).lang,57)+eol;
04576 int ec=0;
04577 dcc_send_msg((*i).socket,disp,ec);
04578 (*i).new_user++;
04579 } else {
04580 string disp;
04581 if(got)
04582 disp=lang_get_string(1,(*i).lang,57)+eol;
04583 else
04584 disp=lang_get_string(1,(*i).lang,58)+eol;
04585 int ec=0;
04586 dcc_send_msg((*i).socket,disp,ec);
04587 if(got)
04588 (*i).user_channel.on_voice=p;
04589 else {
04590 (*i).new_user--;
04591 return;
04592 }
04593 (*i).new_user++;
04594 }
04595 }
04596
04597 if((*i).new_user==28) {
04598 string disp;
04599 int ec=0;
04600
04601 disp=lang_get_string(1,(*i).lang,64)+eol;
04602 dcc_send_msg((*i).socket,disp,ec);
04603
04604 vector<string>::iterator i3;
04605 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
04606 if(!(*i3).compare("*"))
04607 continue;
04608 disp=*i3+eol;
04609 dcc_send_msg((*i).socket,disp,ec);
04610 }
04611
04612 disp=(string)"----------------"+eol;
04613 dcc_send_msg((*i).socket,disp,ec);
04614
04615 disp=lang_get_string(1,(*i).lang,81)+eol;
04616 dcc_send_msg((*i).socket,disp,ec);
04617
04618 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol;
04619 dcc_send_msg((*i).socket,disp,ec);
04620
04621 disp=lang_get_string(1,(*i).lang,56)+eol;
04622 dcc_send_msg((*i).socket,disp,ec);
04623
04624 (*i).new_user++;
04625 }
04626 if((*i).new_user==29) {
04627 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_devoice)) {
04628 int ec=0;
04629 string disp=lang_get_string(1,(*i).lang,592)+eol;
04630 dcc_send_msg((*i).socket,disp,ec);
04631 (*i).new_user++;
04632 return;
04633 }
04634
04635 string p=dcc_get_line((*i).in_buff);
04636 if(!p.compare(""))
04637 return;
04638 vector<string>::iterator i1;
04639 bool got=false;
04640 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
04641 if(!(*i1).compare(p))
04642 got=true;
04643 if(!p.compare(".")) {
04644 got=true;
04645 string disp=lang_get_string(1,(*i).lang,57)+eol;
04646 int ec=0;
04647 dcc_send_msg((*i).socket,disp,ec);
04648 (*i).new_user++;
04649 } else {
04650 string disp;
04651 if(got)
04652 disp=lang_get_string(1,(*i).lang,57)+eol;
04653 else
04654 disp=lang_get_string(1,(*i).lang,58)+eol;
04655 int ec=0;
04656 dcc_send_msg((*i).socket,disp,ec);
04657 if(got)
04658 (*i).user_channel.on_devoice=p;
04659 else {
04660 (*i).new_user--;
04661 return;
04662 }
04663 (*i).new_user++;
04664 }
04665 }
04666
04667 if((*i).new_user==30) {
04668 string disp;
04669 int ec=0;
04670
04671 disp=lang_get_string(1,(*i).lang,65)+eol;
04672 dcc_send_msg((*i).socket,disp,ec);
04673
04674 vector<string>::iterator i3;
04675 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
04676 if(!(*i3).compare("*"))
04677 continue;
04678 disp=*i3+eol;
04679 dcc_send_msg((*i).socket,disp,ec);
04680 }
04681
04682 disp=(string)"----------------"+eol;
04683 dcc_send_msg((*i).socket,disp,ec);
04684
04685 disp=lang_get_string(1,(*i).lang,82)+eol;
04686 dcc_send_msg((*i).socket,disp,ec);
04687
04688 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol;
04689 dcc_send_msg((*i).socket,disp,ec);
04690
04691 disp=lang_get_string(1,(*i).lang,56)+eol;
04692 dcc_send_msg((*i).socket,disp,ec);
04693
04694 (*i).new_user++;
04695 }
04696 if((*i).new_user==31) {
04697 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_creator)) {
04698 int ec=0;
04699 string disp=lang_get_string(1,(*i).lang,592)+eol;
04700 dcc_send_msg((*i).socket,disp,ec);
04701 (*i).new_user++;
04702 return;
04703 }
04704
04705 string p=dcc_get_line((*i).in_buff);
04706 if(!p.compare(""))
04707 return;
04708 vector<string>::iterator i1;
04709 bool got=false;
04710 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
04711 if(!(*i1).compare(p))
04712 got=true;
04713 if(!p.compare(".")) {
04714 got=true;
04715 string disp=lang_get_string(1,(*i).lang,57)+eol;
04716 int ec=0;
04717 dcc_send_msg((*i).socket,disp,ec);
04718 (*i).new_user++;
04719 } else {
04720 string disp;
04721 if(got)
04722 disp=lang_get_string(1,(*i).lang,57)+eol;
04723 else
04724 disp=lang_get_string(1,(*i).lang,58)+eol;
04725 int ec=0;
04726 dcc_send_msg((*i).socket,disp,ec);
04727 if(got)
04728 (*i).user_channel.on_creator=p;
04729 else {
04730 (*i).new_user--;
04731 return;
04732 }
04733 (*i).new_user++;
04734 }
04735 }
04736
04737 if((*i).new_user==32) {
04738 string disp;
04739 int ec=0;
04740
04741 disp=lang_get_string(1,(*i).lang,66)+eol;
04742 dcc_send_msg((*i).socket,disp,ec);
04743
04744 vector<string>::iterator i3;
04745 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
04746 if(!(*i3).compare("*"))
04747 continue;
04748 disp=*i3+eol;
04749 dcc_send_msg((*i).socket,disp,ec);
04750 }
04751
04752 disp=(string)"----------------"+eol;
04753 dcc_send_msg((*i).socket,disp,ec);
04754
04755 disp=lang_get_string(1,(*i).lang,83)+eol;
04756 dcc_send_msg((*i).socket,disp,ec);
04757
04758 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol;
04759 dcc_send_msg((*i).socket,disp,ec);
04760
04761 disp=lang_get_string(1,(*i).lang,56)+eol;
04762 dcc_send_msg((*i).socket,disp,ec);
04763
04764 (*i).new_user++;
04765 }
04766 if((*i).new_user==33) {
04767 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_decreator)) {
04768 int ec=0;
04769 string disp=lang_get_string(1,(*i).lang,592)+eol;
04770 dcc_send_msg((*i).socket,disp,ec);
04771 (*i).new_user++;
04772 return;
04773 }
04774
04775 string p=dcc_get_line((*i).in_buff);
04776 if(!p.compare(""))
04777 return;
04778 vector<string>::iterator i1;
04779 bool got=false;
04780 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
04781 if(!(*i1).compare(p))
04782 got=true;
04783 if(!p.compare(".")) {
04784 got=true;
04785 string disp=lang_get_string(1,(*i).lang,57)+eol;
04786 int ec=0;
04787 dcc_send_msg((*i).socket,disp,ec);
04788 (*i).new_user++;
04789 } else {
04790 string disp;
04791 if(got)
04792 disp=lang_get_string(1,(*i).lang,57)+eol;
04793 else
04794 disp=lang_get_string(1,(*i).lang,58)+eol;
04795 int ec=0;
04796 dcc_send_msg((*i).socket,disp,ec);
04797 if(got)
04798 (*i).user_channel.on_decreator=p;
04799 else {
04800 (*i).new_user--;
04801 return;
04802 }
04803 (*i).new_user++;
04804 }
04805 }
04806
04807 if((*i).new_user==34) {
04808 string disp;
04809 int ec=0;
04810
04811 disp=lang_get_string(1,(*i).lang,67)+eol;
04812 dcc_send_msg((*i).socket,disp,ec);
04813
04814 vector<string>::iterator i3;
04815 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
04816 if(!(*i3).compare("*"))
04817 continue;
04818 disp=*i3+eol;
04819 dcc_send_msg((*i).socket,disp,ec);
04820 }
04821
04822 disp=(string)"----------------"+eol;
04823 dcc_send_msg((*i).socket,disp,ec);
04824
04825 disp=lang_get_string(1,(*i).lang,84)+eol;
04826 dcc_send_msg((*i).socket,disp,ec);
04827
04828 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol;
04829 dcc_send_msg((*i).socket,disp,ec);
04830
04831 disp=lang_get_string(1,(*i).lang,56)+eol;
04832 dcc_send_msg((*i).socket,disp,ec);
04833
04834 (*i).new_user++;
04835 }
04836 if((*i).new_user==35) {
04837 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_join)) {
04838 int ec=0;
04839 string disp=lang_get_string(1,(*i).lang,592)+eol;
04840 dcc_send_msg((*i).socket,disp,ec);
04841 (*i).new_user++;
04842 return;
04843 }
04844
04845 string p=dcc_get_line((*i).in_buff);
04846 if(!p.compare(""))
04847 return;
04848 vector<string>::iterator i1;
04849 bool got=false;
04850 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
04851 if(!(*i1).compare(p))
04852 got=true;
04853 if(!p.compare(".")) {
04854 got=true;
04855 string disp=lang_get_string(1,(*i).lang,57)+eol;
04856 int ec=0;
04857 dcc_send_msg((*i).socket,disp,ec);
04858 (*i).new_user++;
04859 } else {
04860 string disp;
04861 if(got)
04862 disp=lang_get_string(1,(*i).lang,57)+eol;
04863 else
04864 disp=lang_get_string(1,(*i).lang,58)+eol;
04865 int ec=0;
04866 dcc_send_msg((*i).socket,disp,ec);
04867 if(got)
04868 (*i).user_channel.on_join=p;
04869 else {
04870 (*i).new_user--;
04871 return;
04872 }
04873 (*i).new_user++;
04874 }
04875 }
04876
04877 if((*i).new_user==36) {
04878 string disp;
04879 int ec=0;
04880
04881 disp=lang_get_string(1,(*i).lang,68)+eol;
04882 dcc_send_msg((*i).socket,disp,ec);
04883
04884 vector<string>::iterator i3;
04885 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
04886 if(!(*i3).compare("*"))
04887 continue;
04888 disp=*i3+eol;
04889 dcc_send_msg((*i).socket,disp,ec);
04890 }
04891
04892 disp=(string)"----------------"+eol;
04893 dcc_send_msg((*i).socket,disp,ec);
04894
04895 disp=lang_get_string(1,(*i).lang,85)+eol;
04896 dcc_send_msg((*i).socket,disp,ec);
04897
04898 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol;
04899 dcc_send_msg((*i).socket,disp,ec);
04900
04901 disp=lang_get_string(1,(*i).lang,56)+eol;
04902 dcc_send_msg((*i).socket,disp,ec);
04903
04904 (*i).new_user++;
04905 }
04906 if((*i).new_user==37) {
04907 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_banned)) {
04908 int ec=0;
04909 string disp=lang_get_string(1,(*i).lang,592)+eol;
04910 dcc_send_msg((*i).socket,disp,ec);
04911 (*i).new_user++;
04912 return;
04913 }
04914
04915 string p=dcc_get_line((*i).in_buff);
04916 if(!p.compare(""))
04917 return;
04918 vector<string>::iterator i1;
04919 bool got=false;
04920 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
04921 if(!(*i1).compare(p))
04922 got=true;
04923 if(!p.compare(".")) {
04924 got=true;
04925 string disp=lang_get_string(1,(*i).lang,57)+eol;
04926 int ec=0;
04927 dcc_send_msg((*i).socket,disp,ec);
04928 (*i).new_user=40;
04929 } else {
04930 string disp;
04931 if(got)
04932 disp=lang_get_string(1,(*i).lang,57)+eol;
04933 else
04934 disp=lang_get_string(1,(*i).lang,58)+eol;
04935 int ec=0;
04936 dcc_send_msg((*i).socket,disp,ec);
04937 if(got)
04938 (*i).user_channel.on_banned=p;
04939 else {
04940 (*i).new_user--;
04941 return;
04942 }
04943 (*i).new_user=40;
04944 }
04945 }
04946
04947 if((*i).new_user==38) {
04948 vector<s_channel>::iterator i2;
04949 for(i2=(*i).user_channels.begin(); i2!=(*i).user_channels.end(); i2++)
04950 if(!(*i2).channel_name.compare((*i).user_channel.channel_name)) {
04951 *i2=(*i).user_channel;
04952 (*i2).configured=true;
04953 }
04954
04955 if((*i).num_not_configured_channels>0) {
04956 (*i).new_user=15;
04957 } else {
04958 string disp=lang_get_string(1,(*i).lang,69)+eol;
04959 int ec=0;
04960 dcc_send_msg((*i).socket,disp,ec);
04961 (*i).new_user++;
04962 }
04963 }
04964 if((*i).new_user==39) {
04965 string p=dcc_get_line((*i).in_buff);
04966 if(!p.compare(""))
04967 return;
04968 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N") && p.compare("t") && p.compare("T")) {
04969 string disp=lang_get_string(1,(*i).lang,69)+eol;
04970 int ec=0;
04971 dcc_send_msg((*i).socket,disp,ec);
04972 } else {
04973 if(!p.compare("n") || !p.compare("N")) {
04974 string disp=lang_get_string(1,(*i).lang,70)+eol;
04975 int ec=0;
04976 dcc_send_msg((*i).socket,disp,ec);
04977 (*i).new_user=0;
04978 } else {
04979 (*i).new_user=0;
04980
04981 if(logic_partyline_user_exists((*i).user_name)) {
04982 string disp=lang_get_string(1,(*i).lang,72)+eol;
04983 int ec=0;
04984 dcc_send_msg((*i).socket,disp,ec);
04985 } else {
04986 s_user u;
04987
04988 u.name=(*i).user_name;
04989
04990 u.host_unknown=false;
04991 u.host_bot=false;
04992
04993 u.is_template=!p.compare("t") || !p.compare("T");
04994
04995 vector<string>::iterator i1;
04996 for(i1=(*i).user_member_of.begin(); i1!=(*i).user_member_of.end(); i1++) {
04997 s_group g;
04998 g.name=*i1;
04999 u.groups.push_back(g);
05000 }
05001 for(i1=(*i).user_hosts.begin(); i1!=(*i).user_hosts.end(); i1++)
05002 u.hostmask.push_back(*i1);
05003 vector<s_dcc_host>::iterator i2;
05004 for(i2=(*i).user_dcc_hosts.begin(); i2!=(*i).user_dcc_hosts.end(); i2++)
05005 u.dcc_hosts.push_back(*i2);
05006 for(i1=(*i).user_fullnames.begin(); i1!=(*i).user_fullnames.end(); i1++)
05007 u.fullname.push_back(*i1);
05008
05009 map<string,string>::iterator i5;
05010 for(i5=(*i).user_meta.begin(); i5!=(*i).user_meta.end(); i5++)
05011 u.meta.insert(*i5);
05012
05013 u.access_to_partyline=(*i).user_access_to_partyline;
05014 u.access_grant_partyline=(*i).user_access_grant_partyline;
05015 u.access_to_backup=(*i).user_access_to_backup;
05016 u.access_to_rehash=(*i).user_access_to_rehash;
05017 u.access_grant_backup=(*i).user_access_grant_backup;
05018 u.access_grant_rehash=(*i).user_access_grant_rehash;
05019 u.access_to_plususer=(*i).user_access_to_plususer;
05020 u.access_grant_plususer=(*i).user_access_grant_plususer;
05021
05022 u.access_to_plusproc=(*i).user_access_to_plusproc;
05023 u.access_grant_plusproc=(*i).user_access_grant_plusproc;
05024
05025 u.access_to_replication=(*i).user_access_to_replication;
05026 u.access_grant_replication=(*i).user_access_grant_replication;
05027
05028 u.access_to_restart=(*i).user_access_to_restart;
05029 u.access_grant_restart=(*i).user_access_grant_restart;
05030 u.access_to_die=(*i).user_access_to_die;
05031 u.access_grant_die=(*i).user_access_grant_die;
05032
05033 u.access_to_filesystem=(*i).user_access_to_filesystem;
05034 u.access_grant_filesystem=(*i).user_access_grant_filesystem;
05035
05036 u.access_to_upgrade=(*i).user_access_to_upgrade;
05037 u.access_grant_upgrade=(*i).user_access_grant_upgrade;
05038
05039 u.access_to_apply=(*i).user_access_to_apply;
05040 u.access_grant_apply=(*i).user_access_grant_apply;
05041
05042 u.access_to_can_send_all_users=(*i).user_access_to_can_send_all_users;
05043 u.access_grant_can_send_all_users=(*i).user_access_grant_can_send_all_users;
05044
05045 u.access_to_can_send_unknown_users=(*i).user_access_to_can_send_unknown_users;
05046 u.access_grant_can_send_unknown_users=(*i).user_access_grant_can_send_unknown_users;
05047
05048 u.access_to_private=(*i).user_access_to_private;
05049 u.access_grant_private=(*i).user_access_grant_private;
05050
05051 for(i1=(*i).user_access_to_groups.begin(); i1!=(*i).user_access_to_groups.end(); i1++)
05052 u.access_to_group.push_back(*i1);
05053 for(i1=(*i).user_access_grant_groups.begin(); i1!=(*i).user_access_grant_groups.end(); i1++)
05054 u.access_grant_group.push_back(*i1);
05055 for(i1=(*i).user_access_to_proc_groups.begin(); i1!=(*i).user_access_to_proc_groups.end(); i1++)
05056 u.access_to_proc.push_back(*i1);
05057 for(i1=(*i).user_access_grant_proc_groups.begin(); i1!=(*i).user_access_grant_proc_groups.end(); i1++)
05058 u.access_grant_procedure.push_back(*i1);
05059 for(i1=(*i).user_access_usage_proc_groups.begin(); i1!=(*i).user_access_usage_proc_groups.end(); i1++)
05060 u.access_usage_procedure.push_back(*i1);
05061 for(i1=(*i).user_access_to_channel.begin(); i1!=(*i).user_access_to_channel.end(); i1++)
05062 u.access_to_channel.push_back(*i1);
05063 for(i1=(*i).user_access_grant_channel.begin(); i1!=(*i).user_access_grant_channel.end(); i1++)
05064 u.access_grant_channel.push_back(*i1);
05065 vector<s_channel> chs;
05066 vector<s_channel>::iterator i3;
05067 for(i3=(*i).user_channels.begin(); i3!=(*i).user_channels.end(); i3++) {
05068 if(!(*i3).configured)
05069 continue;
05070 chs.push_back(*i3);
05071 }
05072
05073 u.partyline_msg_flood=(*i).user_partyline_msg_flood;
05074
05075 time(&u.last_changed);
05076 logic_partyline_add_user(u,chs);
05077 string disp=lang_get_string(1,(*i).lang,73)+eol;
05078 int ec=0;
05079 dcc_send_msg((*i).socket,disp,ec);
05080 }
05081 }
05082 }
05083 }
05084
05085 if((*i).new_user==40) {
05086 string disp;
05087 int ec=0;
05088
05089 disp=lang_get_string(1,(*i).lang,146)+eol;
05090 dcc_send_msg((*i).socket,disp,ec);
05091
05092 vector<string>::iterator i3;
05093 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
05094 if(!(*i3).compare("*"))
05095 continue;
05096 disp=*i3+eol;
05097 dcc_send_msg((*i).socket,disp,ec);
05098 }
05099
05100 disp=(string)"----------------"+eol;
05101 dcc_send_msg((*i).socket,disp,ec);
05102
05103 disp=lang_get_string(1,(*i).lang,147)+eol;
05104 dcc_send_msg((*i).socket,disp,ec);
05105
05106 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol;
05107 dcc_send_msg((*i).socket,disp,ec);
05108
05109 disp=lang_get_string(1,(*i).lang,56)+eol;
05110 dcc_send_msg((*i).socket,disp,ec);
05111
05112 (*i).new_user++;
05113 }
05114 if((*i).new_user==41) {
05115 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_flood)) {
05116 int ec=0;
05117 string disp=lang_get_string(1,(*i).lang,592)+eol;
05118 dcc_send_msg((*i).socket,disp,ec);
05119 (*i).new_user++;
05120 return;
05121 }
05122
05123 string p=dcc_get_line((*i).in_buff);
05124 if(!p.compare(""))
05125 return;
05126 vector<string>::iterator i1;
05127 bool got=false;
05128 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
05129 if(!(*i1).compare(p))
05130 got=true;
05131 if(!p.compare(".")) {
05132 got=true;
05133 string disp=lang_get_string(1,(*i).lang,57)+eol;
05134 int ec=0;
05135 dcc_send_msg((*i).socket,disp,ec);
05136 (*i).new_user++;
05137 } else {
05138 string disp;
05139 if(got)
05140 disp=lang_get_string(1,(*i).lang,57)+eol;
05141 else
05142 disp=lang_get_string(1,(*i).lang,58)+eol;
05143 int ec=0;
05144 dcc_send_msg((*i).socket,disp,ec);
05145 if(got)
05146 (*i).user_channel.on_flood=p;
05147 else {
05148 (*i).new_user--;
05149 return;
05150 }
05151 (*i).new_user++;
05152 }
05153 }
05154
05155 if((*i).new_user==42) {
05156 string disp;
05157 int ec=0;
05158
05159 disp=lang_get_string(1,(*i).lang,164)+eol;
05160 dcc_send_msg((*i).socket,disp,ec);
05161
05162 vector<string>::iterator i3;
05163 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
05164 if(!(*i3).compare("*"))
05165 continue;
05166 disp=*i3+eol;
05167 dcc_send_msg((*i).socket,disp,ec);
05168 }
05169
05170 disp=(string)"----------------"+eol;
05171 dcc_send_msg((*i).socket,disp,ec);
05172
05173 disp=lang_get_string(1,(*i).lang,165)+eol;
05174 dcc_send_msg((*i).socket,disp,ec);
05175
05176 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol;
05177 dcc_send_msg((*i).socket,disp,ec);
05178
05179 disp=lang_get_string(1,(*i).lang,56)+eol;
05180 dcc_send_msg((*i).socket,disp,ec);
05181
05182 (*i).new_user++;
05183 }
05184 if((*i).new_user==43) {
05185 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_privmsg)) {
05186 int ec=0;
05187 string disp=lang_get_string(1,(*i).lang,592)+eol;
05188 dcc_send_msg((*i).socket,disp,ec);
05189 (*i).new_user=500;
05190 return;
05191 }
05192
05193 string p=dcc_get_line((*i).in_buff);
05194 if(!p.compare(""))
05195 return;
05196 vector<string>::iterator i1;
05197 bool got=false;
05198 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
05199 if(!(*i1).compare(p))
05200 got=true;
05201 if(!p.compare(".")) {
05202 got=true;
05203 string disp=lang_get_string(1,(*i).lang,57)+eol;
05204 int ec=0;
05205 dcc_send_msg((*i).socket,disp,ec);
05206 (*i).new_user=500;
05207 } else {
05208 string disp;
05209 if(got)
05210 disp=lang_get_string(1,(*i).lang,57)+eol;
05211 else
05212 disp=lang_get_string(1,(*i).lang,58)+eol;
05213 int ec=0;
05214 dcc_send_msg((*i).socket,disp,ec);
05215 if(got)
05216 (*i).user_channel.on_privmsg=p;
05217 else {
05218 (*i).new_user--;
05219 return;
05220 }
05221 (*i).new_user=500;
05222 }
05223 }
05224
05225
05226 if((*i).new_user==44) {
05227 string disp;
05228 int ec=0;
05229
05230 disp=lang_get_string(1,(*i).lang,148)+eol;
05231 dcc_send_msg((*i).socket,disp,ec);
05232
05233 (*i).new_user++;
05234 }
05235 if((*i).new_user==45) {
05236 string p=dcc_get_line((*i).in_buff);
05237 if(!p.compare(""))
05238 return;
05239 if(!p.compare(".")) {
05240 (*i).new_user--;
05241 } else {
05242 if(!p.compare("0"))
05243 p="0 0";
05244 string lines, seconds;
05245 int pos=0;
05246 for(unsigned int i1=0; i1<p.length(); i1++) {
05247 if(p[i1]==0x20) {
05248 pos++;
05249 continue;
05250 }
05251 if(pos==0)
05252 lines+=p[i1];
05253 if(pos==1)
05254 seconds+=p[i1];
05255 }
05256 string disp;
05257 (*i).user_channel.msg_flood.lines=atol(lines.c_str());
05258 (*i).user_channel.msg_flood.seconds=atol(seconds.c_str());
05259 (*i).new_user++;
05260 }
05261 }
05262
05263 if((*i).new_user==46) {
05264 string disp;
05265 int ec=0;
05266
05267 disp=lang_get_string(1,(*i).lang,149)+eol;
05268 dcc_send_msg((*i).socket,disp,ec);
05269
05270 (*i).new_user++;
05271 }
05272 if((*i).new_user==47) {
05273 string p=dcc_get_line((*i).in_buff);
05274 if(!p.compare(""))
05275 return;
05276 if(!p.compare(".")) {
05277 (*i).new_user--;
05278 } else {
05279 if(!p.compare("0"))
05280 p="0 0";
05281 string lines, seconds;
05282 int pos=0;
05283 for(unsigned int i1=0; i1<p.length(); i1++) {
05284 if(p[i1]==0x20) {
05285 pos++;
05286 continue;
05287 }
05288 if(pos==0)
05289 lines+=p[i1];
05290 if(pos==1)
05291 seconds+=p[i1];
05292 }
05293 string disp;
05294 (*i).user_channel.notice_flood.lines=atol(lines.c_str());
05295 (*i).user_channel.notice_flood.seconds=atol(seconds.c_str());
05296 (*i).new_user++;
05297 }
05298 }
05299
05300 if((*i).new_user==48) {
05301 string disp;
05302 int ec=0;
05303
05304 disp=lang_get_string(1,(*i).lang,150)+eol;
05305 dcc_send_msg((*i).socket,disp,ec);
05306
05307 (*i).new_user++;
05308 }
05309 if((*i).new_user==49) {
05310 string p=dcc_get_line((*i).in_buff);
05311 if(!p.compare(""))
05312 return;
05313 if(!p.compare(".")) {
05314 (*i).new_user--;
05315 } else {
05316 if(!p.compare("0"))
05317 p="0 0";
05318 string lines, seconds;
05319 int pos=0;
05320 for(unsigned int i1=0; i1<p.length(); i1++) {
05321 if(p[i1]==0x20) {
05322 pos++;
05323 continue;
05324 }
05325 if(pos==0)
05326 lines+=p[i1];
05327 if(pos==1)
05328 seconds+=p[i1];
05329 }
05330 string disp;
05331 (*i).user_channel.repeat_flood.lines=atol(lines.c_str());
05332 (*i).user_channel.repeat_flood.seconds=atol(seconds.c_str());
05333 (*i).new_user++;
05334 }
05335 }
05336
05337 if((*i).new_user==50) {
05338 string disp;
05339 int ec=0;
05340
05341 disp=lang_get_string(1,(*i).lang,151)+eol;
05342 dcc_send_msg((*i).socket,disp,ec);
05343
05344 (*i).new_user++;
05345 }
05346 if((*i).new_user==51) {
05347 string p=dcc_get_line((*i).in_buff);
05348 if(!p.compare(""))
05349 return;
05350 if(!p.compare(".")) {
05351 (*i).new_user--;
05352 } else {
05353 if(!p.compare("0"))
05354 p="0 0";
05355 string lines, seconds;
05356 int pos=0;
05357 for(unsigned int i1=0; i1<p.length(); i1++) {
05358 if(p[i1]==0x20) {
05359 pos++;
05360 continue;
05361 }
05362 if(pos==0)
05363 lines+=p[i1];
05364 if(pos==1)
05365 seconds+=p[i1];
05366 }
05367 string disp;
05368 (*i).user_channel.nick_flood.lines=atol(lines.c_str());
05369 (*i).user_channel.nick_flood.seconds=atol(seconds.c_str());
05370 (*i).new_user++;
05371 }
05372 }
05373
05374 if((*i).new_user==52) {
05375 string disp;
05376 int ec=0;
05377
05378 disp=lang_get_string(1,(*i).lang,152)+eol;
05379 dcc_send_msg((*i).socket,disp,ec);
05380
05381 (*i).new_user++;
05382 }
05383 if((*i).new_user==53) {
05384 string p=dcc_get_line((*i).in_buff);
05385 if(!p.compare(""))
05386 return;
05387 if(!p.compare(".")) {
05388 (*i).new_user--;
05389 } else {
05390 if(!p.compare("0"))
05391 p="0 0";
05392 string lines, seconds;
05393 int pos=0;
05394 for(unsigned int i1=0; i1<p.length(); i1++) {
05395 if(p[i1]==0x20) {
05396 pos++;
05397 continue;
05398 }
05399 if(pos==0)
05400 lines+=p[i1];
05401 if(pos==1)
05402 seconds+=p[i1];
05403 }
05404 string disp;
05405 (*i).user_channel.join_flood.lines=atol(lines.c_str());
05406 (*i).user_channel.join_flood.seconds=atol(seconds.c_str());
05407 (*i).new_user++;
05408 }
05409 }
05410
05411 if((*i).new_user==54) {
05412 string disp;
05413 int ec=0;
05414
05415 disp=lang_get_string(1,(*i).lang,158)+eol;
05416 dcc_send_msg((*i).socket,disp,ec);
05417
05418 (*i).new_user++;
05419 }
05420 if((*i).new_user==55) {
05421 string p=dcc_get_line((*i).in_buff);
05422 if(!p.compare(""))
05423 return;
05424 if(!p.compare(".")) {
05425 (*i).new_user--;
05426 } else {
05427 if(!p.compare("0"))
05428 p="0 0";
05429 string lines, seconds;
05430 int pos=0;
05431 for(unsigned int i1=0; i1<p.length(); i1++) {
05432 if(p[i1]==0x20) {
05433 pos++;
05434 continue;
05435 }
05436 if(pos==0)
05437 lines+=p[i1];
05438 if(pos==1)
05439 seconds+=p[i1];
05440 }
05441 (*i).user_channel.mode_flood.lines=atol(lines.c_str());
05442 (*i).user_channel.mode_flood.seconds=atol(seconds.c_str());
05443 (*i).new_user++;
05444 }
05445 }
05446
05447 if((*i).new_user==56) {
05448 string disp;
05449 int ec=0;
05450
05451 disp=lang_get_string(1,(*i).lang,384)+eol;
05452 dcc_send_msg((*i).socket,disp,ec);
05453
05454 (*i).new_user++;
05455 }
05456 if((*i).new_user==57) {
05457 string p=dcc_get_line((*i).in_buff);
05458 if(!p.compare(""))
05459 return;
05460 if(!p.compare(".")) {
05461 (*i).new_user--;
05462 } else {
05463 if(!p.compare("0"))
05464 p="0 0";
05465 string lines, seconds;
05466 int pos=0;
05467 for(unsigned int i1=0; i1<p.length(); i1++) {
05468 if(p[i1]==0x20) {
05469 pos++;
05470 continue;
05471 }
05472 if(pos==0)
05473 lines+=p[i1];
05474 if(pos==1)
05475 seconds+=p[i1];
05476 }
05477 (*i).user_channel.ctcp_flood.lines=atol(lines.c_str());
05478 (*i).user_channel.ctcp_flood.seconds=atol(seconds.c_str());
05479 (*i).new_user++;
05480 }
05481 }
05482
05483 if((*i).new_user==58) {
05484 string disp;
05485 int ec=0;
05486
05487 disp=lang_get_string(1,(*i).lang,475)+eol;
05488 dcc_send_msg((*i).socket,disp,ec);
05489
05490 (*i).new_user++;
05491 }
05492 if((*i).new_user==59) {
05493 string p=dcc_get_line((*i).in_buff);
05494 if(p.empty())
05495 return;
05496
05497 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) {
05498 string disp=lang_get_string(1,(*i).lang,475)+eol;
05499 int ec=0;
05500 dcc_send_msg((*i).socket,disp,ec);
05501 } else {
05502 if(!p.compare("n") || !p.compare("N")) {
05503 (*i).user_channel.can_send_unknown_users=false;
05504 } else {
05505 (*i).user_channel.can_send_unknown_users=true;
05506 }
05507 (*i).new_user=300;
05508 }
05509 return;
05510 }
05511
05512 if((*i).new_user==100) {
05513 if(!(*i).access_grant_backup) {
05514 (*i).new_user+=2;
05515 return;
05516 }
05517 string disp;
05518 int ec=0;
05519
05520 disp=lang_get_string(1,(*i).lang,168)+eol;
05521 dcc_send_msg((*i).socket,disp,ec);
05522
05523 (*i).new_user++;
05524 }
05525 if((*i).new_user==101) {
05526 string p=dcc_get_line((*i).in_buff);
05527 if(!p.compare(""))
05528 return;
05529 bool got=false;
05530 if(!p.compare("y") || !p.compare("Y")) {
05531 got=true;
05532 (*i).user_access_to_backup=true;
05533 }
05534 if(!p.compare("n") || !p.compare("N")) {
05535 got=true;
05536 (*i).user_access_to_backup=false;
05537 }
05538 got?(*i).new_user++:(*i).new_user--;
05539 }
05540 if((*i).new_user==102) {
05541 if(!(*i).access_grant_rehash) {
05542 (*i).new_user+=2;
05543 return;
05544 }
05545 string disp;
05546 int ec=0;
05547
05548 disp=lang_get_string(1,(*i).lang,169)+eol;
05549 dcc_send_msg((*i).socket,disp,ec);
05550
05551 (*i).new_user++;
05552 }
05553 if((*i).new_user==103) {
05554 string p=dcc_get_line((*i).in_buff);
05555 if(!p.compare(""))
05556 return;
05557 bool got=false;
05558 if(!p.compare("y") || !p.compare("Y")) {
05559 got=true;
05560 (*i).user_access_to_rehash=true;
05561 }
05562 if(!p.compare("n") || !p.compare("N")) {
05563 got=true;
05564 (*i).user_access_to_rehash=false;
05565 }
05566 got?(*i).new_user++:(*i).new_user--;
05567 }
05568 if((*i).new_user==104) {
05569 if(!(*i).access_grant_backup) {
05570 (*i).new_user+=2;
05571 return;
05572 }
05573 string disp;
05574 int ec=0;
05575
05576 disp=lang_get_string(1,(*i).lang,170)+eol;
05577 dcc_send_msg((*i).socket,disp,ec);
05578
05579 (*i).new_user++;
05580 }
05581 if((*i).new_user==105) {
05582 string p=dcc_get_line((*i).in_buff);
05583 if(!p.compare(""))
05584 return;
05585 bool got=false;
05586 if(!p.compare("y") || !p.compare("Y")) {
05587 got=true;
05588 (*i).user_access_grant_backup=true;
05589 }
05590 if(!p.compare("n") || !p.compare("N")) {
05591 got=true;
05592 (*i).user_access_grant_backup=false;
05593 }
05594 got?(*i).new_user++:(*i).new_user--;
05595 }
05596 if((*i).new_user==106) {
05597 if(!(*i).access_grant_rehash) {
05598 (*i).new_user+=2;
05599 return;
05600 }
05601 string disp;
05602 int ec=0;
05603
05604 disp=lang_get_string(1,(*i).lang,171)+eol;
05605 dcc_send_msg((*i).socket,disp,ec);
05606
05607 (*i).new_user++;
05608 }
05609 if((*i).new_user==107) {
05610 string p=dcc_get_line((*i).in_buff);
05611 if(!p.compare(""))
05612 return;
05613 bool got=false;
05614 if(!p.compare("y") || !p.compare("Y")) {
05615 got=true;
05616 (*i).user_access_grant_rehash=true;
05617 }
05618 if(!p.compare("n") || !p.compare("N")) {
05619 got=true;
05620 (*i).user_access_grant_rehash=false;
05621 }
05622 got?(*i).new_user++:(*i).new_user--;
05623 }
05624 if((*i).new_user==108) {
05625 if(!(*i).access_grant_plususer) {
05626 (*i).new_user+=2;
05627 return;
05628 }
05629 string disp;
05630 int ec=0;
05631
05632 disp=lang_get_string(1,(*i).lang,189)+eol;
05633 dcc_send_msg((*i).socket,disp,ec);
05634
05635 (*i).new_user++;
05636 }
05637 if((*i).new_user==109) {
05638 string p=dcc_get_line((*i).in_buff);
05639 if(!p.compare(""))
05640 return;
05641 bool got=false;
05642 if(!p.compare("y") || !p.compare("Y")) {
05643 got=true;
05644 (*i).user_access_to_plususer=true;
05645 }
05646 if(!p.compare("n") || !p.compare("N")) {
05647 got=true;
05648 (*i).user_access_to_plususer=false;
05649 }
05650 got?(*i).new_user++:(*i).new_user--;
05651 }
05652 if((*i).new_user==110) {
05653 if(!(*i).access_grant_plususer) {
05654 (*i).new_user+=2;
05655 return;
05656 }
05657 string disp;
05658 int ec=0;
05659
05660 disp=lang_get_string(1,(*i).lang,190)+eol;
05661 dcc_send_msg((*i).socket,disp,ec);
05662
05663 (*i).new_user++;
05664 }
05665 if((*i).new_user==111) {
05666 string p=dcc_get_line((*i).in_buff);
05667 if(!p.compare(""))
05668 return;
05669 bool got=false;
05670 if(!p.compare("y") || !p.compare("Y")) {
05671 got=true;
05672 (*i).user_access_grant_plususer=true;
05673 }
05674 if(!p.compare("n") || !p.compare("N")) {
05675 got=true;
05676 (*i).user_access_grant_plususer=false;
05677 }
05678 got?(*i).new_user++:(*i).new_user--;
05679 }
05680 if((*i).new_user==112) {
05681 if(!(*i).access_grant_plusproc) {
05682 (*i).new_user+=2;
05683 return;
05684 }
05685 string disp;
05686 int ec=0;
05687
05688 disp=lang_get_string(1,(*i).lang,197)+eol;
05689 dcc_send_msg((*i).socket,disp,ec);
05690
05691 (*i).new_user++;
05692 }
05693 if((*i).new_user==113) {
05694 string p=dcc_get_line((*i).in_buff);
05695 if(!p.compare(""))
05696 return;
05697 bool got=false;
05698 if(!p.compare("y") || !p.compare("Y")) {
05699 got=true;
05700 (*i).user_access_to_plusproc=true;
05701 }
05702 if(!p.compare("n") || !p.compare("N")) {
05703 got=true;
05704 (*i).user_access_to_plusproc=false;
05705 }
05706 got?(*i).new_user++:(*i).new_user--;
05707 }
05708 if((*i).new_user==114) {
05709 if(!(*i).access_grant_plusproc) {
05710 (*i).new_user+=2;
05711 return;
05712 }
05713 string disp;
05714 int ec=0;
05715
05716 disp=lang_get_string(1,(*i).lang,198)+eol;
05717 dcc_send_msg((*i).socket,disp,ec);
05718
05719 (*i).new_user++;
05720 }
05721 if((*i).new_user==115) {
05722 string p=dcc_get_line((*i).in_buff);
05723 if(!p.compare(""))
05724 return;
05725 bool got=false;
05726 if(!p.compare("y") || !p.compare("Y")) {
05727 got=true;
05728 (*i).user_access_grant_plusproc=true;
05729 }
05730 if(!p.compare("n") || !p.compare("N")) {
05731 got=true;
05732 (*i).user_access_grant_plusproc=false;
05733 }
05734 got?(*i).new_user++:(*i).new_user--;
05735 }
05736 if((*i).new_user==116) {
05737 if(!(*i).access_grant_replication) {
05738 (*i).new_user+=2;
05739 return;
05740 }
05741 string disp;
05742 int ec=0;
05743
05744 disp=lang_get_string(1,(*i).lang,210)+eol;
05745 dcc_send_msg((*i).socket,disp,ec);
05746
05747 (*i).new_user++;
05748 }
05749 if((*i).new_user==117) {
05750 string p=dcc_get_line((*i).in_buff);
05751 if(!p.compare(""))
05752 return;
05753 bool got=false;
05754 if(!p.compare("y") || !p.compare("Y")) {
05755 got=true;
05756 (*i).user_access_to_replication=true;
05757 }
05758 if(!p.compare("n") || !p.compare("N")) {
05759 got=true;
05760 (*i).user_access_to_replication=false;
05761 }
05762 got?(*i).new_user++:(*i).new_user--;
05763 }
05764 if((*i).new_user==118) {
05765 if(!(*i).access_grant_replication) {
05766 (*i).new_user+=2;
05767 return;
05768 }
05769 string disp;
05770 int ec=0;
05771
05772 disp=lang_get_string(1,(*i).lang,600)+eol;
05773 dcc_send_msg((*i).socket,disp,ec);
05774
05775 (*i).new_user++;
05776 }
05777 if((*i).new_user==119) {
05778 string p=dcc_get_line((*i).in_buff);
05779 if(!p.compare(""))
05780 return;
05781 bool got=false;
05782 if(!p.compare("y") || !p.compare("Y")) {
05783 got=true;
05784 (*i).user_access_grant_replication=true;
05785 }
05786 if(!p.compare("n") || !p.compare("N")) {
05787 got=true;
05788 (*i).user_access_grant_replication=false;
05789 }
05790 got?(*i).new_user++:(*i).new_user--;
05791 }
05792 if((*i).new_user==120) {
05793 if(!(*i).access_grant_restart) {
05794 (*i).new_user+=2;
05795 return;
05796 }
05797 string disp;
05798 int ec=0;
05799
05800 disp=lang_get_string(1,(*i).lang,260)+eol;
05801 dcc_send_msg((*i).socket,disp,ec);
05802
05803 (*i).new_user++;
05804 }
05805 if((*i).new_user==121) {
05806 string p=dcc_get_line((*i).in_buff);
05807 if(!p.compare(""))
05808 return;
05809 bool got=false;
05810 if(!p.compare("y") || !p.compare("Y")) {
05811 got=true;
05812 (*i).user_access_to_restart=true;
05813 }
05814 if(!p.compare("n") || !p.compare("N")) {
05815 got=true;
05816 (*i).user_access_to_restart=false;
05817 }
05818 got?(*i).new_user++:(*i).new_user--;
05819 }
05820 if((*i).new_user==122) {
05821 if(!(*i).access_grant_restart) {
05822 (*i).new_user+=2;
05823 return;
05824 }
05825 string disp;
05826 int ec=0;
05827
05828 disp=lang_get_string(1,(*i).lang,261)+eol;
05829 dcc_send_msg((*i).socket,disp,ec);
05830
05831 (*i).new_user++;
05832 }
05833 if((*i).new_user==123) {
05834 string p=dcc_get_line((*i).in_buff);
05835 if(!p.compare(""))
05836 return;
05837 bool got=false;
05838 if(!p.compare("y") || !p.compare("Y")) {
05839 got=true;
05840 (*i).user_access_grant_restart=true;
05841 }
05842 if(!p.compare("n") || !p.compare("N")) {
05843 got=true;
05844 (*i).user_access_grant_restart=false;
05845 }
05846 got?(*i).new_user++:(*i).new_user--;
05847 }
05848
05849 if((*i).new_user==124) {
05850 if(!(*i).access_grant_die) {
05851 (*i).new_user+=2;
05852 return;
05853 }
05854 string disp;
05855 int ec=0;
05856
05857 disp=lang_get_string(1,(*i).lang,267)+eol;
05858 dcc_send_msg((*i).socket,disp,ec);
05859
05860 (*i).new_user++;
05861 }
05862 if((*i).new_user==125) {
05863 string p=dcc_get_line((*i).in_buff);
05864 if(!p.compare(""))
05865 return;
05866 bool got=false;
05867 if(!p.compare("y") || !p.compare("Y")) {
05868 got=true;
05869 (*i).user_access_to_die=true;
05870 }
05871 if(!p.compare("n") || !p.compare("N")) {
05872 got=true;
05873 (*i).user_access_to_die=false;
05874 }
05875 got?(*i).new_user++:(*i).new_user--;
05876 }
05877 if((*i).new_user==126) {
05878 if(!(*i).access_grant_die) {
05879 (*i).new_user+=2;
05880 return;
05881 }
05882 string disp;
05883 int ec=0;
05884
05885 disp=lang_get_string(1,(*i).lang,268)+eol;
05886 dcc_send_msg((*i).socket,disp,ec);
05887
05888 (*i).new_user++;
05889 }
05890 if((*i).new_user==127) {
05891 string p=dcc_get_line((*i).in_buff);
05892 if(!p.compare(""))
05893 return;
05894 bool got=false;
05895 if(!p.compare("y") || !p.compare("Y")) {
05896 got=true;
05897 (*i).user_access_grant_die=true;
05898 }
05899 if(!p.compare("n") || !p.compare("N")) {
05900 got=true;
05901 (*i).user_access_grant_die=false;
05902 }
05903 got?(*i).new_user++:(*i).new_user--;
05904 }
05905
05906 if((*i).new_user==128) {
05907 if(!(*i).access_grant_filesystem) {
05908 (*i).new_user+=2;
05909 return;
05910 }
05911 string disp;
05912 int ec=0;
05913
05914 disp=lang_get_string(1,(*i).lang,276)+eol;
05915 dcc_send_msg((*i).socket,disp,ec);
05916
05917 (*i).new_user++;
05918 }
05919 if((*i).new_user==129) {
05920 string p=dcc_get_line((*i).in_buff);
05921 if(!p.compare(""))
05922 return;
05923 bool got=false;
05924 if(!p.compare("y") || !p.compare("Y")) {
05925 got=true;
05926 (*i).user_access_to_filesystem=true;
05927 }
05928 if(!p.compare("n") || !p.compare("N")) {
05929 got=true;
05930 (*i).user_access_to_filesystem=false;
05931 }
05932 got?(*i).new_user++:(*i).new_user--;
05933 }
05934 if((*i).new_user==130) {
05935 if(!(*i).access_grant_filesystem) {
05936 (*i).new_user+=2;
05937 return;
05938 }
05939 string disp;
05940 int ec=0;
05941
05942 disp=lang_get_string(1,(*i).lang,277)+eol;
05943 dcc_send_msg((*i).socket,disp,ec);
05944
05945 (*i).new_user++;
05946 }
05947 if((*i).new_user==131) {
05948 string p=dcc_get_line((*i).in_buff);
05949 if(!p.compare(""))
05950 return;
05951 bool got=false;
05952 if(!p.compare("y") || !p.compare("Y")) {
05953 got=true;
05954 (*i).user_access_grant_filesystem=true;
05955 }
05956 if(!p.compare("n") || !p.compare("N")) {
05957 got=true;
05958 (*i).user_access_grant_filesystem=false;
05959 }
05960 got?(*i).new_user++:(*i).new_user--;
05961 }
05962
05963 if((*i).new_user==132) {
05964 (*i).new_user++;
05965 }
05966
05967 if((*i).new_user==133) {
05968 if(!(*i).access_grant_private) {
05969 (*i).new_user+=2;
05970 return;
05971 }
05972 string disp;
05973 int ec=0;
05974
05975 disp=lang_get_string(1,(*i).lang,406)+eol;
05976 dcc_send_msg((*i).socket,disp,ec);
05977
05978 (*i).new_user++;
05979 }
05980 if((*i).new_user==134) {
05981 string p=dcc_get_line((*i).in_buff);
05982 if(!p.compare(""))
05983 return;
05984 bool got=false;
05985 if(!p.compare("y") || !p.compare("Y")) {
05986 got=true;
05987 (*i).user_access_to_private=true;
05988 }
05989 if(!p.compare("n") || !p.compare("N")) {
05990 got=true;
05991 (*i).user_access_to_private=false;
05992 }
05993 got?(*i).new_user++:(*i).new_user--;
05994 }
05995
05996 if((*i).new_user==135) {
05997 if(!(*i).access_grant_private) {
05998 (*i).new_user+=2;
05999 return;
06000 }
06001 string disp;
06002 int ec=0;
06003
06004 disp=lang_get_string(1,(*i).lang,407)+eol;
06005 dcc_send_msg((*i).socket,disp,ec);
06006
06007 (*i).new_user++;
06008 }
06009 if((*i).new_user==136) {
06010 string p=dcc_get_line((*i).in_buff);
06011 if(!p.compare(""))
06012 return;
06013 bool got=false;
06014 if(!p.compare("y") || !p.compare("Y")) {
06015 got=true;
06016 (*i).user_access_grant_private=true;
06017 }
06018 if(!p.compare("n") || !p.compare("N")) {
06019 got=true;
06020 (*i).user_access_grant_private=false;
06021 }
06022 got?(*i).new_user++:(*i).new_user--;
06023 }
06024
06025 if((*i).new_user==137) {
06026 if(!(*i).access_grant_upgrade) {
06027 (*i).new_user+=2;
06028 return;
06029 }
06030 string disp;
06031 int ec=0;
06032
06033 disp=lang_get_string(1,(*i).lang,625)+eol;
06034 dcc_send_msg((*i).socket,disp,ec);
06035
06036 (*i).new_user++;
06037 }
06038 if((*i).new_user==138) {
06039 string p=dcc_get_line((*i).in_buff);
06040 if(!p.compare(""))
06041 return;
06042 bool got=false;
06043 if(!p.compare("y") || !p.compare("Y")) {
06044 got=true;
06045 (*i).user_access_to_upgrade=true;
06046 }
06047 if(!p.compare("n") || !p.compare("N")) {
06048 got=true;
06049 (*i).user_access_to_upgrade=false;
06050 }
06051 got?(*i).new_user++:(*i).new_user--;
06052 }
06053
06054 if((*i).new_user==139) {
06055 if(!(*i).access_grant_upgrade) {
06056 (*i).new_user+=2;
06057 return;
06058 }
06059 string disp;
06060 int ec=0;
06061
06062 disp=lang_get_string(1,(*i).lang,626)+eol;
06063 dcc_send_msg((*i).socket,disp,ec);
06064
06065 (*i).new_user++;
06066 }
06067 if((*i).new_user==140) {
06068 string p=dcc_get_line((*i).in_buff);
06069 if(!p.compare(""))
06070 return;
06071 bool got=false;
06072 if(!p.compare("y") || !p.compare("Y")) {
06073 got=true;
06074 (*i).user_access_grant_upgrade=true;
06075 }
06076 if(!p.compare("n") || !p.compare("N")) {
06077 got=true;
06078 (*i).user_access_grant_upgrade=false;
06079 }
06080 got?(*i).new_user++:(*i).new_user--;
06081 }
06082
06083
06084 if((*i).new_user==141) {
06085 if(!(*i).access_grant_apply) {
06086 (*i).new_user+=2;
06087 return;
06088 }
06089 string disp;
06090 int ec=0;
06091
06092 disp=lang_get_string(1,(*i).lang,680)+eol;
06093 dcc_send_msg((*i).socket,disp,ec);
06094
06095 (*i).new_user++;
06096 }
06097 if((*i).new_user==142) {
06098 string p=dcc_get_line((*i).in_buff);
06099 if(!p.compare(""))
06100 return;
06101 bool got=false;
06102 if(!p.compare("y") || !p.compare("Y")) {
06103 got=true;
06104 (*i).user_access_to_apply=true;
06105 }
06106 if(!p.compare("n") || !p.compare("N")) {
06107 got=true;
06108 (*i).user_access_to_apply=false;
06109 }
06110 got?(*i).new_user++:(*i).new_user--;
06111 }
06112
06113 if((*i).new_user==143) {
06114 if(!(*i).access_grant_apply) {
06115 (*i).new_user+=2;
06116 return;
06117 }
06118 string disp;
06119 int ec=0;
06120
06121 disp=lang_get_string(1,(*i).lang,681)+eol;
06122 dcc_send_msg((*i).socket,disp,ec);
06123
06124 (*i).new_user++;
06125 }
06126 if((*i).new_user==144) {
06127 string p=dcc_get_line((*i).in_buff);
06128 if(!p.compare(""))
06129 return;
06130 bool got=false;
06131 if(!p.compare("y") || !p.compare("Y")) {
06132 got=true;
06133 (*i).user_access_grant_apply=true;
06134 }
06135 if(!p.compare("n") || !p.compare("N")) {
06136 got=true;
06137 (*i).user_access_grant_apply=false;
06138 }
06139 got?(*i).new_user++:(*i).new_user--;
06140 }
06141
06142 if((*i).new_user==145) {
06143
06144
06145
06146
06147
06148
06149
06150
06151
06152
06153 (*i).new_user++;
06154 return;
06155 }
06156
06157
06158 if((*i).new_user==146) {
06159 if(!(*i).access_grant_can_send_all_users) {
06160 (*i).new_user+=2;
06161 return;
06162 }
06163 string disp;
06164 int ec=0;
06165
06166 disp=lang_get_string(1,(*i).lang,477)+eol;
06167 dcc_send_msg((*i).socket,disp,ec);
06168
06169 (*i).new_user++;
06170 }
06171 if((*i).new_user==147) {
06172 string p=dcc_get_line((*i).in_buff);
06173 if(!p.compare(""))
06174 return;
06175 bool got=false;
06176 if(!p.compare("y") || !p.compare("Y")) {
06177 got=true;
06178 (*i).user_access_to_can_send_all_users=true;
06179 }
06180 if(!p.compare("n") || !p.compare("N")) {
06181 got=true;
06182 (*i).user_access_to_can_send_all_users=false;
06183 }
06184 got?(*i).new_user++:(*i).new_user--;
06185 }
06186
06187 if((*i).new_user==148) {
06188 if(!(*i).access_grant_can_send_all_users) {
06189 (*i).new_user+=2;
06190 return;
06191 }
06192 string disp;
06193 int ec=0;
06194
06195 disp=lang_get_string(1,(*i).lang,478)+eol;
06196 dcc_send_msg((*i).socket,disp,ec);
06197
06198 (*i).new_user++;
06199 }
06200 if((*i).new_user==149) {
06201 string p=dcc_get_line((*i).in_buff);
06202 if(!p.compare(""))
06203 return;
06204 bool got=false;
06205 if(!p.compare("y") || !p.compare("Y")) {
06206 got=true;
06207 (*i).user_access_grant_can_send_all_users=true;
06208 }
06209 if(!p.compare("n") || !p.compare("N")) {
06210 got=true;
06211 (*i).user_access_grant_can_send_all_users=false;
06212 }
06213 got?(*i).new_user++:(*i).new_user--;
06214 }
06215
06216 if((*i).new_user==150) {
06217 string disp=lang_get_string(1,(*i).lang,44)+eol;
06218 int ec=0;
06219 dcc_send_msg((*i).socket,disp,ec);
06220 vector<string>::iterator i1;
06221 for(i1=(*i).access_grant_groups.begin(); i1!=(*i).access_grant_groups.end(); i1++) {
06222 disp=*i1+eol;
06223 dcc_send_msg((*i).socket,disp,ec);
06224 }
06225 disp=lang_get_string(1,(*i).lang,45)+eol;
06226 dcc_send_msg((*i).socket,disp,ec);
06227
06228 (*i).new_user=8;
06229 return;
06230 }
06231
06232 if((*i).new_user==200) {
06233 string disp=lang_get_string(1,(*i).lang,201)+eol;
06234 int ec=0;
06235 dcc_send_msg((*i).socket,disp,ec);
06236 (*i).new_user++;
06237 }
06238 if((*i).new_user==201) {
06239 string p=dcc_get_line((*i).in_buff);
06240 if(!p.compare(""))
06241 return;
06242 bool got=false;
06243 if(!p.compare(".")) {
06244 got=false;
06245 } else {
06246 got=true;
06247 if(!p.compare("0"))
06248 p="0 0";
06249 string lines, seconds;
06250 int pos=0;
06251 for(unsigned int i1=0; i1<p.length(); i1++) {
06252 if(p[i1]==0x20) {
06253 pos++;
06254 continue;
06255 }
06256 if(pos==0)
06257 lines+=p[i1];
06258 if(pos==1)
06259 seconds+=p[i1];
06260 }
06261 string disp;
06262 (*i).user_partyline_msg_flood.lines=atol(lines.c_str());
06263 (*i).user_partyline_msg_flood.seconds=atol(seconds.c_str());
06264 (*i).new_user++;
06265 return;
06266 }
06267 if(!got)
06268 (*i).new_user=200;
06269 return;
06270 }
06271 if((*i).new_user==202) {
06272 (*i).new_user=100;
06273 }
06274
06275 if((*i).new_user==300) {
06276 string disp;
06277 int ec=0;
06278
06279 disp=lang_get_string(1,(*i).lang,211)+eol;
06280 dcc_send_msg((*i).socket,disp,ec);
06281
06282 vector<string>::iterator i1;
06283 for(i1=(*i).access_grant_groups.begin(); i1!=(*i).access_grant_groups.end(); i1++) {
06284 disp=(*i1)+eol;
06285 dcc_send_msg((*i).socket,disp,ec);
06286 }
06287
06288 disp=lang_get_string(1,(*i).lang,125)+eol;
06289 dcc_send_msg((*i).socket,disp,ec);
06290
06291 (*i).user_channel_allow_dynamic.group="";
06292 (*i).user_channel_allow_dynamic.plus_modes="";
06293 (*i).user_channel_allow_dynamic.minus_modes="";
06294
06295 (*i).new_user++;
06296 }
06297 if((*i).new_user==301) {
06298 string p=dcc_get_line((*i).in_buff);
06299 if(!p.compare(""))
06300 return;
06301 if(p.compare(".")) {
06302 vector<string>::iterator i1;
06303 bool got=false;
06304 for(i1=(*i).access_grant_groups.begin(); i1!=(*i).access_grant_groups.end(); i1++)
06305 if(!(*i1).compare(p))
06306 got=true;
06307 string disp;
06308 if(got)
06309 disp=lang_get_string(1,(*i).lang,212)+eol;
06310 else
06311 disp=lang_get_string(1,(*i).lang,214)+eol;
06312 int ec=0;
06313 dcc_send_msg((*i).socket,disp,ec);
06314 p=(string)"\""+p+"\"";
06315 if(got) {
06316 (*i).user_channel_allow_dynamic.group=p;
06317 (*i).new_user++;
06318 }
06319 } else {
06320 (*i).new_user=304;
06321 }
06322 }
06323 if((*i).new_user==302) {
06324 string p=dcc_get_line((*i).in_buff);
06325 if(!p.compare(""))
06326 return;
06327 if(!p.compare("."))
06328 p="";
06329 p=(string)"\""+p+"\"";
06330 (*i).user_channel_allow_dynamic.plus_modes=p;
06331
06332 string disp;
06333 int ec=0;
06334
06335 disp=lang_get_string(1,(*i).lang,213)+eol;
06336 dcc_send_msg((*i).socket,disp,ec);
06337 (*i).new_user++;
06338 }
06339 if((*i).new_user==303) {
06340 string p=dcc_get_line((*i).in_buff);
06341 if(!p.compare(""))
06342 return;
06343 if(!p.compare("."))
06344 p="";
06345 p=(string)"\""+p+"\"";
06346 (*i).user_channel_allow_dynamic.minus_modes=p;
06347
06348 (*i).user_channel.allow_dynamic.push_back((*i).user_channel_allow_dynamic);
06349
06350 (*i).new_user=300;
06351 }
06352 if((*i).new_user==304) {
06353 (*i).new_user=38;
06354 }
06355
06356
06357 if((*i).new_user==500) {
06358 string disp;
06359 int ec=0;
06360
06361 disp=lang_get_string(1,(*i).lang,601)+eol;
06362 dcc_send_msg((*i).socket,disp,ec);
06363
06364 vector<string>::iterator i3;
06365 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
06366 if(!(*i3).compare("*"))
06367 continue;
06368 disp=*i3+eol;
06369 dcc_send_msg((*i).socket,disp,ec);
06370 }
06371
06372 disp=(string)"----------------"+eol;
06373 dcc_send_msg((*i).socket,disp,ec);
06374
06375 disp=lang_get_string(1,(*i).lang,602)+eol;
06376 dcc_send_msg((*i).socket,disp,ec);
06377
06378 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol;
06379 dcc_send_msg((*i).socket,disp,ec);
06380
06381 disp=lang_get_string(1,(*i).lang,56)+eol;
06382 dcc_send_msg((*i).socket,disp,ec);
06383
06384 (*i).new_user++;
06385 }
06386 if((*i).new_user==501) {
06387 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_notice)) {
06388 int ec=0;
06389 string disp=lang_get_string(1,(*i).lang,592)+eol;
06390 dcc_send_msg((*i).socket,disp,ec);
06391 (*i).new_user++;
06392 return;
06393 }
06394
06395 string p=dcc_get_line((*i).in_buff);
06396 if(!p.compare(""))
06397 return;
06398 vector<string>::iterator i1;
06399 bool got=false;
06400 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
06401 if(!(*i1).compare(p))
06402 got=true;
06403 if(!p.compare(".")) {
06404 got=true;
06405 string disp=lang_get_string(1,(*i).lang,57)+eol;
06406 int ec=0;
06407 dcc_send_msg((*i).socket,disp,ec);
06408 (*i).new_user++;
06409 } else {
06410 string disp;
06411 if(got)
06412 disp=lang_get_string(1,(*i).lang,57)+eol;
06413 else
06414 disp=lang_get_string(1,(*i).lang,58)+eol;
06415 int ec=0;
06416 dcc_send_msg((*i).socket,disp,ec);
06417 if(got)
06418 (*i).user_channel.on_notice=p;
06419 else {
06420 (*i).new_user--;
06421 return;
06422 }
06423 (*i).new_user++;
06424 }
06425 }
06426
06427
06428 if((*i).new_user==502) {
06429 string disp;
06430 int ec=0;
06431
06432 disp=lang_get_string(1,(*i).lang,246)+eol;
06433 dcc_send_msg((*i).socket,disp,ec);
06434
06435 vector<string>::iterator i3;
06436 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
06437 if(!(*i3).compare("*"))
06438 continue;
06439 disp=*i3+eol;
06440 dcc_send_msg((*i).socket,disp,ec);
06441 }
06442
06443 disp=(string)"----------------"+eol;
06444 dcc_send_msg((*i).socket,disp,ec);
06445
06446 disp=lang_get_string(1,(*i).lang,247)+eol;
06447 dcc_send_msg((*i).socket,disp,ec);
06448
06449 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol;
06450 dcc_send_msg((*i).socket,disp,ec);
06451
06452 disp=lang_get_string(1,(*i).lang,56)+eol;
06453 dcc_send_msg((*i).socket,disp,ec);
06454
06455 (*i).new_user++;
06456 }
06457 if((*i).new_user==503) {
06458 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_except)) {
06459 int ec=0;
06460 string disp=lang_get_string(1,(*i).lang,592)+eol;
06461 dcc_send_msg((*i).socket,disp,ec);
06462 (*i).new_user++;
06463 return;
06464 }
06465
06466 string p=dcc_get_line((*i).in_buff);
06467 if(!p.compare(""))
06468 return;
06469 vector<string>::iterator i1;
06470 bool got=false;
06471 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
06472 if(!(*i1).compare(p))
06473 got=true;
06474 if(!p.compare(".")) {
06475 got=true;
06476 string disp=lang_get_string(1,(*i).lang,57)+eol;
06477 int ec=0;
06478 dcc_send_msg((*i).socket,disp,ec);
06479 (*i).new_user++;
06480 } else {
06481 string disp;
06482 if(got)
06483 disp=lang_get_string(1,(*i).lang,57)+eol;
06484 else
06485 disp=lang_get_string(1,(*i).lang,58)+eol;
06486 int ec=0;
06487 dcc_send_msg((*i).socket,disp,ec);
06488 if(got)
06489 (*i).user_channel.on_except=p;
06490 else {
06491 (*i).new_user--;
06492 return;
06493 }
06494 (*i).new_user++;
06495 }
06496 }
06497
06498 if((*i).new_user==504) {
06499 string disp;
06500 int ec=0;
06501
06502 disp=lang_get_string(1,(*i).lang,248)+eol;
06503 dcc_send_msg((*i).socket,disp,ec);
06504
06505 vector<string>::iterator i3;
06506 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
06507 if(!(*i3).compare("*"))
06508 continue;
06509 disp=*i3+eol;
06510 dcc_send_msg((*i).socket,disp,ec);
06511 }
06512
06513 disp=(string)"----------------"+eol;
06514 dcc_send_msg((*i).socket,disp,ec);
06515
06516 disp=lang_get_string(1,(*i).lang,249)+eol;
06517 dcc_send_msg((*i).socket,disp,ec);
06518
06519 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol;
06520 dcc_send_msg((*i).socket,disp,ec);
06521
06522 disp=lang_get_string(1,(*i).lang,56)+eol;
06523 dcc_send_msg((*i).socket,disp,ec);
06524
06525 (*i).new_user++;
06526 }
06527 if((*i).new_user==505) {
06528 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_unexcept)) {
06529 int ec=0;
06530 string disp=lang_get_string(1,(*i).lang,592)+eol;
06531 dcc_send_msg((*i).socket,disp,ec);
06532 (*i).new_user++;
06533 return;
06534 }
06535
06536 string p=dcc_get_line((*i).in_buff);
06537 if(!p.compare(""))
06538 return;
06539 vector<string>::iterator i1;
06540 bool got=false;
06541 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
06542 if(!(*i1).compare(p))
06543 got=true;
06544 if(!p.compare(".")) {
06545 got=true;
06546 string disp=lang_get_string(1,(*i).lang,57)+eol;
06547 int ec=0;
06548 dcc_send_msg((*i).socket,disp,ec);
06549 (*i).new_user++;
06550 } else {
06551 string disp;
06552 if(got)
06553 disp=lang_get_string(1,(*i).lang,57)+eol;
06554 else
06555 disp=lang_get_string(1,(*i).lang,58)+eol;
06556 int ec=0;
06557 dcc_send_msg((*i).socket,disp,ec);
06558 if(got)
06559 (*i).user_channel.on_unexcept=p;
06560 else {
06561 (*i).new_user--;
06562 return;
06563 }
06564 (*i).new_user++;
06565 }
06566 }
06567
06568 if((*i).new_user==506) {
06569 string disp;
06570 int ec=0;
06571
06572 disp=lang_get_string(1,(*i).lang,250)+eol;
06573 dcc_send_msg((*i).socket,disp,ec);
06574
06575 vector<string>::iterator i3;
06576 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
06577 if(!(*i3).compare("*"))
06578 continue;
06579 disp=*i3+eol;
06580 dcc_send_msg((*i).socket,disp,ec);
06581 }
06582
06583 disp=(string)"----------------"+eol;
06584 dcc_send_msg((*i).socket,disp,ec);
06585
06586 disp=lang_get_string(1,(*i).lang,251)+eol;
06587 dcc_send_msg((*i).socket,disp,ec);
06588
06589 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol;
06590 dcc_send_msg((*i).socket,disp,ec);
06591
06592 disp=lang_get_string(1,(*i).lang,56)+eol;
06593 dcc_send_msg((*i).socket,disp,ec);
06594
06595 (*i).new_user++;
06596 }
06597 if((*i).new_user==507) {
06598 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_invite)) {
06599 int ec=0;
06600 string disp=lang_get_string(1,(*i).lang,592)+eol;
06601 dcc_send_msg((*i).socket,disp,ec);
06602 (*i).new_user++;
06603 return;
06604 }
06605
06606 string p=dcc_get_line((*i).in_buff);
06607 if(!p.compare(""))
06608 return;
06609 vector<string>::iterator i1;
06610 bool got=false;
06611 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
06612 if(!(*i1).compare(p))
06613 got=true;
06614 if(!p.compare(".")) {
06615 got=true;
06616 string disp=lang_get_string(1,(*i).lang,57)+eol;
06617 int ec=0;
06618 dcc_send_msg((*i).socket,disp,ec);
06619 (*i).new_user++;
06620 } else {
06621 string disp;
06622 if(got)
06623 disp=lang_get_string(1,(*i).lang,57)+eol;
06624 else
06625 disp=lang_get_string(1,(*i).lang,58)+eol;
06626 int ec=0;
06627 dcc_send_msg((*i).socket,disp,ec);
06628 if(got)
06629 (*i).user_channel.on_invite=p;
06630 else {
06631 (*i).new_user--;
06632 return;
06633 }
06634 (*i).new_user++;
06635 }
06636 }
06637
06638 if((*i).new_user==508) {
06639 string disp;
06640 int ec=0;
06641
06642 disp=lang_get_string(1,(*i).lang,252)+eol;
06643 dcc_send_msg((*i).socket,disp,ec);
06644
06645 vector<string>::iterator i3;
06646 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
06647 if(!(*i3).compare("*"))
06648 continue;
06649 disp=*i3+eol;
06650 dcc_send_msg((*i).socket,disp,ec);
06651 }
06652
06653 disp=(string)"----------------"+eol;
06654 dcc_send_msg((*i).socket,disp,ec);
06655
06656 disp=lang_get_string(1,(*i).lang,253)+eol;
06657 dcc_send_msg((*i).socket,disp,ec);
06658
06659 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol;
06660 dcc_send_msg((*i).socket,disp,ec);
06661
06662 disp=lang_get_string(1,(*i).lang,56)+eol;
06663 dcc_send_msg((*i).socket,disp,ec);
06664
06665 (*i).new_user++;
06666 }
06667 if((*i).new_user==509) {
06668 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_uninvite)) {
06669 int ec=0;
06670 string disp=lang_get_string(1,(*i).lang,592)+eol;
06671 dcc_send_msg((*i).socket,disp,ec);
06672 (*i).new_user++;
06673 return;
06674 }
06675
06676 string p=dcc_get_line((*i).in_buff);
06677 if(!p.compare(""))
06678 return;
06679 vector<string>::iterator i1;
06680 bool got=false;
06681 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
06682 if(!(*i1).compare(p))
06683 got=true;
06684 if(!p.compare(".")) {
06685 got=true;
06686 string disp=lang_get_string(1,(*i).lang,57)+eol;
06687 int ec=0;
06688 dcc_send_msg((*i).socket,disp,ec);
06689 (*i).new_user++;
06690 } else {
06691 string disp;
06692 if(got)
06693 disp=lang_get_string(1,(*i).lang,57)+eol;
06694 else
06695 disp=lang_get_string(1,(*i).lang,58)+eol;
06696 int ec=0;
06697 dcc_send_msg((*i).socket,disp,ec);
06698 if(got)
06699 (*i).user_channel.on_uninvite=p;
06700 else {
06701 (*i).new_user--;
06702 return;
06703 }
06704 (*i).new_user++;
06705 }
06706 }
06707
06708 if((*i).new_user==510) {
06709 string disp;
06710 int ec=0;
06711
06712 disp=lang_get_string(1,(*i).lang,254)+eol;
06713 dcc_send_msg((*i).socket,disp,ec);
06714
06715 vector<string>::iterator i3;
06716 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
06717 if(!(*i3).compare("*"))
06718 continue;
06719 disp=*i3+eol;
06720 dcc_send_msg((*i).socket,disp,ec);
06721 }
06722
06723 disp=(string)"----------------"+eol;
06724 dcc_send_msg((*i).socket,disp,ec);
06725
06726 disp=lang_get_string(1,(*i).lang,255)+eol;
06727 dcc_send_msg((*i).socket,disp,ec);
06728
06729 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol;
06730 dcc_send_msg((*i).socket,disp,ec);
06731
06732 disp=lang_get_string(1,(*i).lang,56)+eol;
06733 dcc_send_msg((*i).socket,disp,ec);
06734
06735 (*i).new_user++;
06736 }
06737 if((*i).new_user==511) {
06738 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_not_invited)) {
06739 int ec=0;
06740 string disp=lang_get_string(1,(*i).lang,592)+eol;
06741 dcc_send_msg((*i).socket,disp,ec);
06742 (*i).new_user++;
06743 return;
06744 }
06745
06746 string p=dcc_get_line((*i).in_buff);
06747 if(!p.compare(""))
06748 return;
06749 vector<string>::iterator i1;
06750 bool got=false;
06751 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
06752 if(!(*i1).compare(p))
06753 got=true;
06754 if(!p.compare(".")) {
06755 got=true;
06756 string disp=lang_get_string(1,(*i).lang,57)+eol;
06757 int ec=0;
06758 dcc_send_msg((*i).socket,disp,ec);
06759 (*i).new_user++;
06760 } else {
06761 string disp;
06762 if(got)
06763 disp=lang_get_string(1,(*i).lang,57)+eol;
06764 else
06765 disp=lang_get_string(1,(*i).lang,58)+eol;
06766 int ec=0;
06767 dcc_send_msg((*i).socket,disp,ec);
06768 if(got)
06769 (*i).user_channel.on_not_invited=p;
06770 else {
06771 (*i).new_user--;
06772 return;
06773 }
06774 (*i).new_user++;
06775 }
06776 }
06777
06778
06779 if((*i).new_user==512) {
06780 string disp;
06781 int ec=0;
06782
06783 disp=lang_get_string(1,(*i).lang,594)+eol;
06784 dcc_send_msg((*i).socket,disp,ec);
06785
06786 vector<string>::iterator i3;
06787 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
06788 if(!(*i3).compare("*"))
06789 continue;
06790 disp=*i3+eol;
06791 dcc_send_msg((*i).socket,disp,ec);
06792 }
06793
06794 disp=(string)"----------------"+eol;
06795 dcc_send_msg((*i).socket,disp,ec);
06796
06797 disp=lang_get_string(1,(*i).lang,595)+eol;
06798 dcc_send_msg((*i).socket,disp,ec);
06799
06800 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol;
06801 dcc_send_msg((*i).socket,disp,ec);
06802
06803 disp=lang_get_string(1,(*i).lang,56)+eol;
06804 dcc_send_msg((*i).socket,disp,ec);
06805
06806 (*i).new_user++;
06807 }
06808 if((*i).new_user==513) {
06809 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_not_in_reop)) {
06810 int ec=0;
06811 string disp=lang_get_string(1,(*i).lang,592)+eol;
06812 dcc_send_msg((*i).socket,disp,ec);
06813 (*i).new_user++;
06814 return;
06815 }
06816
06817 string p=dcc_get_line((*i).in_buff);
06818 if(!p.compare(""))
06819 return;
06820 vector<string>::iterator i1;
06821 bool got=false;
06822 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
06823 if(!(*i1).compare(p))
06824 got=true;
06825 if(!p.compare(".")) {
06826 got=true;
06827 string disp=lang_get_string(1,(*i).lang,57)+eol;
06828 int ec=0;
06829 dcc_send_msg((*i).socket,disp,ec);
06830 (*i).new_user++;
06831 } else {
06832 string disp;
06833 if(got)
06834 disp=lang_get_string(1,(*i).lang,57)+eol;
06835 else
06836 disp=lang_get_string(1,(*i).lang,58)+eol;
06837 int ec=0;
06838 dcc_send_msg((*i).socket,disp,ec);
06839 if(got)
06840 (*i).user_channel.on_not_in_reop=p;
06841 else {
06842 (*i).new_user--;
06843 return;
06844 }
06845 (*i).new_user++;
06846 }
06847 }
06848
06849
06850 if((*i).new_user==514) {
06851 string disp;
06852 int ec=0;
06853
06854 disp=lang_get_string(1,(*i).lang,596)+eol;
06855 dcc_send_msg((*i).socket,disp,ec);
06856
06857 vector<string>::iterator i3;
06858 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
06859 if(!(*i3).compare("*"))
06860 continue;
06861 disp=*i3+eol;
06862 dcc_send_msg((*i).socket,disp,ec);
06863 }
06864
06865 disp=(string)"----------------"+eol;
06866 dcc_send_msg((*i).socket,disp,ec);
06867
06868 disp=lang_get_string(1,(*i).lang,597)+eol;
06869 dcc_send_msg((*i).socket,disp,ec);
06870
06871 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol;
06872 dcc_send_msg((*i).socket,disp,ec);
06873
06874 disp=lang_get_string(1,(*i).lang,56)+eol;
06875 dcc_send_msg((*i).socket,disp,ec);
06876
06877 (*i).new_user++;
06878 }
06879 if((*i).new_user==515) {
06880 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_reop)) {
06881 int ec=0;
06882 string disp=lang_get_string(1,(*i).lang,592)+eol;
06883 dcc_send_msg((*i).socket,disp,ec);
06884 (*i).new_user++;
06885 return;
06886 }
06887
06888 string p=dcc_get_line((*i).in_buff);
06889 if(!p.compare(""))
06890 return;
06891 vector<string>::iterator i1;
06892 bool got=false;
06893 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
06894 if(!(*i1).compare(p))
06895 got=true;
06896 if(!p.compare(".")) {
06897 got=true;
06898 string disp=lang_get_string(1,(*i).lang,57)+eol;
06899 int ec=0;
06900 dcc_send_msg((*i).socket,disp,ec);
06901 (*i).new_user++;
06902 } else {
06903 string disp;
06904 if(got)
06905 disp=lang_get_string(1,(*i).lang,57)+eol;
06906 else
06907 disp=lang_get_string(1,(*i).lang,58)+eol;
06908 int ec=0;
06909 dcc_send_msg((*i).socket,disp,ec);
06910 if(got)
06911 (*i).user_channel.on_reop=p;
06912 else {
06913 (*i).new_user--;
06914 return;
06915 }
06916 (*i).new_user++;
06917 }
06918 }
06919
06920
06921 if((*i).new_user==516) {
06922 string disp;
06923 int ec=0;
06924
06925 disp=lang_get_string(1,(*i).lang,564)+eol;
06926 dcc_send_msg((*i).socket,disp,ec);
06927
06928 vector<string>::iterator i3;
06929 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
06930 if(!(*i3).compare("*"))
06931 continue;
06932 disp=*i3+eol;
06933 dcc_send_msg((*i).socket,disp,ec);
06934 }
06935
06936 disp=(string)"----------------"+eol;
06937 dcc_send_msg((*i).socket,disp,ec);
06938
06939 disp=lang_get_string(1,(*i).lang,565)+eol;
06940 dcc_send_msg((*i).socket,disp,ec);
06941
06942 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol;
06943 dcc_send_msg((*i).socket,disp,ec);
06944
06945 disp=lang_get_string(1,(*i).lang,56)+eol;
06946 dcc_send_msg((*i).socket,disp,ec);
06947
06948 (*i).new_user++;
06949 }
06950 if((*i).new_user==517) {
06951 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_other_mode)) {
06952 int ec=0;
06953 string disp=lang_get_string(1,(*i).lang,592)+eol;
06954 dcc_send_msg((*i).socket,disp,ec);
06955 (*i).new_user++;
06956 return;
06957 }
06958
06959 string p=dcc_get_line((*i).in_buff);
06960 if(!p.compare(""))
06961 return;
06962 vector<string>::iterator i1;
06963 bool got=false;
06964 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
06965 if(!(*i1).compare(p))
06966 got=true;
06967 if(!p.compare(".")) {
06968 got=true;
06969 string disp=lang_get_string(1,(*i).lang,57)+eol;
06970 int ec=0;
06971 dcc_send_msg((*i).socket,disp,ec);
06972 (*i).new_user++;
06973 } else {
06974 string disp;
06975 if(got)
06976 disp=lang_get_string(1,(*i).lang,57)+eol;
06977 else
06978 disp=lang_get_string(1,(*i).lang,58)+eol;
06979 int ec=0;
06980 dcc_send_msg((*i).socket,disp,ec);
06981 if(got)
06982 (*i).user_channel.on_other_mode=p;
06983 else {
06984 (*i).new_user--;
06985 return;
06986 }
06987 (*i).new_user++;
06988 }
06989 }
06990 if((*i).new_user==518) {
06991 (*i).new_user=44;
06992 }
06993
06994 if((*i).new_user==1000 || (*i).new_user==1100) {
06995 if((*i).access_grant_partyline) {
06996 string disp=lang_get_string(1,(*i).lang,542)+eol;
06997 int ec=0;
06998 dcc_send_msg((*i).socket,disp,ec);
06999 (*i).new_user++;
07000 } else {
07001 (*i).new_user+=2;
07002 }
07003 }
07004 if((*i).new_user==1001 || (*i).new_user==1101) {
07005 string p=dcc_get_line((*i).in_buff);
07006 if(!p.compare(""))
07007 return;
07008 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) {
07009 string disp=lang_get_string(1,(*i).lang,542)+eol;
07010 int ec=0;
07011 dcc_send_msg((*i).socket,disp,ec);
07012 } else {
07013 if(!p.compare("n") || !p.compare("N")) {
07014 (*i).user_access_grant_partyline=false;
07015 (*i).new_user++;
07016 return;
07017 } else {
07018 (*i).user_access_grant_partyline=true;
07019 (*i).new_user++;
07020 return;
07021 }
07022 }
07023 }
07024 if((*i).new_user==1002) {
07025 (*i).new_user=100;
07026 return;
07027 }
07028 if((*i).new_user==1102) {
07029 (*i).new_user=200;
07030 return;
07031 }
07032
07033
07034 if((*i).new_user==1200) {
07035 string p=dcc_get_line((*i).in_buff);
07036 if(!p.compare(""))
07037 return;
07038 if(p.compare(".")) {
07039 vector<string>::iterator i1;
07040 bool got=false;
07041 for(i1=(*i).access_grant_proc_groups.begin(); i1!=(*i).access_grant_proc_groups.end(); i1++)
07042 if(!(*i1).compare(p))
07043 got=true;
07044 string disp;
07045 if(got)
07046 disp=lang_get_string(1,(*i).lang,46)+eol;
07047 else
07048 disp=lang_get_string(1,(*i).lang,47)+eol;
07049 int ec=0;
07050 dcc_send_msg((*i).socket,disp,ec);
07051 p=(string)"\""+p+"\"";
07052 if(got)
07053 (*i).user_access_usage_proc_groups.push_back(p);
07054 } else {
07055 string disp=lang_get_string(1,(*i).lang,51)+eol;
07056 int ec=0;
07057 dcc_send_msg((*i).socket,disp,ec);
07058 vector<string>::iterator i1;
07059 for(i1=(*i).access_to_channel.begin(); i1!=(*i).access_to_channel.end(); i1++) {
07060 disp=*i1+eol;
07061 dcc_send_msg((*i).socket,disp,ec);
07062 }
07063 disp=lang_get_string(1,(*i).lang,45)+eol;
07064 dcc_send_msg((*i).socket,disp,ec);
07065 (*i).new_user=12;
07066 return;
07067 }
07068 }
07069 }
07070
07071
07072
07073
07074
07075
07076
07077
07078
07079
07080
07081 string dcc_loop_filesystem_disp_rights(string lang, s_access& access, string eol)
07082 {
07083 string disp;
07084 if(access.all_users)
07085 disp+=lang_get_string(1,lang,294)+eol;
07086 else
07087 if(!access.all_on_channel.empty()) {
07088 disp+=lang_subst(lang_get_string(1,lang,295),(string)"*"+access.all_on_channel);
07089 if(access.also_unknown)
07090 disp+=(string)" "+lang_get_string(1,lang,474);
07091 disp+=eol;
07092 } else
07093 disp+=lang_subst(lang_get_string(1,lang,295),access.user_name)+eol;
07094 disp+=" ";
07095 bool plus=false;
07096 if(access.owner) {
07097 disp+=lang_get_string(1,lang,296);
07098 plus=true;
07099 }
07100 if(access.read) {
07101 if(plus)
07102 disp+=lang_get_string(1,lang,301);
07103 disp+=lang_get_string(1,lang,297);
07104 plus=true;
07105 }
07106 if(access.del) {
07107 if(plus)
07108 disp+=lang_get_string(1,lang,301);
07109 disp+=lang_get_string(1,lang,298);
07110 plus=true;
07111 }
07112 if(access.notify_owner) {
07113 if(plus)
07114 disp+=lang_get_string(1,lang,301);
07115 disp+=lang_get_string(1,lang,299);
07116 plus=true;
07117 }
07118 if(access.notify_user) {
07119 if(plus)
07120 disp+=lang_get_string(1,lang,301);
07121 disp+=lang_get_string(1,lang,300);
07122 plus=true;
07123 }
07124 if(access.secure) {
07125 if(plus)
07126 disp+=lang_get_string(1,lang,301);
07127 disp+=lang_get_string(1,lang,330);
07128 plus=true;
07129 }
07130 if(!plus) {
07131 disp+=lang_get_string(1,lang,322);
07132 }
07133 disp+=eol;
07134
07135 return disp;
07136 }
07137
07138
07139
07140
07141
07142
07143
07144
07145
07146 void dcc_loop_filesystem(vector<s_dcc_client>::iterator i, string& eol)
07147 {
07148 if((*i).filesystem==0)
07149 return;
07150
07151 if((*i).filesystem==1) {
07152 vector<s_dcc_notify> notify;
07153 filesys_dcc_check_for_notifies((*i).as_in_logic,(*i).u,(*i).chs,"",notify,true,(*i).lang,eol);
07154 if(!notify.empty()) {
07155 filesys_dcc_drop_notifies((*i).as_in_logic,false);
07156
07157 string files;
07158 string msgs;
07159 string incomplete_files;
07160
07161 vector<s_dcc_notify>::iterator i1;
07162 for(i1=notify.begin(); i1!=notify.end(); i1++) {
07163 if((*i1).unpublished) {
07164 if(!files.empty())
07165 files+=", ";
07166 files+="\"";
07167 files+=(*i1).name;
07168 files+="\"";
07169 }
07170 if((*i1).incomplete) {
07171 if(!incomplete_files.empty())
07172 incomplete_files+=", ";
07173 incomplete_files+="\"";
07174 incomplete_files+=(*i1).name;
07175 incomplete_files+="\"";
07176 }
07177 if((*i1).notify_owner || (*i1).notify_user || (*i1).secure_notify_owner || (*i1).secure_notify_user)
07178 msgs+=(*i1).message;
07179 }
07180
07181 string disp=lang_get_string(1,(*i).lang,279)+eol;
07182 disp+=files;
07183 disp+=eol;
07184 disp+=lang_get_string(1,(*i).lang,401)+eol;
07185 disp+=incomplete_files;
07186 disp+=eol;
07187 disp+=lang_get_string(1,(*i).lang,324)+eol;
07188 disp+=lang_get_string(1,(*i).lang,280)+eol;
07189 disp+=lang_get_string(1,(*i).lang,281)+eol;
07190 disp+=msgs;
07191 disp+=lang_get_string(1,(*i).lang,469)+eol;
07192 int ec=0;
07193 dcc_send_msg((*i).socket,disp,ec);
07194 }
07195
07196 (*i).filesystem=2;
07197 return;
07198 }
07199
07200 if((*i).filesystem==2) {
07201 string disp=lang_get_string(1,(*i).lang,690)+eol;
07202 int ec=0;
07203 dcc_send_msg((*i).socket,disp,ec);
07204
07205 (*i).filesystem=1000;
07206 }
07207
07208 string p=dcc_get_line((*i).in_buff);
07209
07210 string c=p;
07211 string cmd, param1, param2;
07212 int pos=0;
07213 for(unsigned int i1=0; i1<c.length(); i1++) {
07214 if((pos==0 || pos==1 || pos==2) && c[i1]==0x20) {
07215 pos++;
07216 continue;
07217 }
07218 if(pos==0)
07219 cmd+=c[i1];
07220 if(pos==1)
07221 param1+=c[i1];
07222 if(pos==2)
07223 param2+=c[i1];
07224 }
07225
07226 if((*i).filesystem==1000) {
07227 bool got_cmd=false;
07228 if(!cmd.compare(".editfile")) {
07229 got_cmd=true;
07230 if((*i).access_to_filesystem) {
07231 vector<s_file> files;
07232 filesys_dcc_filelist((*i).as_in_logic,files,true);
07233
07234 string files_;
07235
07236 bool got=false;
07237 string fn;
07238
07239 vector<s_file>::iterator i1;
07240 for(i1=files.begin(); i1!=files.end(); i1++) {
07241 if(!(*i1).public_name.compare(param1)) {
07242 got=true;
07243 fn=(*i1).public_name;
07244 break;
07245 }
07246 if(!files_.empty())
07247 files_+=", ";
07248 files_+="\"";
07249 files_+=(*i1).public_name;
07250 files_+="\"";
07251 }
07252
07253 if(!got) {
07254 string disp=lang_get_string(1,(*i).lang,279)+eol;
07255 disp+=files_;
07256 disp+=eol;
07257 disp+=lang_get_string(1,(*i).lang,324)+eol;
07258 disp+=lang_get_string(1,(*i).lang,280)+eol;
07259 disp+=lang_get_string(1,(*i).lang,281)+eol;
07260 disp+=lang_get_string(1,(*i).lang,282)+eol;
07261 int ec=0;
07262 dcc_send_msg((*i).socket,disp,ec);
07263 } else {
07264 (*i).fs.file.clear();
07265 if(filesys_dcc_get_file((*i).as_in_logic,fn,(*i).fs.file)) {
07266 vector<s_access>::iterator i1;
07267 string disp;
07268 for(i1=(*i).fs.file.access.begin(); i1!=(*i).fs.file.access.end(); i1++)
07269 disp+=dcc_loop_filesystem_disp_rights((*i).lang,*i1,eol);
07270 int ec=0;
07271 dcc_send_msg((*i).socket,disp,ec);
07272
07273 (*i).fs.name=fn;
07274 (*i).filesystem=2000;
07275 } else {
07276 string disp=lang_get_string(1,(*i).lang,291)+eol;
07277 int ec=0;
07278 dcc_send_msg((*i).socket,disp,ec);
07279 (*i).filesystem=1000;
07280 }
07281 return;
07282 }
07283 } else {
07284 string disp=lang_get_string(1,(*i).lang,275)+eol;
07285 int ec=0;
07286 dcc_send_msg((*i).socket,disp,ec);
07287 }
07288 }
07289 if(!cmd.compare(".getfile")) {
07290 got_cmd=true;
07291 int dcc_group=atol(param2.c_str());
07292 int res=dcc_send_file(true,param1,irc_get_nick((*i).as_in_logic),dcc_group);
07293 string disp;
07294 switch(res) {
07295 case DCC_NO_SUCH_FILE:
07296 disp=lang_get_string(1,"en",334);
07297 break;
07298 case DCC_ACCESS_DENIED:
07299 disp=lang_get_string(1,"en",335);
07300 break;
07301 case DCC_IO_ERROR:
07302 disp=lang_get_string(1,"en",336);
07303 break;
07304 }
07305 if(!disp.empty()) {
07306 disp+=eol;
07307 int ec=0;
07308 dcc_send_msg((*i).socket,disp,ec);
07309 }
07310 return;
07311 }
07312 if(!cmd.compare(".finish")) {
07313 got_cmd=true;
07314 string disp=lang_get_string(1,(*i).lang,325)+eol;
07315 int ec=0;
07316 dcc_send_msg((*i).socket,disp,ec);
07317
07318 (*i).filesystem=0;
07319 return;
07320 }
07321 if(!cmd.compare(".del")) {
07322 got_cmd=true;
07323 if(param1.empty() || !param2.empty()) {
07324 string disp=lang_get_string(1,(*i).lang,403)+eol;
07325 int ec=0;
07326 dcc_send_msg((*i).socket,disp,ec);
07327 } else {
07328 int fs_ec=filesys_dcc_delete((*i).as_in_logic,param1);
07329 string disp;
07330 switch(fs_ec) {
07331 case DCC_NO_SUCH_FILE:
07332 disp=lang_get_string(1,(*i).lang,334)+eol;
07333 break;
07334 case DCC_ACCESS_DENIED:
07335 disp=lang_get_string(1,(*i).lang,404)+eol;
07336 break;
07337 case 0:
07338 disp=lang_get_string(1,(*i).lang,405)+eol;
07339 }
07340 if(!disp.empty()) {
07341 int ec=0;
07342 dcc_send_msg((*i).socket,disp,ec);
07343 }
07344 }
07345 (*i).filesystem=1000;
07346 return;
07347 }
07348 if(!cmd.compare(".list")) {
07349 got_cmd=true;
07350 vector<s_file> files;
07351 filesys_dcc_filelist((*i).as_in_logic,files,false);
07352 vector<s_file>::iterator i1;
07353 string msg;
07354 for(i1=files.begin(); i1!=files.end(); i1++) {
07355 if(!((*i1).is_owner((*i).as_in_logic) || (*i1).can_read((*i).as_in_logic) || (*i1).can_delete((*i).as_in_logic)))
07356 continue;
07357 if((*i1).is_owner((*i).as_in_logic))
07358 msg+=lang_get_string(1,(*i).lang,296);
07359 if((*i1).can_read((*i).as_in_logic))
07360 if(!msg.empty()) {
07361 msg+=" ";
07362 msg+=lang_get_string(1,(*i).lang,297);
07363 }
07364 else
07365 msg+=lang_get_string(1,(*i).lang,297);
07366 if((*i1).can_delete((*i).as_in_logic))
07367 if(!msg.empty()) {
07368 msg+=" ";
07369 msg+=lang_get_string(1,(*i).lang,298);
07370 }
07371 else
07372 msg+=lang_get_string(1,(*i).lang,298);
07373 if((*i1).file_type==ft_file)
07374 if(!msg.empty()) {
07375 msg+=" ";
07376 msg+=lang_get_string(1,(*i).lang,471);
07377 }
07378 else
07379 msg+=lang_get_string(1,(*i).lang,471);
07380 if((*i1).file_type==ft_message)
07381 if(!msg.empty()) {
07382 msg+=" ";
07383 msg+=lang_get_string(1,(*i).lang,472);
07384 }
07385 else
07386 msg+=lang_get_string(1,(*i).lang,472);
07387 msg+=" = ";
07388 msg+=(*i1).public_name+eol;
07389 }
07390 string disp;
07391 if(msg.empty())
07392 disp=lang_get_string(1,(*i).lang,470)+eol;
07393 else
07394 disp=msg;
07395 int ec=0;
07396 dcc_send_msg((*i).socket,disp,ec);
07397 }
07398 if(!cmd.compare(".help")) {
07399 got_cmd=true;
07400 string disp=lang_get_string(1,(*i).lang,691)+eol;
07401 int ec=0;
07402 dcc_send_msg((*i).socket,disp,ec);
07403 }
07404 if(!got_cmd && !cmd.empty()) {
07405 (*i).filesystem=2;
07406 return;
07407 }
07408 return;
07409 }
07410
07411
07412 if((*i).filesystem==2000) {
07413 string disp=lang_subst(lang_get_string(1,(*i).lang,283),(*i).fs.name)+eol;
07414 disp+=lang_get_string(1,(*i).lang,284)+eol;
07415 if((*i).fs.file.is_owner((*i).as_in_logic))
07416 disp+=lang_get_string(1,(*i).lang,285)+eol;
07417 else
07418 disp+=lang_get_string(1,(*i).lang,286)+eol;
07419 if((*i).fs.file.can_read((*i).as_in_logic))
07420 disp+=lang_get_string(1,(*i).lang,287)+eol;
07421 else
07422 disp+=lang_get_string(1,(*i).lang,288)+eol;
07423 if((*i).fs.file.can_delete((*i).as_in_logic))
07424 disp+=lang_get_string(1,(*i).lang,289)+eol;
07425 else
07426 disp+=lang_get_string(1,(*i).lang,290)+eol;
07427 disp+=lang_get_string(1,(*i).lang,291)+eol;
07428 int ec=0;
07429 dcc_send_msg((*i).socket,disp,ec);
07430
07431 (*i).filesystem++;
07432 return;
07433 }
07434
07435 if((*i).filesystem==2001) {
07436 if(p.empty())
07437 return;
07438
07439 if(!cmd.compare(".attr")) {
07440 if((*i).fs.file.is_owner((*i).as_in_logic)) {
07441 (*i).filesystem=3000;
07442 } else {
07443 string disp=lang_get_string(1,(*i).lang,286)+eol;
07444 int ec=0;
07445 dcc_send_msg((*i).socket,disp,ec);
07446 (*i).filesystem=2000;
07447 }
07448 return;
07449 }
07450
07451 if(!cmd.compare(".show")) {
07452 vector<s_access>::iterator i1;
07453 string disp;
07454 for(i1=(*i).fs.file.access.begin(); i1!=(*i).fs.file.access.end(); i1++)
07455 disp+=dcc_loop_filesystem_disp_rights((*i).lang,*i1,eol);
07456 int ec=0;
07457 dcc_send_msg((*i).socket,disp,ec);
07458 (*i).filesystem=2000;
07459 return;
07460 }
07461
07462 if(!cmd.compare(".expiration")) {
07463 vector<s_access>::iterator i1;
07464 (*i).filesystem=7000;
07465 return;
07466 }
07467
07468 if(!cmd.compare(".finish")) {
07469 string disp=lang_get_string(1,(*i).lang,319)+eol;
07470 int ec=0;
07471 dcc_send_msg((*i).socket,disp,ec);
07472
07473 (*i).filesystem=6000;
07474 return;
07475 }
07476 (*i).filesystem--;
07477 return;
07478 }
07479
07480
07481 if((*i).filesystem==3000) {
07482 string disp=lang_get_string(1,(*i).lang,293)+eol;
07483 vector<s_access>::iterator i1;
07484 for(i1=(*i).fs.file.access.begin(); i1!=(*i).fs.file.access.end(); i1++)
07485 disp+=dcc_loop_filesystem_disp_rights((*i).lang,*i1,eol);
07486 disp+=lang_get_string(1,(*i).lang,302)+eol;
07487 disp+=lang_get_string(1,(*i).lang,303)+eol;
07488 int ec=0;
07489 dcc_send_msg((*i).socket,disp,ec);
07490 (*i).filesystem++;
07491 return;
07492 }
07493 if((*i).filesystem==3001) {
07494 bool all_users=!param1.compare("*");
07495 bool got=false;
07496 bool got_cmd=false;
07497 if(!cmd.compare(".remove")) {
07498 got_cmd=true;
07499 if(all_users) {
07500 vector<s_access>::iterator i1;
07501 again2:
07502 for(i1=(*i).fs.file.access.begin(); i1!=(*i).fs.file.access.end(); i1++) {
07503 if((*i1).user_name.compare((*i).as_in_logic)) {
07504 (*i).fs.file.access.erase(i1);
07505 got=true;
07506 goto again2;
07507 }
07508 }
07509 } else {
07510 vector<s_access>::iterator i1;
07511 again1:
07512 for(i1=(*i).fs.file.access.begin(); i1!=(*i).fs.file.access.end(); i1++) {
07513 if(!(*i1).user_name.compare(param1)) {
07514 (*i).fs.file.access.erase(i1);
07515 got=true;
07516 goto again1;
07517 }
07518 }
07519 if(!got) {
07520 string disp=lang_get_string(1,(*i).lang,304)+eol;
07521 int ec=0;
07522 dcc_send_msg((*i).socket,disp,ec);
07523 (*i).filesystem=3000;
07524 } else
07525 (*i).filesystem=3000;
07526 }
07527 (*i).filesystem=3000;
07528 return;
07529 }
07530 if(!cmd.compare(".add")) {
07531 got_cmd=true;
07532 (*i).fs.new_access.clear();
07533 (*i).filesystem=5000;
07534 }
07535 if(!cmd.compare(".change")) {
07536 got_cmd=true;
07537 (*i).fs.new_access.clear();
07538 (*i).fs.new_access.all_users=all_users;
07539 if(!all_users)
07540 (*i).fs.new_access.user_name=param1;
07541 else
07542 (*i).fs.new_access.user_name="";
07543 vector<s_access>::iterator i1;
07544 bool got=false;
07545 for(i1=(*i).fs.file.access.begin(); i1!=(*i).fs.file.access.end(); i1++) {
07546 if(all_users && (*i1).all_users) {
07547 (*i).fs.new_access.del=(*i1).del;
07548 (*i).fs.new_access.notify_owner=(*i1).notify_owner;
07549 (*i).fs.new_access.notify_user=(*i1).notify_user;
07550 (*i).fs.new_access.owner=(*i1).owner;
07551 (*i).fs.new_access.read=(*i1).read;
07552 got=true;
07553 break;
07554 }
07555 if(!all_users && !(*i1).user_name.compare(param1)) {
07556 (*i).fs.new_access.del=(*i1).del;
07557 (*i).fs.new_access.notify_owner=(*i1).notify_owner;
07558 (*i).fs.new_access.notify_user=(*i1).notify_user;
07559 (*i).fs.new_access.owner=(*i1).owner;
07560 (*i).fs.new_access.read=(*i1).read;
07561 got=true;
07562 break;
07563 }
07564 }
07565 if(!got && !all_users) {
07566 string disp=lang_get_string(1,(*i).lang,304)+eol;
07567 int ec=0;
07568 dcc_send_msg((*i).socket,disp,ec);
07569 (*i).filesystem=3000;
07570 } else
07571 (*i).filesystem=4000;
07572 }
07573 if(!cmd.compare(".finish")) {
07574 got_cmd=true;
07575 string disp=lang_get_string(1,(*i).lang,319)+eol;
07576 int ec=0;
07577 dcc_send_msg((*i).socket,disp,ec);
07578
07579 (*i).filesystem=6000;
07580 return;
07581 }
07582 if(!cmd.compare(".addchan")) {
07583 got_cmd=true;
07584
07585
07586
07587
07588
07589
07590
07591
07592
07593
07594
07595
07596
07597
07598
07599
07600 bool got=false;
07601 vector<string>::iterator i1;
07602 for(i1=(*i).access_to_channel.begin(); i1!=(*i).access_to_channel.end(); i1++)
07603 if(!cmp_strings_case_insensitive(*i1,param1)) {
07604 got=true;
07605 break;
07606 }
07607 if(got) {
07608 (*i).fs.new_access.clear();
07609 (*i).fs.new_access.all_on_channel=param1;
07610 s_user u;
07611 vector<s_channel> chs;
07612 logic_partyline_get_user((*i).as_in_logic,u,chs);
07613 vector<s_channel>::iterator i2;
07614 bool can=(*i).access_to_can_send_unknown_users;
07615 for(i2=chs.begin(); i2!=chs.end(); i2++)
07616 if(!cmp_strings_case_insensitive((*i2).channel_name,p)) {
07617 can&=(*i2).can_send_unknown_users;
07618 break;
07619 }
07620 if(!(*i).access_to_can_send_unknown_users)
07621 can=false;
07622 if(!can) {
07623 (*i).filesystem=4000;
07624 } else {
07625 (*i).filesystem=8000;
07626 }
07627 } else {
07628 (*i).fs.new_access.all_on_channel="";
07629 (*i).fs.new_access.also_unknown=false;
07630 string disp=lang_get_string(1,(*i).lang,323)+eol;
07631 int ec=0;
07632 dcc_send_msg((*i).socket,disp,ec);
07633 return;
07634 }
07635 return;
07636 }
07637 if(!got_cmd && !cmd.empty()) {
07638 (*i).filesystem=3000;
07639 return;
07640 }
07641 return;
07642 }
07643
07644
07645 if((*i).filesystem==4000) {
07646 string disp=lang_get_string(1,(*i).lang,305)+eol;
07647 disp+=dcc_loop_filesystem_disp_rights((*i).lang,(*i).fs.new_access,eol);
07648 disp+=lang_get_string(1,(*i).lang,306)+eol;
07649 int ec=0;
07650 dcc_send_msg((*i).socket,disp,ec);
07651 (*i).filesystem++;
07652 return;
07653 }
07654
07655 if((*i).filesystem==4001) {
07656 if(p.empty())
07657 return;
07658
07659 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) {
07660 string disp=lang_get_string(1,(*i).lang,306)+eol;
07661 int ec=0;
07662 dcc_send_msg((*i).socket,disp,ec);
07663 } else {
07664 if(!p.compare("n") || !p.compare("N")) {
07665 (*i).fs.new_access.owner=false;
07666 string disp=lang_get_string(1,(*i).lang,307)+eol;
07667 int ec=0;
07668 dcc_send_msg((*i).socket,disp,ec);
07669 (*i).filesystem++;
07670 } else {
07671 (*i).fs.new_access.owner=true;
07672 string disp=lang_get_string(1,(*i).lang,307)+eol;
07673 int ec=0;
07674 dcc_send_msg((*i).socket,disp,ec);
07675 (*i).filesystem++;
07676 }
07677 }
07678 return;
07679 }
07680 if((*i).filesystem==4002) {
07681 if(p.empty())
07682 return;
07683 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) {
07684 string disp=lang_get_string(1,(*i).lang,307)+eol;
07685 int ec=0;
07686 dcc_send_msg((*i).socket,disp,ec);
07687 } else {
07688 if(!p.compare("n") || !p.compare("N")) {
07689 (*i).fs.new_access.read=false;
07690 string disp=lang_get_string(1,(*i).lang,308)+eol;
07691 int ec=0;
07692 dcc_send_msg((*i).socket,disp,ec);
07693 (*i).filesystem++;
07694 } else {
07695 (*i).fs.new_access.read=true;
07696 string disp=lang_get_string(1,(*i).lang,308)+eol;
07697 int ec=0;
07698 dcc_send_msg((*i).socket,disp,ec);
07699 (*i).filesystem++;
07700 }
07701 }
07702 return;
07703 }
07704 if((*i).filesystem==4003) {
07705 if(p.empty())
07706 return;
07707 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) {
07708 string disp=lang_get_string(1,(*i).lang,308)+eol;
07709 int ec=0;
07710 dcc_send_msg((*i).socket,disp,ec);
07711 } else {
07712 if(!p.compare("n") || !p.compare("N")) {
07713 (*i).fs.new_access.del=false;
07714 string disp=lang_get_string(1,(*i).lang,309)+eol;
07715 int ec=0;
07716 dcc_send_msg((*i).socket,disp,ec);
07717 (*i).filesystem++;
07718 } else {
07719 (*i).fs.new_access.del=true;
07720 string disp=lang_get_string(1,(*i).lang,309)+eol;
07721 int ec=0;
07722 dcc_send_msg((*i).socket,disp,ec);
07723 (*i).filesystem++;
07724 }
07725 }
07726 return;
07727 }
07728 if((*i).filesystem==4004) {
07729 if(p.empty())
07730 return;
07731 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) {
07732 string disp=lang_get_string(1,(*i).lang,309)+eol;
07733 int ec=0;
07734 dcc_send_msg((*i).socket,disp,ec);
07735 } else {
07736 if(!p.compare("n") || !p.compare("N")) {
07737 (*i).fs.new_access.notify_owner=false;
07738 string disp=lang_get_string(1,(*i).lang,310)+eol;
07739 int ec=0;
07740 dcc_send_msg((*i).socket,disp,ec);
07741 (*i).filesystem++;
07742 } else {
07743 (*i).fs.new_access.notify_owner=true;
07744 string disp=lang_get_string(1,(*i).lang,310)+eol;
07745 int ec=0;
07746 dcc_send_msg((*i).socket,disp,ec);
07747 (*i).filesystem++;
07748 }
07749 }
07750 return;
07751 }
07752
07753
07754 if((*i).filesystem==4005) {
07755 if(p.empty())
07756 return;
07757 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) {
07758 string disp=lang_get_string(1,(*i).lang,310)+eol;
07759 int ec=0;
07760 dcc_send_msg((*i).socket,disp,ec);
07761 } else {
07762 if(!p.compare("n") || !p.compare("N")) {
07763 (*i).fs.new_access.notify_user=false;
07764 if(!(*i).fs.new_access.notify_user) {
07765 (*i).fs.new_access.notify_user_message="";
07766 (*i).filesystem+=2;
07767 }
07768 string disp=lang_get_string(1,(*i).lang,326)+eol;
07769 int ec=0;
07770 dcc_send_msg((*i).socket,disp,ec);
07771 (*i).filesystem++;
07772 } else {
07773 (*i).fs.new_access.notify_user=true;
07774 string disp=lang_get_string(1,(*i).lang,326)+eol;
07775 int ec=0;
07776 dcc_send_msg((*i).socket,disp,ec);
07777 (*i).filesystem++;
07778 }
07779 }
07780 return;
07781 }
07782 if((*i).filesystem==4006) {
07783 if(p.empty())
07784 return;
07785 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) {
07786 string disp=lang_get_string(1,(*i).lang,326)+eol;
07787 int ec=0;
07788 dcc_send_msg((*i).socket,disp,ec);
07789 } else {
07790 if(!p.compare("n") || !p.compare("N")) {
07791 (*i).fs.new_access.secure=false;
07792 if(!(*i).fs.new_access.notify_owner || (*i).fs.file.file_type==ft_message) {
07793 (*i).fs.new_access.notify_owner_message="";
07794 (*i).filesystem+=3;
07795 return;
07796 }
07797 string disp=lang_get_string(1,(*i).lang,327)+eol;
07798 disp+=lang_get_string(1,(*i).lang,349)+eol;
07799 disp+=lang_get_string(1,(*i).lang,350)+eol;
07800 disp+=lang_get_string(1,(*i).lang,353)+eol;
07801 int ec=0;
07802 dcc_send_msg((*i).socket,disp,ec);
07803 (*i).filesystem++;
07804 } else {
07805 (*i).fs.new_access.secure=true;
07806 if(!(*i).fs.new_access.notify_owner) {
07807 (*i).fs.new_access.notify_owner_message="";
07808 (*i).filesystem+=3;
07809 return;
07810 }
07811 string disp=lang_get_string(1,(*i).lang,327)+eol;
07812 disp+=lang_get_string(1,(*i).lang,349)+eol;
07813 disp+=lang_get_string(1,(*i).lang,350)+eol;
07814 disp+=lang_get_string(1,(*i).lang,353)+eol;
07815 int ec=0;
07816 dcc_send_msg((*i).socket,disp,ec);
07817 (*i).filesystem++;
07818 }
07819 }
07820 return;
07821 }
07822
07823 if((*i).filesystem==4007) {
07824 if(p.empty())
07825 return;
07826 if(!p.compare(".")) {
07827 string disp=lang_get_string(1,(*i).lang,328)+eol;
07828 int ec=0;
07829 dcc_send_msg((*i).socket,disp,ec);
07830 if(!(*i).fs.new_access.notify_owner ) {
07831 (*i).filesystem+=2;
07832 return;
07833 }
07834 (*i).filesystem++;
07835 disp=lang_get_string(1,(*i).lang,329)+eol;
07836 disp+=lang_get_string(1,(*i).lang,349)+eol;
07837 disp+=lang_get_string(1,(*i).lang,351)+eol;
07838 disp+=lang_get_string(1,(*i).lang,352)+eol;
07839 disp+=lang_get_string(1,(*i).lang,353)+eol;
07840 dcc_send_msg((*i).socket,disp,ec);
07841 return;
07842 } else {
07843 (*i).fs.new_access.notify_owner_message+=p;
07844 (*i).fs.new_access.notify_owner_message+="\n";
07845 }
07846 return;
07847 }
07848
07849 if((*i).filesystem==4008) {
07850 if(p.empty())
07851 return;
07852 if(!p.compare(".")) {
07853 string disp=lang_get_string(1,(*i).lang,328)+eol;
07854 int ec=0;
07855 dcc_send_msg((*i).socket,disp,ec);
07856 (*i).filesystem++;
07857 return;
07858 } else {
07859 (*i).fs.new_access.notify_user_message+=p;
07860 (*i).fs.new_access.notify_user_message+="\n";
07861 }
07862 return;
07863 }
07864
07865
07866 if((*i).filesystem==4009) {
07867 string disp=lang_get_string(1,(*i).lang,311)+eol;
07868 disp+=dcc_loop_filesystem_disp_rights((*i).lang,(*i).fs.new_access,eol);
07869 disp+=lang_get_string(1,(*i).lang,312)+eol;
07870 int ec=0;
07871 dcc_send_msg((*i).socket,disp,ec);
07872 (*i).filesystem++;
07873 return;
07874 }
07875 if((*i).filesystem==4010) {
07876 if(p.empty())
07877 return;
07878 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) {
07879 string disp=lang_get_string(1,(*i).lang,311)+eol;
07880 disp+=dcc_loop_filesystem_disp_rights((*i).lang,(*i).fs.new_access,eol);
07881 disp+=lang_get_string(1,(*i).lang,312)+eol;
07882 int ec=0;
07883 dcc_send_msg((*i).socket,disp,ec);
07884 } else {
07885 if(!p.compare("n") || !p.compare("N")) {
07886 string disp=lang_get_string(1,(*i).lang,314)+eol;
07887 int ec=0;
07888 dcc_send_msg((*i).socket,disp,ec);
07889 (*i).filesystem=2000;
07890 } else {
07891 if((*i).fs.new_access.user_name.length()>1 && (*i).fs.new_access.user_name[0]=='*') {
07892
07893 string chan;
07894 if((*i).fs.new_access.all_on_channel.empty())
07895 chan=(*i).fs.new_access.user_name;
07896 else
07897 chan=(*i).fs.new_access.all_on_channel;
07898 chan.erase(0,1);
07899 vector<string> users;
07900 map<string,string> vars;
07901 vector<s_channel>::iterator i2;
07902 for(i2=r_channels.begin(); i2!=r_channels.end(); i2++)
07903 if(!cmp_strings_case_insensitive(logic_eval((*i2).channel_name,vars),chan) && !(*i2).host_unknown)
07904 users.push_back((*i2).username);
07905
07906 vector<string>::iterator i3;
07907 for(i3=users.begin(); i3!=users.end(); i3++) {
07908 vector<s_access>::iterator i1;
07909 again5:
07910 for(i1=(*i).fs.file.access.begin(); i1!=(*i).fs.file.access.end(); i1++) {
07911 if((*i1).user_name.compare((*i).as_in_logic) && !(*i1).user_name.compare(*i3)) {
07912 (*i).fs.file.access.erase(i1);
07913 goto again5;
07914 }
07915 }
07916 }
07917 for(i3=users.begin(); i3!=users.end(); i3++) {
07918 (*i).fs.new_access.user_name=*i3;
07919 (*i).fs.file.access.push_back((*i).fs.new_access);
07920 }
07921 } else
07922 if(!(*i).fs.new_access.all_on_channel.empty()) {
07923 (*i).fs.file.access.push_back((*i).fs.new_access);
07924 } else
07925 if((*i).fs.new_access.all_users) {
07926 vector<s_access>::iterator i1;
07927 again4:
07928 for(i1=(*i).fs.file.access.begin(); i1!=(*i).fs.file.access.end(); i1++) {
07929 if((*i1).user_name.compare((*i).as_in_logic)) {
07930 (*i).fs.file.access.erase(i1);
07931 goto again4;
07932 }
07933 }
07934 (*i).fs.file.access.push_back((*i).fs.new_access);
07935 } else {
07936 vector<s_access>::iterator i1;
07937 again3:
07938 for(i1=(*i).fs.file.access.begin(); i1!=(*i).fs.file.access.end(); i1++) {
07939 if(!(*i1).user_name.compare((*i).fs.new_access.user_name)) {
07940 (*i).fs.file.access.erase(i1);
07941 goto again3;
07942 }
07943 }
07944 (*i).fs.file.access.push_back((*i).fs.new_access);
07945 }
07946
07947 string disp=lang_get_string(1,(*i).lang,313)+eol;
07948 int ec=0;
07949 dcc_send_msg((*i).socket,disp,ec);
07950 (*i).filesystem=3000;
07951 }
07952 }
07953 return;
07954 }
07955
07956
07957 if((*i).filesystem==5000) {
07958 string disp=lang_get_string(1,(*i).lang,315)+eol;
07959 vector<s_user>::iterator i1;
07960 for(i1=r_users.begin(); i1!=r_users.end(); i1++)
07961 disp+=(*i1).name+eol;
07962 disp+=lang_get_string(1,(*i).lang,316)+eol;
07963 disp+=lang_get_string(1,(*i).lang,303)+eol;
07964 int ec=0;
07965 dcc_send_msg((*i).socket,disp,ec);
07966 (*i).filesystem++;
07967 return;
07968 }
07969 if((*i).filesystem==5001) {
07970 if(p.empty())
07971 return;
07972 bool all_users=!p.compare("*");
07973 (*i).fs.new_access.clear();
07974 (*i).fs.new_access.all_users=all_users;
07975 if(!all_users) {
07976 s_user u;
07977 vector<s_channel> chs;
07978 logic_partyline_get_user(p,u,chs);
07979 bool unknown_user=u.host_unknown;
07980 logic_partyline_get_user((*i).as_in_logic,u,chs);
07981 vector<s_channel>::iterator i2;
07982 bool can=(*i).access_to_can_send_unknown_users;
07983 for(i2=chs.begin(); i2!=chs.end(); i2++)
07984 if(!cmp_strings_case_insensitive((*i2).channel_name,p)) {
07985 can&=(*i2).can_send_unknown_users;
07986 break;
07987 }
07988 if(unknown_user && !can) {
07989 string disp=lang_get_string(1,(*i).lang,480)+eol;
07990 int ec=0;
07991 dcc_send_msg((*i).socket,disp,ec);
07992 (*i).filesystem--;
07993 return;
07994 }
07995 (*i).fs.new_access.user_name=p;
07996 } else
07997 (*i).fs.new_access.user_name="";
07998
07999 if(!all_users) {
08000 vector<s_user>::iterator i1;
08001 string user;
08002 for(i1=r_users.begin(); i1!=r_users.end(); i1++) {
08003 if(!(*i1).name.compare(p)) {
08004 user=p;
08005 break;
08006 }
08007 }
08008 if(user.empty()) {
08009 string disp=lang_get_string(1,(*i).lang,304)+eol;
08010 int ec=0;
08011 dcc_send_msg((*i).socket,disp,ec);
08012 (*i).filesystem--;
08013 return;
08014 }
08015 }
08016 vector<s_access>::iterator i1;
08017 bool got=false;
08018 for(i1=(*i).fs.file.access.begin(); i1!=(*i).fs.file.access.end(); i1++) {
08019 if(all_users && (*i1).all_users) {
08020 (*i).fs.new_access.del=(*i1).del;
08021 (*i).fs.new_access.notify_owner=(*i1).notify_owner;
08022 (*i).fs.new_access.notify_user=(*i1).notify_user;
08023 (*i).fs.new_access.owner=(*i1).owner;
08024 (*i).fs.new_access.read=(*i1).read;
08025 got=true;
08026 break;
08027 }
08028 if(!all_users && !(*i1).user_name.compare(p)) {
08029 (*i).fs.new_access.del=(*i1).del;
08030 (*i).fs.new_access.notify_owner=(*i1).notify_owner;
08031 (*i).fs.new_access.notify_user=(*i1).notify_user;
08032 (*i).fs.new_access.owner=(*i1).owner;
08033 (*i).fs.new_access.read=(*i1).read;
08034 got=true;
08035 break;
08036 }
08037 }
08038
08039
08040
08041
08042
08043
08044
08045 if(got) {
08046 if(all_users) {
08047 if(!(*i).access_to_can_send_all_users) {
08048 string disp=lang_get_string(1,(*i).lang,479)+eol;
08049 int ec=0;
08050 dcc_send_msg((*i).socket,disp,ec);
08051 return;
08052 }
08053
08054 string disp=lang_get_string(1,(*i).lang,317)+eol;
08055 int ec=0;
08056 dcc_send_msg((*i).socket,disp,ec);
08057 (*i).filesystem=5500;
08058 return;
08059 } else {
08060 string disp=lang_subst(lang_get_string(1,(*i).lang,318),(*i).fs.new_access.user_name)+eol;
08061 int ec=0;
08062 dcc_send_msg((*i).socket,disp,ec);
08063 (*i).filesystem=5500;
08064 return;
08065 }
08066 }
08067 (*i).filesystem=5200;
08068 return;
08069 }
08070
08071 if((*i).filesystem==5200) {
08072 string disp=lang_get_string(1,(*i).lang,306)+eol;
08073 int ec=0;
08074 dcc_send_msg((*i).socket,disp,ec);
08075 (*i).filesystem=4001;
08076 return;
08077 }
08078
08079
08080 if((*i).filesystem==5500) {
08081 if(p.empty())
08082 return;
08083 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) {
08084 if((*i).fs.new_access.all_users) {
08085 string disp=lang_get_string(1,(*i).lang,317)+eol;
08086 int ec=0;
08087 dcc_send_msg((*i).socket,disp,ec);
08088 return;
08089 } else {
08090 string disp=lang_subst(lang_get_string(1,(*i).lang,318),(*i).fs.new_access.user_name)+eol;
08091 int ec=0;
08092 dcc_send_msg((*i).socket,disp,ec);
08093 return;
08094 }
08095 } else {
08096 if(!p.compare("n") || !p.compare("N")) {
08097 (*i).filesystem=2000;
08098 } else {
08099 (*i).filesystem=5200;
08100 }
08101 }
08102 return;
08103 }
08104
08105
08106 if((*i).filesystem==6000) {
08107 if(p.empty())
08108 return;
08109 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) {
08110 string disp=lang_get_string(1,(*i).lang,319)+eol;
08111 int ec=0;
08112 dcc_send_msg((*i).socket,disp,ec);
08113 } else {
08114 if(!p.compare("n") || !p.compare("N")) {
08115 string disp=lang_get_string(1,(*i).lang,321)+eol;
08116 int ec=0;
08117 dcc_send_msg((*i).socket,disp,ec);
08118 (*i).filesystem=1;
08119 } else {
08120 (*i).fs.file.published=true;
08121
08122 vector<s_access>::iterator i1;
08123
08124 bool read=true;
08125 bool notify_user=true;
08126 bool old_secure=false;
08127 bool notify_owner=false;
08128
08129 for(i1=(*i).fs.file.access.begin(); i1!=(*i).fs.file.access.end(); i1++) {
08130 read|=(*i1).read;
08131 notify_user|=(*i1).notify_user;
08132 notify_owner|=(*i1).notify_owner;
08133 old_secure|=(*i1).secure;
08134 }
08135
08136 bool forced_secure;
08137
08138 if(filesys_dcc_set_file_attrs((*i).as_in_logic,(*i).fs.file,forced_secure)) {
08139 string disp;
08140 if(!old_secure && forced_secure)
08141 disp+=lang_get_string(1,(*i).lang,346)+eol;
08142
08143 disp+=lang_get_string(1,(*i).lang,320)+eol;
08144 int ec=0;
08145 dcc_send_msg((*i).socket,disp,ec);
08146 } else {
08147 string disp=lang_get_string(1,(*i).lang,292)+eol;
08148 int ec=0;
08149 dcc_send_msg((*i).socket,disp,ec);
08150 }
08151 (*i).filesystem=1;
08152 }
08153 }
08154 return;
08155 }
08156
08157 if((*i).filesystem==5001) {
08158 if(p.empty())
08159 return;
08160 bool all_users=!p.compare("*");
08161 (*i).fs.new_access.clear();
08162 (*i).fs.new_access.all_users=all_users;
08163 if(!all_users)
08164 (*i).fs.new_access.user_name=p;
08165 else
08166 (*i).fs.new_access.user_name="";
08167
08168 if(!all_users) {
08169 vector<s_user>::iterator i1;
08170 string user;
08171 for(i1=r_users.begin(); i1!=r_users.end(); i1++) {
08172 if(!(*i1).name.compare(p)) {
08173 user=p;
08174 break;
08175 }
08176 }
08177 if(user.empty()) {
08178 string disp=lang_get_string(1,(*i).lang,304)+eol;
08179 int ec=0;
08180 dcc_send_msg((*i).socket,disp,ec);
08181 (*i).filesystem--;
08182 return;
08183 }
08184 }
08185 vector<s_access>::iterator i1;
08186 bool got=false;
08187 for(i1=(*i).fs.file.access.begin(); i1!=(*i).fs.file.access.end(); i1++) {
08188 if(all_users && (*i1).all_users) {
08189 (*i).fs.new_access.del=(*i1).del;
08190 (*i).fs.new_access.notify_owner=(*i1).notify_owner;
08191 (*i).fs.new_access.notify_user=(*i1).notify_user;
08192 (*i).fs.new_access.owner=(*i1).owner;
08193 (*i).fs.new_access.read=(*i1).read;
08194 got=true;
08195 break;
08196 }
08197 if(!all_users && !(*i1).user_name.compare(p)) {
08198 (*i).fs.new_access.del=(*i1).del;
08199 (*i).fs.new_access.notify_owner=(*i1).notify_owner;
08200 (*i).fs.new_access.notify_user=(*i1).notify_user;
08201 (*i).fs.new_access.owner=(*i1).owner;
08202 (*i).fs.new_access.read=(*i1).read;
08203 got=true;
08204 break;
08205 }
08206 }
08207
08208
08209
08210
08211
08212
08213
08214 if(got) {
08215 if(all_users) {
08216 string disp=lang_get_string(1,(*i).lang,317)+eol;
08217 int ec=0;
08218 dcc_send_msg((*i).socket,disp,ec);
08219 (*i).filesystem=5500;
08220 return;
08221 } else {
08222 string disp=lang_subst(lang_get_string(1,(*i).lang,318),(*i).fs.new_access.user_name)+eol;
08223 int ec=0;
08224 dcc_send_msg((*i).socket,disp,ec);
08225 (*i).filesystem=5500;
08226 return;
08227 }
08228 }
08229 (*i).filesystem=5200;
08230 return;
08231 }
08232
08233 if((*i).filesystem==5200) {
08234 string disp=lang_get_string(1,(*i).lang,306)+eol;
08235 int ec=0;
08236 dcc_send_msg((*i).socket,disp,ec);
08237 (*i).filesystem=4001;
08238 return;
08239 }
08240
08241 if((*i).filesystem==7000) {
08242 string disp=lang_get_string(1,(*i).lang,433)+eol;
08243 time_t ex=(*i).fs.file.expiration;
08244 if(ex==0)
08245 disp+=lang_get_string(1,(*i).lang,434)+eol;
08246 else {
08247 char* t1=ctime(&ex);
08248 char t2[128];
08249 strcpy(t2,t1);
08250 t2[strlen(t2)-1]=0;
08251 disp+=t2;
08252 }
08253
08254 disp+=lang_get_string(1,(*i).lang,435)+eol;
08255 int ec=0;
08256 dcc_send_msg((*i).socket,disp,ec);
08257
08258 (*i).filesystem++;
08259 return;
08260 }
08261 if((*i).filesystem==7001) {
08262 string p=c;
08263 if(p.empty())
08264 return;
08265
08266 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) {
08267 string disp=lang_get_string(1,(*i).lang,435)+eol;
08268 int ec=0;
08269 dcc_send_msg((*i).socket,disp,ec);
08270 } else {
08271 if(!p.compare("n") || !p.compare("N")) {
08272 (*i).filesystem=2000;
08273 return;
08274 } else {
08275 string disp=lang_get_string(1,(*i).lang,436)+eol;
08276 int ec=0;
08277 dcc_send_msg((*i).socket,disp,ec);
08278 (*i).filesystem++;
08279 return;
08280 }
08281 }
08282 }
08283 if((*i).filesystem==7002) {
08284 string p=c;
08285 if(p.empty())
08286 return;
08287
08288 int x=atol(p.c_str());
08289 if(x==0) {
08290 (*i).fs.file.expiration=0;
08291 string disp=lang_get_string(1,(*i).lang,441)+eol;
08292 int ec=0;
08293 dcc_send_msg((*i).socket,disp,ec);
08294 (*i).filesystem=2000;
08295 return;
08296 }
08297 if(x<1970) {
08298 string disp=lang_get_string(1,(*i).lang,436)+eol;
08299 int ec=0;
08300 dcc_send_msg((*i).socket,disp,ec);
08301 return;
08302 }
08303 (*i).filesystem_expiration.tm_year=x;
08304 string disp=lang_get_string(1,(*i).lang,437)+eol;
08305 int ec=0;
08306 dcc_send_msg((*i).socket,disp,ec);
08307 (*i).filesystem++;
08308 return;
08309 }
08310 if((*i).filesystem==7003) {
08311 string p=c;
08312 if(p.empty())
08313 return;
08314
08315 int x=atol(p.c_str());
08316 if(x<1 || x>12) {
08317 string disp=lang_get_string(1,(*i).lang,437)+eol;
08318 int ec=0;
08319 dcc_send_msg((*i).socket,disp,ec);
08320 return;
08321 }
08322 (*i).filesystem_expiration.tm_mon=x;
08323 string disp=lang_get_string(1,(*i).lang,438)+eol;
08324 int ec=0;
08325 dcc_send_msg((*i).socket,disp,ec);
08326 (*i).filesystem++;
08327 return;
08328 }
08329 if((*i).filesystem==7004) {
08330 string p=c;
08331 if(p.empty())
08332 return;
08333
08334 int x=atol(p.c_str());
08335 if(x<1 || x>31) {
08336 string disp=lang_get_string(1,(*i).lang,438)+eol;
08337 int ec=0;
08338 dcc_send_msg((*i).socket,disp,ec);
08339 return;
08340 }
08341 (*i).filesystem_expiration.tm_mday=x;
08342 string disp=lang_get_string(1,(*i).lang,439)+eol;
08343 int ec=0;
08344 dcc_send_msg((*i).socket,disp,ec);
08345 (*i).filesystem++;
08346 return;
08347 }
08348 if((*i).filesystem==7005) {
08349 string p=c;
08350 if(p.empty())
08351 return;
08352
08353 int x=atol(p.c_str());
08354 if(x<0 || x>23) {
08355 string disp=lang_get_string(1,(*i).lang,439)+eol;
08356 int ec=0;
08357 dcc_send_msg((*i).socket,disp,ec);
08358 return;
08359 }
08360 (*i).filesystem_expiration.tm_hour=x;
08361 string disp=lang_get_string(1,(*i).lang,440)+eol;
08362 int ec=0;
08363 dcc_send_msg((*i).socket,disp,ec);
08364 (*i).filesystem++;
08365 return;
08366 }
08367 if((*i).filesystem==7006) {
08368 string p=c;
08369 if(p.empty())
08370 return;
08371
08372 int x=atol(p.c_str());
08373 if(x<0 || x>59) {
08374 string disp=lang_get_string(1,(*i).lang,440)+eol;
08375 int ec=0;
08376 dcc_send_msg((*i).socket,disp,ec);
08377 return;
08378 }
08379 (*i).filesystem_expiration.tm_min=x;
08380 (*i).filesystem_expiration.tm_isdst=-1;
08381 (*i).filesystem_expiration.tm_sec=0;
08382 (*i).filesystem_expiration.tm_wday=0;
08383 (*i).filesystem_expiration.tm_yday=0;
08384
08385 (*i).filesystem_expiration.tm_mon-=1;
08386 (*i).filesystem_expiration.tm_year-=1900;
08387
08388 time_t ex=mktime(&(*i).filesystem_expiration);
08389 if(ex==-1) {
08390 string disp=lang_get_string(1,(*i).lang,442)+eol;
08391 disp+=lang_get_string(1,(*i).lang,436)+eol;
08392 int ec=0;
08393 dcc_send_msg((*i).socket,disp,ec);
08394 (*i).filesystem=7002;
08395 return;
08396 }
08397 if(ex<time(NULL)) {
08398 string disp=lang_get_string(1,(*i).lang,443)+eol;
08399 disp+=lang_get_string(1,(*i).lang,436)+eol;
08400 int ec=0;
08401 dcc_send_msg((*i).socket,disp,ec);
08402 (*i).filesystem=7002;
08403 return;
08404 }
08405
08406 (*i).fs.file.expiration=ex;
08407
08408 string disp=lang_get_string(1,(*i).lang,433)+eol;
08409 if(ex==0)
08410 disp+=lang_get_string(1,(*i).lang,434)+eol;
08411 else {
08412 char* t1=ctime(&ex);
08413 char t2[128];
08414 strcpy(t2,t1);
08415 t2[strlen(t2)-1]=0;
08416 disp+=t2;
08417 }
08418
08419 int ec=0;
08420 dcc_send_msg((*i).socket,disp,ec);
08421 (*i).filesystem=2000;
08422 return;
08423 }
08424
08425
08426 if((*i).filesystem==8000) {
08427 string disp=lang_get_string(1,(*i).lang,476)+eol;
08428 int ec=0;
08429 dcc_send_msg((*i).socket,disp,ec);
08430 (*i).filesystem++;
08431 return;
08432 }
08433 if((*i).filesystem==8001) {
08434 string p=c;
08435 if(!p.compare(""))
08436 return;
08437
08438 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) {
08439 string disp=lang_get_string(1,(*i).lang,476)+eol;
08440 int ec=0;
08441 dcc_send_msg((*i).socket,disp,ec);
08442 } else {
08443 if(!p.compare("n") || !p.compare("N")) {
08444 (*i).fs.new_access.also_unknown=false;
08445 } else {
08446 (*i).fs.new_access.also_unknown=true;;
08447 }
08448 string disp=lang_get_string(1,(*i).lang,339)+eol;
08449 int ec=0;
08450 dcc_send_msg((*i).socket,disp,ec);
08451 (*i).filesystem=4000;
08452 return;
08453 }
08454 return;
08455 }
08456 }
08457
08458
08459
08460
08461
08462
08463
08464
08465
08466 void dcc_loop_replication(vector<s_dcc_client>::iterator i, string& eol)
08467 {
08468 if((*i).replication==1) {
08469 (*i).b_repl_user=false;
08470 (*i).b_repl_user_template=false;
08471 (*i).b_repl_chandef=false;
08472 (*i).b_repl_proc=false;
08473 (*i).b_repl_private=false;
08474
08475 string disp=lang_get_string(1,(*i).lang,421)+eol;
08476
08477 {
08478 vector<s_user>::iterator i1;
08479 for(i1=r_users.begin(); i1!=r_users.end(); i1++)
08480 disp+=(string)"USER = "+(*i1).name+eol;
08481 }
08482 {
08483 vector<s_user>::iterator i1;
08484 for(i1=r_user_templates.begin(); i1!=r_user_templates.end(); i1++)
08485 disp+=(string)"USER TEMPLATE = "+(*i1).name+eol;
08486 }
08487 {
08488 vector<s_procedure>::iterator i1;
08489 for(i1=r_procedures.begin(); i1!=r_procedures.end(); i1++)
08490 disp+=(string)"PROCEDURE = "+(*i1).name+eol;
08491 }
08492 {
08493 vector<s_channel_def>::iterator i1;
08494 for(i1=r_channel_defs.begin(); i1!=r_channel_defs.end(); i1++)
08495 disp+=(string)"CHANDEF = "+(*i1).channel_name+eol;
08496 }
08497 disp+=(string)"PRIVATE = private"+eol;
08498
08499 disp+=lang_get_string(1,(*i).lang,422)+eol;
08500
08501 int ec=0;
08502 dcc_send_msg((*i).socket,disp,ec);
08503 (*i).replication++;
08504 return;
08505 }
08506
08507 if((*i).replication==2) {
08508 string p=dcc_get_line((*i).in_buff);
08509 if(!p.compare(""))
08510 return;
08511
08512 if(!p.compare(".")) {
08513 (*i).replication=0;
08514 return;
08515 }
08516
08517 bool got=false;
08518
08519 {
08520 vector<s_user>::iterator i1;
08521 for(i1=r_users.begin(); i1!=r_users.end(); i1++)
08522 if(!(*i1).name.compare(p)) {
08523 got=true;
08524 (*i).b_repl_user=true;
08525 (*i).repl_user=*i1;
08526 (*i).replication=1000;
08527 return;
08528 }
08529 }
08530 {
08531 vector<s_user>::iterator i1;
08532 for(i1=r_user_templates.begin(); i1!=r_user_templates.end(); i1++)
08533 if(!(*i1).name.compare(p)) {
08534 got=true;
08535 (*i).b_repl_user_template=true;
08536 (*i).repl_user_template=*i1;
08537 (*i).replication=1000;
08538 return;
08539 }
08540 }
08541 {
08542 vector<s_procedure>::iterator i1;
08543 for(i1=r_procedures.begin(); i1!=r_procedures.end(); i1++)
08544 if(!(*i1).name.compare(p)) {
08545 got=true;
08546 (*i).b_repl_proc=true;
08547 (*i).repl_proc=*i1;
08548 (*i).replication=3000;
08549 return;
08550 }
08551 }
08552 {
08553 vector<s_channel_def>::iterator i1;
08554 for(i1=r_channel_defs.begin(); i1!=r_channel_defs.end(); i1++)
08555 if(!(*i1).channel_name.compare(p)) {
08556 got=true;
08557 (*i).b_repl_chandef=true;
08558 (*i).repl_chandef=*i1;
08559 (*i).replication=4000;
08560 return;
08561 }
08562 }
08563
08564 if(!p.compare("private")) {
08565 got=true;
08566 (*i).b_repl_private=true;
08567 (*i).repl_private.replication=r_private.replication;
08568 (*i).replication=5000;
08569 return;
08570 }
08571
08572 string disp=lang_get_string(1,(*i).lang,423)+eol;
08573 int ec=0;
08574 dcc_send_msg((*i).socket,disp,ec);
08575 (*i).replication=1;
08576 return;
08577 }
08578
08579
08580 if((*i).replication==1000) {
08581 string disp=lang_get_string(1,(*i).lang,424)+eol;
08582
08583 int line=0;
08584
08585 vector<s_replication>::iterator i1;
08586 for(i1=(*i).repl_user.replication.begin(); i1!=(*i).repl_user.replication.end(); i1++) {
08587 disp+=lang_get_string(1,(*i).lang,593);
08588 if(line<100)
08589 disp+="0";
08590 if(line<10)
08591 disp+="0";
08592 char tmp[64];
08593 disp+=ltoa(++line,tmp,10);
08594 disp+=": ";
08595 disp+=(*i1).partner;
08596 disp+=" = ";
08597 if((*i1).type==REPL_PUSH)
08598 disp+="PUSH";
08599 if((*i1).type==REPL_PULL)
08600 disp+="PULL";
08601 if((*i1).type==REPL_PUSHPULL)
08602 disp+="PUSHPULL";
08603 disp+=eol;
08604 }
08605 if(line==0)
08606 disp+="(no replications)"+eol;
08607
08608 disp+=lang_get_string(1,(*i).lang,425)+eol;
08609
08610 int ec=0;
08611 dcc_send_msg((*i).socket,disp,ec);
08612
08613 (*i).replication++;
08614 return;
08615 }
08616 if((*i).replication==1001) {
08617 string p=dcc_get_line((*i).in_buff);
08618 if(!p.compare(""))
08619 return;
08620
08621 if(!p.compare(".")) {
08622 string disp=lang_get_string(1,(*i).lang,426)+eol;
08623 int ec=0;
08624 dcc_send_msg((*i).socket,disp,ec);
08625 (*i).replication++;
08626 return;
08627 }
08628
08629 if(!p.compare(".add")) {
08630 string disp=lang_get_string(1,(*i).lang,428)+eol;
08631
08632 vector<s_user>::iterator i1;
08633 for(i1=r_users.begin(); i1!=r_users.end(); i1++)
08634 disp+=(*i1).name+eol;
08635
08636 disp+=lang_get_string(1,(*i).lang,429)+eol;
08637
08638 int ec=0;
08639 dcc_send_msg((*i).socket,disp,ec);
08640 (*i).replication=10000;
08641 return;
08642 }
08643
08644 string p1, p2;
08645 {
08646 int pos=0;
08647 for(unsigned int i1=0; i1<p.length(); i1++) {
08648 if(p[i1]==0x20) {
08649 pos=1;
08650 continue;
08651 }
08652 if(pos==0)
08653 p1+=p[i1];
08654 if(pos==1)
08655 p2+=p[i1];
08656 }
08657 }
08658 if(!p1.compare(".remove")) {
08659 int line=0;
08660
08661 vector<s_replication>::iterator i1;
08662 for(i1=(*i).repl_user.replication.begin(); i1!=(*i).repl_user.replication.end(); i1++)
08663 if(++line==atol(p2.c_str())) {
08664 (*i).repl_user.replication.erase(i1);
08665 break;
08666 }
08667 (*i).replication=1000;
08668 return;
08669 }
08670
08671 (*i).replication=1000;
08672 }
08673 if((*i).replication==1002) {
08674 string p=dcc_get_line((*i).in_buff);
08675 if(!p.compare(""))
08676 return;
08677
08678 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) {
08679 string disp=lang_get_string(1,(*i).lang,426)+eol;
08680 int ec=0;
08681 dcc_send_msg((*i).socket,disp,ec);
08682 } else {
08683 if(!p.compare("y") || !p.compare("Y")) {
08684 s_user u;
08685 vector<s_channel> chs;
08686 if(!(*i).b_repl_user_template) {
08687 logic_partyline_get_user((*i).repl_user.name,u,chs);
08688 } else {
08689 logic_partyline_get_user_template((*i).repl_user.name,u,chs);
08690 u.is_template=true;
08691 }
08692 logic_partyline_remove_user((*i).repl_user.name);
08693 logic_partyline_add_user((*i).repl_user,chs);
08694
08695 string disp=lang_get_string(1,(*i).lang,427)+eol;
08696 int ec=0;
08697 dcc_send_msg((*i).socket,disp,ec);
08698 (*i).replication=1;
08699 return;
08700 } else {
08701 string disp=lang_get_string(1,(*i).lang,162)+eol;
08702 int ec=0;
08703 dcc_send_msg((*i).socket,disp,ec);
08704 (*i).replication=1;
08705 return;
08706 }
08707 }
08708 }
08709
08710
08711 if((*i).replication==3000) {
08712 string disp=lang_get_string(1,(*i).lang,424)+eol;
08713
08714 int line=0;
08715
08716 vector<s_replication>::iterator i1;
08717 for(i1=(*i).repl_proc.replication.begin(); i1!=(*i).repl_proc.replication.end(); i1++) {
08718 disp+=lang_get_string(1,(*i).lang,593);
08719 if(line<100)
08720 disp+="0";
08721 if(line<10)
08722 disp+="0";
08723 char tmp[64];
08724 disp+=ltoa(++line,tmp,10);
08725 disp+=": ";
08726 disp+=(*i1).partner;
08727 disp+=" = ";
08728 if((*i1).type==REPL_PUSH)
08729 disp+="PUSH";
08730 if((*i1).type==REPL_PULL)
08731 disp+="PULL";
08732 if((*i1).type==REPL_PUSHPULL)
08733 disp+="PUSHPULL";
08734 disp+=eol;
08735 }
08736 if(line==0)
08737 disp+="(no replications)"+eol;
08738
08739 disp+=lang_get_string(1,(*i).lang,425)+eol;
08740
08741 int ec=0;
08742 dcc_send_msg((*i).socket,disp,ec);
08743
08744 (*i).replication++;
08745 return;
08746 }
08747 if((*i).replication==3001) {
08748 string p=dcc_get_line((*i).in_buff);
08749 if(!p.compare(""))
08750 return;
08751
08752 if(!p.compare(".")) {
08753 string disp=lang_get_string(1,(*i).lang,426)+eol;
08754 int ec=0;
08755 dcc_send_msg((*i).socket,disp,ec);
08756 (*i).replication++;
08757 return;
08758 }
08759
08760 if(!p.compare(".add")) {
08761 string disp=lang_get_string(1,(*i).lang,428)+eol;
08762
08763 vector<s_user>::iterator i1;
08764 for(i1=r_users.begin(); i1!=r_users.end(); i1++)
08765 disp+=(*i1).name+eol;
08766
08767 disp+=lang_get_string(1,(*i).lang,429)+eol;
08768
08769 int ec=0;
08770 dcc_send_msg((*i).socket,disp,ec);
08771 (*i).replication=10000;
08772 return;
08773 }
08774
08775 string p1, p2;
08776 {
08777 int pos=0;
08778 for(unsigned int i1=0; i1<p.length(); i1++) {
08779 if(p[i1]==0x20) {
08780 pos=1;
08781 continue;
08782 }
08783 if(pos==0)
08784 p1+=p[i1];
08785 if(pos==1)
08786 p2+=p[i1];
08787 }
08788 }
08789 if(!p1.compare(".remove")) {
08790 int line=0;
08791
08792 vector<s_replication>::iterator i1;
08793 for(i1=(*i).repl_proc.replication.begin(); i1!=(*i).repl_proc.replication.end(); i1++)
08794 if(++line==atol(p2.c_str())) {
08795 (*i).repl_proc.replication.erase(i1);
08796 break;
08797 }
08798 (*i).replication=3000;
08799 return;
08800 }
08801
08802 (*i).replication=3000;
08803 }
08804 if((*i).replication==3002) {
08805 string p=dcc_get_line((*i).in_buff);
08806 if(!p.compare(""))
08807 return;
08808
08809 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) {
08810 string disp=lang_get_string(1,(*i).lang,426)+eol;
08811 int ec=0;
08812 dcc_send_msg((*i).socket,disp,ec);
08813 } else {
08814 if(!p.compare("y") || !p.compare("Y")) {
08815 vector<s_procedure>::iterator i1;
08816 for(i1=r_procedures.begin(); i1!=r_procedures.end(); i1++) {
08817 if(!(*i1).name.compare((*i).repl_proc.name)) {
08818 (*i1).replication.clear();
08819 vector<s_replication>::iterator i2;
08820 for(i2=(*i).repl_proc.replication.begin(); i2!=(*i).repl_proc.replication.end(); i2++)
08821 (*i1).replication.push_back(*i2);
08822 break;
08823 }
08824 }
08825
08826 string disp=lang_get_string(1,(*i).lang,427)+eol;
08827 int ec=0;
08828 dcc_send_msg((*i).socket,disp,ec);
08829 (*i).replication=1;
08830 return;
08831 } else {
08832 string disp=lang_get_string(1,(*i).lang,162)+eol;
08833 int ec=0;
08834 dcc_send_msg((*i).socket,disp,ec);
08835 (*i).replication=1;
08836 return;
08837 }
08838 }
08839 }
08840
08841
08842 if((*i).replication==4000) {
08843 string disp=lang_get_string(1,(*i).lang,424)+eol;
08844
08845 int line=0;
08846
08847 vector<s_replication>::iterator i1;
08848 for(i1=(*i).repl_chandef.replication.begin(); i1!=(*i).repl_chandef.replication.end(); i1++) {
08849 disp+=lang_get_string(1,(*i).lang,593);
08850 if(line<100)
08851 disp+="0";
08852 if(line<10)
08853 disp+="0";
08854 char tmp[64];
08855 disp+=ltoa(++line,tmp,10);
08856 disp+=": ";
08857 disp+=(*i1).partner;
08858 disp+=" = ";
08859 if((*i1).type==REPL_PUSH)
08860 disp+="PUSH";
08861 if((*i1).type==REPL_PULL)
08862 disp+="PULL";
08863 if((*i1).type==REPL_PUSHPULL)
08864 disp+="PUSHPULL";
08865 disp+=eol;
08866 }
08867 if(line==0)
08868 disp+="(no replications)"+eol;
08869
08870 disp+=lang_get_string(1,(*i).lang,425)+eol;
08871
08872 int ec=0;
08873 dcc_send_msg((*i).socket,disp,ec);
08874
08875 (*i).replication++;
08876 return;
08877 }
08878 if((*i).replication==4001) {
08879 string p=dcc_get_line((*i).in_buff);
08880 if(!p.compare(""))
08881 return;
08882
08883 if(!p.compare(".")) {
08884 string disp=lang_get_string(1,(*i).lang,426)+eol;
08885 int ec=0;
08886 dcc_send_msg((*i).socket,disp,ec);
08887 (*i).replication++;
08888 return;
08889 }
08890
08891 if(!p.compare(".add")) {
08892 string disp=lang_get_string(1,(*i).lang,428)+eol;
08893
08894 vector<s_user>::iterator i1;
08895 for(i1=r_users.begin(); i1!=r_users.end(); i1++)
08896 disp+=(*i1).name+eol;
08897
08898 disp+=lang_get_string(1,(*i).lang,429)+eol;
08899
08900 int ec=0;
08901 dcc_send_msg((*i).socket,disp,ec);
08902 (*i).replication=10000;
08903 return;
08904 }
08905
08906 string p1, p2;
08907 {
08908 int pos=0;
08909 for(unsigned int i1=0; i1<p.length(); i1++) {
08910 if(p[i1]==0x20) {
08911 pos=1;
08912 continue;
08913 }
08914 if(pos==0)
08915 p1+=p[i1];
08916 if(pos==1)
08917 p2+=p[i1];
08918 }
08919 }
08920 if(!p1.compare(".remove")) {
08921 int line=0;
08922
08923 vector<s_replication>::iterator i1;
08924 for(i1=(*i).repl_chandef.replication.begin(); i1!=(*i).repl_chandef.replication.end(); i1++)
08925 if(++line==atol(p2.c_str())) {
08926 (*i).repl_chandef.replication.erase(i1);
08927 break;
08928 }
08929 (*i).replication=4000;
08930 return;
08931 }
08932
08933 (*i).replication=4000;
08934 }
08935 if((*i).replication==4002) {
08936 string p=dcc_get_line((*i).in_buff);
08937 if(!p.compare(""))
08938 return;
08939
08940 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) {
08941 string disp=lang_get_string(1,(*i).lang,426)+eol;
08942 int ec=0;
08943 dcc_send_msg((*i).socket,disp,ec);
08944 } else {
08945 if(!p.compare("y") || !p.compare("Y")) {
08946 vector<s_channel_def>::iterator i1;
08947 for(i1=r_channel_defs.begin(); i1!=r_channel_defs.end(); i1++) {
08948 if(!(*i1).channel_name.compare((*i).repl_chandef.channel_name)) {
08949 (*i1).replication.clear();
08950 vector<s_replication>::iterator i2;
08951 for(i2=(*i).repl_chandef.replication.begin(); i2!=(*i).repl_chandef.replication.end(); i2++)
08952 (*i1).replication.push_back(*i2);
08953 break;
08954 }
08955 }
08956
08957 string disp=lang_get_string(1,(*i).lang,427)+eol;
08958 int ec=0;
08959 dcc_send_msg((*i).socket,disp,ec);
08960 (*i).replication=1;
08961 return;
08962 } else {
08963 string disp=lang_get_string(1,(*i).lang,162)+eol;
08964 int ec=0;
08965 dcc_send_msg((*i).socket,disp,ec);
08966 (*i).replication=1;
08967 return;
08968 }
08969 }
08970 }
08971
08972
08973 if((*i).replication==5000) {
08974 string disp=lang_get_string(1,(*i).lang,424)+eol;
08975
08976 int line=0;
08977
08978 vector<s_replication>::iterator i1;
08979 for(i1=(*i).repl_private.replication.begin(); i1!=(*i).repl_private.replication.end(); i1++) {
08980 disp+=lang_get_string(1,(*i).lang,593);
08981 if(line<100)
08982 disp+="0";
08983 if(line<10)
08984 disp+="0";
08985 char tmp[64];
08986 disp+=ltoa(++line,tmp,10);
08987 disp+=": ";
08988 disp+=(*i1).partner;
08989 disp+=" = ";
08990 if((*i1).type==REPL_PUSH)
08991 disp+="PUSH";
08992 if((*i1).type==REPL_PULL)
08993 disp+="PULL";
08994 if((*i1).type==REPL_PUSHPULL)
08995 disp+="PUSHPULL";
08996 disp+=eol;
08997 }
08998 if(line==0)
08999 disp+="(no replications)"+eol;
09000
09001 disp+=lang_get_string(1,(*i).lang,425)+eol;
09002
09003 int ec=0;
09004 dcc_send_msg((*i).socket,disp,ec);
09005
09006 (*i).replication++;
09007 return;
09008 }
09009 if((*i).replication==5001) {
09010 string p=dcc_get_line((*i).in_buff);
09011 if(!p.compare(""))
09012 return;
09013
09014 if(!p.compare(".")) {
09015 string disp=lang_get_string(1,(*i).lang,426)+eol;
09016 int ec=0;
09017 dcc_send_msg((*i).socket,disp,ec);
09018 (*i).replication++;
09019 return;
09020 }
09021
09022 if(!p.compare(".add")) {
09023 string disp=lang_get_string(1,(*i).lang,428)+eol;
09024
09025 vector<s_user>::iterator i1;
09026 for(i1=r_users.begin(); i1!=r_users.end(); i1++)
09027 disp+=(*i1).name+eol;
09028
09029 disp+=lang_get_string(1,(*i).lang,429)+eol;
09030
09031 int ec=0;
09032 dcc_send_msg((*i).socket,disp,ec);
09033 (*i).replication=10000;
09034 return;
09035 }
09036
09037 string p1, p2;
09038 {
09039 int pos=0;
09040 for(unsigned int i1=0; i1<p.length(); i1++) {
09041 if(p[i1]==0x20) {
09042 pos=1;
09043 continue;
09044 }
09045 if(pos==0)
09046 p1+=p[i1];
09047 if(pos==1)
09048 p2+=p[i1];
09049 }
09050 }
09051 if(!p1.compare(".remove")) {
09052 int line=0;
09053
09054 vector<s_replication>::iterator i1;
09055 for(i1=(*i).repl_private.replication.begin(); i1!=(*i).repl_private.replication.end(); i1++)
09056 if(++line==atol(p2.c_str())) {
09057 (*i).repl_private.replication.erase(i1);
09058 break;
09059 }
09060 (*i).replication=5000;
09061 return;
09062 }
09063
09064 (*i).replication=5000;
09065 }
09066 if((*i).replication==5002) {
09067 string p=dcc_get_line((*i).in_buff);
09068 if(!p.compare(""))
09069 return;
09070
09071 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) {
09072 string disp=lang_get_string(1,(*i).lang,426)+eol;
09073 int ec=0;
09074 dcc_send_msg((*i).socket,disp,ec);
09075 } else {
09076 if(!p.compare("y") || !p.compare("Y")) {
09077 r_private.replication.clear();
09078 vector<s_replication>::iterator i2;
09079 for(i2=(*i).repl_private.replication.begin(); i2!=(*i).repl_private.replication.end(); i2++)
09080 r_private.replication.push_back(*i2);
09081
09082 string disp=lang_get_string(1,(*i).lang,427)+eol;
09083 int ec=0;
09084 dcc_send_msg((*i).socket,disp,ec);
09085 (*i).replication=1;
09086 return;
09087 } else {
09088 string disp=lang_get_string(1,(*i).lang,162)+eol;
09089 int ec=0;
09090 dcc_send_msg((*i).socket,disp,ec);
09091 (*i).replication=1;
09092 return;
09093 }
09094 }
09095 }
09096
09097
09098 if((*i).replication==10000) {
09099 string p=dcc_get_line((*i).in_buff);
09100 if(!p.compare(""))
09101 return;
09102
09103 bool got=false;
09104 vector<s_user>::iterator i1;
09105 for(i1=r_users.begin(); i1!=r_users.end(); i1++) {
09106 if(!(*i1).name.compare(p)) {
09107 got=true;
09108 break;
09109 }
09110 }
09111
09112 if(!got) {
09113 string disp=lang_get_string(1,(*i).lang,428)+eol;
09114
09115 vector<s_user>::iterator i1;
09116 for(i1=r_users.begin(); i1!=r_users.end(); i1++)
09117 disp+=(*i1).name+eol;
09118
09119 disp+=lang_get_string(1,(*i).lang,429)+eol;
09120
09121 int ec=0;
09122 dcc_send_msg((*i).socket,disp,ec);
09123 (*i).replication=(*i).replication;
09124 return;
09125 }
09126
09127 (*i).repl_add.partner=p;
09128 (*i).repl_add.type=REPL_INVALID;
09129
09130 string disp=lang_get_string(1,(*i).lang,430)+eol;
09131 int ec=0;
09132 dcc_send_msg((*i).socket,disp,ec);
09133 (*i).replication++;
09134 return;
09135 }
09136 if((*i).replication==10001) {
09137 string p=dcc_get_line((*i).in_buff);
09138 if(!p.compare(""))
09139 return;
09140
09141 if(!p.compare("PUSH"))
09142 (*i).repl_add.type=REPL_PUSH;
09143 if(!p.compare("PULL"))
09144 (*i).repl_add.type=REPL_PULL;
09145 if(!p.compare("PUSHPULL"))
09146 (*i).repl_add.type=REPL_PUSHPULL;
09147
09148 if(!p.compare(".")) {
09149 (*i).replication+=2;
09150 return;
09151 }
09152
09153 (*i).repl_add.type==REPL_INVALID?(*i).replication--:(*i).replication++;
09154
09155 if((*i).repl_add.type==REPL_INVALID) {
09156 string disp=lang_get_string(1,(*i).lang,430)+eol;
09157 int ec=0;
09158 dcc_send_msg((*i).socket,disp,ec);
09159 return;
09160 }
09161
09162 return;
09163 }
09164 if((*i).replication==10002) {
09165 s_user u;
09166 vector<s_channel> chs;
09167 logic_partyline_get_user((*i).repl_add.partner,u,chs);
09168 if(!u.replication_partner) {
09169 u.replication_partner=true;
09170 logic_partyline_remove_user(u.name);
09171 logic_partyline_add_user(u,chs);
09172
09173 string disp=lang_get_string(1,(*i).lang,431)+eol;
09174 int ec=0;
09175 dcc_send_msg((*i).socket,disp,ec);
09176 } else {
09177 string disp=lang_get_string(1,(*i).lang,432)+eol;
09178 int ec=0;
09179 dcc_send_msg((*i).socket,disp,ec);
09180 }
09181 (*i).replication++;
09182 return;
09183 }
09184 if((*i).replication==10003) {
09185 if((*i).b_repl_user) {
09186 (*i).repl_user.replication.push_back((*i).repl_add);
09187 (*i).replication=1000;
09188 }
09189 if((*i).b_repl_proc) {
09190 (*i).repl_proc.replication.push_back((*i).repl_add);
09191 (*i).replication=3000;
09192 }
09193 if((*i).b_repl_chandef) {
09194 (*i).repl_chandef.replication.push_back((*i).repl_add);
09195 (*i).replication=4000;
09196 }
09197 if((*i).b_repl_private) {
09198 (*i).repl_private.replication.push_back((*i).repl_add);
09199 (*i).replication=5000;
09200 }
09201 return;
09202 }
09203 }
09204
09205
09206
09207
09208
09209
09210
09211
09212
09213 void dcc_loop_terminator(vector<s_dcc_client>::iterator i, string& eol)
09214 {
09215 if((*i).terminator==1) {
09216 string disp=lang_get_string(1,(*i).lang,456)+eol;
09217
09218 vector<string>::iterator i1;
09219 for(i1=(*i).access_to_users.begin(); i1!=(*i).access_to_users.end(); i1++) {
09220 if(!(*i1).compare("*"))
09221 continue;
09222
09223 s_user u;
09224 vector<s_channel> chs;
09225 logic_partyline_get_user(*i1,u,chs);
09226
09227 if(u.terminator)
09228 disp+=lang_get_string(1,(*i).lang,458);
09229 else
09230 disp+=lang_get_string(1,(*i).lang,457);
09231
09232 disp+=*i1+eol;
09233 }
09234
09235 disp+=lang_get_string(1,(*i).lang,459)+eol;
09236 int ec=0;
09237 dcc_send_msg((*i).socket,disp,ec);
09238
09239 (*i).terminator++;
09240 return;
09241 }
09242
09243 if((*i).terminator==2) {
09244 string p=dcc_get_line((*i).in_buff);
09245 if(!p.compare(""))
09246 return;
09247
09248 if(!p.compare(".")) {
09249 string disp=lang_get_string(1,(*i).lang,460)+eol;
09250 int ec=0;
09251 dcc_send_msg((*i).socket,disp,ec);
09252
09253 (*i).terminator=0;
09254 return;
09255 }
09256
09257 bool got=false;
09258 vector<string>::iterator i1;
09259 for(i1=(*i).access_to_users.begin(); i1!=(*i).access_to_users.end(); i1++) {
09260 if(!(*i1).compare(p)) {
09261 got=true;
09262 break;
09263 }
09264 }
09265
09266 if(!got) {
09267 string disp=lang_get_string(1,(*i).lang,461)+eol;
09268 int ec=0;
09269 dcc_send_msg((*i).socket,disp,ec);
09270 (*i).terminator=1;
09271 return;
09272 }
09273
09274 (*i).terminator_user=p;
09275 (*i).terminator++;
09276 return;
09277 }
09278
09279 if((*i).terminator==3) {
09280 string disp=lang_get_string(1,(*i).lang,462)+eol;
09281 int ec=0;
09282 dcc_send_msg((*i).socket,disp,ec);
09283 (*i).terminator++;
09284 return;
09285 }
09286
09287 if((*i).terminator==4) {
09288 string p=dcc_get_line((*i).in_buff);
09289 if(!p.compare(""))
09290 return;
09291
09292 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) {
09293 string disp=lang_get_string(1,(*i).lang,462)+eol;
09294 int ec=0;
09295 dcc_send_msg((*i).socket,disp,ec);
09296 return;
09297 } else {
09298 s_user u;
09299 vector<s_channel> chs;
09300 logic_partyline_get_user((*i).terminator_user,u,chs);
09301 logic_partyline_remove_user((*i).terminator_user);
09302 u.last_changed=time(NULL);
09303
09304 if(!p.compare("y") || !p.compare("Y")) {
09305 u.terminator=true;
09306 } else {
09307 u.terminator=false;
09308 }
09309 logic_partyline_add_user(u,chs);
09310
09311 (*i).terminator=1;
09312 return;
09313 }
09314 }
09315 }
09316
09317
09318
09319
09320
09321
09322
09323
09324
09325
09326 void dcc_loop_language(vector<s_dcc_client>::iterator i, string& eol)
09327 {
09328 if((*i).language==1) {
09329 string disp=lang_get_string(1,(*i).lang,451)+eol;
09330 vector<string> langs;
09331 lang_get_langs(1,langs);
09332 vector<string>::iterator i1;
09333 for(i1=langs.begin(); i1!=langs.end(); i1++) {
09334 disp+=lang_subst(lang_get_string(1,*i1,452),*i1)+eol;
09335 disp+=" ";
09336 disp+=lang_get_string(1,*i1,0)+eol;
09337 }
09338 int ec=0;
09339 dcc_send_msg((*i).socket,disp,ec);
09340
09341 (*i).language++;
09342 return;
09343 }
09344
09345 if((*i).language==2) {
09346 string p=dcc_get_line((*i).in_buff);
09347 if(!p.compare(""))
09348 return;
09349
09350 vector<string> langs;
09351 lang_get_langs(1,langs);
09352 vector<string>::iterator i1;
09353 bool got=false;
09354 for(i1=langs.begin(); i1!=langs.end(); i1++) {
09355 if(!(*i1).compare(p)) {
09356 (*i).lang=*i1;
09357 got=true;
09358 break;
09359 }
09360 }
09361 if(!got)
09362 (*i).language--;
09363 else {
09364 (*i).language=0;
09365 string disp=lang_get_string(1,(*i).lang,463)+eol;
09366 int ec=0;
09367 dcc_send_msg((*i).socket,disp,ec);
09368 }
09369 return;
09370 }
09371 }
09372
09373
09374
09375
09376
09377
09378
09379
09380 void dcc_loop_edit_user1(vector<s_dcc_client>::iterator i, string& eol)
09381 {
09382 if((*i).edit_user==1) {
09383 (*i).edit_user=-100;
09384 }
09385 if((*i).edit_user==-100) {
09386 string p=dcc_get_line((*i).in_buff);
09387 if(!p.compare(""))
09388 return;
09389 vector<string>::iterator i1;
09390 bool got=false;
09391 for(i1=(*i).access_to_users.begin(); i1!=(*i).access_to_users.end(); i1++)
09392 if(!p.compare(*i1)) {
09393 got=true;
09394 break;
09395 }
09396 if(!got) {
09397 string disp=lang_get_string(1,(*i).lang,90)+eol;
09398 int ec=0;
09399 dcc_send_msg((*i).socket,disp,ec);
09400 } else {
09401 (*i).user_name=p;
09402 s_user u;
09403 vector<s_channel> chs;
09404 logic_partyline_get_user(p,u,chs);
09405
09406 vector<s_group>::iterator i1;
09407
09408 {
09409 (*i).user_member_of.clear();
09410 (*i).user_hosts.clear();
09411 (*i).user_dcc_hosts.clear();
09412 (*i).user_fullnames.clear();
09413 (*i).user_meta.clear();
09414 (*i).user_access_to_groups.clear();
09415 (*i).user_access_grant_groups.clear();
09416 (*i).user_access_to_proc_groups.clear();
09417 (*i).user_access_grant_proc_groups.clear();
09418 (*i).user_access_usage_proc_groups.clear();
09419 (*i).user_access_to_channel.clear();
09420 (*i).user_access_grant_channel.clear();
09421 (*i).user_channels.clear();
09422 }
09423
09424 for(i1=u.groups.begin(); i1!=u.groups.begin(); i1++)
09425 (*i).user_member_of.push_back((*i1).name);
09426
09427 vector<string>::iterator i2;
09428 for(i2=u.hostmask.begin(); i2!=u.hostmask.end(); i2++)
09429 (*i).user_hosts.push_back(*i2);
09430
09431 vector<s_dcc_host>::iterator i3;
09432 for(i3=u.dcc_hosts.begin(); i3!=u.dcc_hosts.end(); i3++) {
09433 (*i).user_dcc_hosts.push_back(*i3);
09434 }
09435
09436 for(i2=u.fullname.begin(); i2!=u.fullname.end(); i2++)
09437 (*i).user_fullnames.push_back(*i2);
09438
09439 map<string,string>::iterator i6;
09440 for(i6=u.meta.begin(); i6!=u.meta.end(); i6++)
09441 (*i).user_meta.insert(*i6);
09442
09443 for(i2=u.access_to_group.begin(); i2!=u.access_to_group.end(); i2++)
09444 (*i).user_access_to_groups.push_back(*i2);
09445
09446 for(i2=u.access_grant_group.begin(); i2!=u.access_grant_group.end(); i2++)
09447 (*i).user_access_grant_groups.push_back(*i2);
09448
09449 for(i2=u.access_to_proc.begin(); i2!=u.access_to_proc.end(); i2++)
09450 (*i).user_access_to_proc_groups.push_back(*i2);
09451
09452 for(i2=u.access_grant_procedure.begin(); i2!=u.access_grant_procedure.end(); i2++)
09453 (*i).user_access_grant_proc_groups.push_back(*i2);
09454
09455 for(i2=u.access_usage_procedure.begin(); i2!=u.access_usage_procedure.end(); i2++)
09456 (*i).user_access_usage_proc_groups.push_back(*i2);
09457
09458 for(i2=u.access_to_channel.begin(); i2!=u.access_to_channel.end(); i2++)
09459 (*i).user_access_to_channel.push_back(*i2);
09460
09461 for(i2=u.access_grant_channel.begin(); i2!=u.access_grant_channel.end(); i2++)
09462 (*i).user_access_grant_channel.push_back(*i2);
09463
09464 (*i).user_channels.clear();
09465 vector<s_channel>::iterator i4;
09466 for(i4=chs.begin(); i4!=chs.end(); i4++)
09467 (*i).user_channels.push_back(*i4);
09468
09469 (*i).user_partyline_msg_flood=u.partyline_msg_flood;
09470
09471 (*i).user_access_to_backup=u.access_to_backup;
09472 (*i).user_access_to_die=u.access_to_die;
09473 (*i).user_access_to_filesystem=u.access_to_filesystem;
09474 (*i).user_access_to_partyline=u.access_to_partyline;
09475 (*i).user_access_to_plusproc=u.access_to_plusproc;
09476 (*i).user_access_to_plususer=u.access_to_plususer;
09477 (*i).user_access_to_rehash=u.access_to_rehash;
09478 (*i).user_access_to_restart=u.access_to_restart;
09479 (*i).user_access_grant_backup=u.access_grant_backup;
09480 (*i).user_access_grant_die=u.access_grant_die;
09481 (*i).user_access_grant_filesystem=u.access_grant_filesystem;
09482 (*i).user_access_grant_partyline=u.access_grant_partyline;
09483 (*i).user_access_grant_plusproc=u.access_grant_plusproc;
09484 (*i).user_access_grant_plususer=u.access_grant_plususer;
09485 (*i).user_access_grant_rehash=u.access_grant_rehash;
09486 (*i).user_access_to_replication=u.access_to_replication;
09487 (*i).user_access_grant_replication=u.access_grant_replication;
09488 (*i).user_access_grant_restart=u.access_grant_restart;
09489
09490 (*i).user_access_grant_private=u.access_grant_private;
09491 (*i).user_access_to_private=u.access_to_private;
09492
09493 (*i).user_access_to_upgrade=u.access_to_upgrade;
09494 (*i).user_access_grant_upgrade=u.access_grant_upgrade;
09495
09496 (*i).user_access_to_apply=u.access_to_apply;
09497 (*i).user_access_grant_apply=u.access_grant_apply;
09498
09499 (*i).user_access_to_can_send_all_users=u.access_to_can_send_all_users;
09500 (*i).user_access_grant_can_send_all_users=u.access_grant_can_send_all_users;
09501
09502 vector<s_group>::iterator i5;
09503 for(i5=u.groups.begin(); i5!=u.groups.end(); i5++)
09504 (*i).user_member_of.push_back((*i5).name);
09505
09506 (*i).edit_user++;
09507 }
09508 }
09509 if((*i).edit_user==-99) {
09510 vector<s_channel>::iterator i1;
09511 for(i1=r_channels.begin(); i1!=r_channels.end(); i1++) {
09512 vector<s_channel>::iterator i2;
09513 bool got=false;
09514 for(i2=(*i).user_channels.begin(); i2!=(*i).user_channels.end(); i2++) {
09515 if(!cmp_strings_case_insensitive((*i2).channel_name,(*i1).channel_name)) {
09516 got=true;
09517 break;
09518 }
09519 }
09520 if(!got) {
09521 s_channel ch;
09522 ch.channel_name=(*i1).channel_name;
09523 ch.username=(*i).user_name;
09524 ch.on_deop="";
09525 ch.on_ban="";
09526 ch.on_unban="";
09527 ch.on_kick="";
09528 ch.on_op="";
09529 ch.on_voice="";
09530 ch.on_devoice="";
09531 ch.on_creator="";
09532 ch.on_decreator="";
09533 ch.on_join="";
09534 ch.on_banned="";
09535 ch.on_flood="";
09536 ch.on_privmsg="";
09537 ch.on_notice="";
09538 ch.on_except="";
09539 ch.on_unexcept="";
09540 ch.on_invite="";
09541 ch.on_uninvite="";
09542 ch.on_not_invited="";
09543 ch.on_not_in_reop="";
09544 ch.on_other_mode="";
09545 ch.msg_flood.lines=0;
09546 ch.notice_flood.lines=0;
09547 ch.repeat_flood.lines=0;
09548 ch.nick_flood.lines=0;
09549 ch.join_flood.lines=0;
09550 ch.mode_flood.lines=0;
09551 ch.ctcp_flood.lines=0;
09552 ch.allow_dynamic.clear();
09553 ch.configured=false;
09554 ch.can_send_unknown_users=false;
09555 (*i).user_channels.push_back(ch);
09556 }
09557 }
09558
09559 (*i).edit_user=2;
09560 return;
09561 }
09562
09563
09564 if((*i).edit_user==1200) {
09565 string disp=lang_get_string(1,(*i).lang,485)+eol;
09566 int ec=0;
09567 dcc_send_msg((*i).socket,disp,ec);
09568 disp="";
09569 int i2=1;
09570 vector<string>::iterator i1;
09571 for(i1=(*i).user_member_of.begin(); i1!=(*i).user_member_of.end(); i1++, i2++) {
09572 char tmp[64];
09573 ltoa(i2,tmp,10);
09574 disp+=lang_get_string(1,(*i).lang,593);
09575 if(i2<10)
09576 disp+="0";
09577 if(i2<100)
09578 disp+="0";
09579 disp+=(string)tmp+": "+*i1;
09580 disp+=" (";
09581 vector<string>::iterator i3;
09582 bool access=false;
09583 map<string,string> vars;
09584 for(i3=(*i).access_grant_groups.begin(); i3!=(*i).access_grant_groups.end(); i3++)
09585 if(!(*i3).compare(logic_eval(*i1,vars))) {
09586 access=true;
09587 break;
09588 }
09589 disp+=access?lang_get_string(1,(*i).lang,120):lang_get_string(1,(*i).lang,121);
09590 disp+=")";
09591 disp+=eol;
09592 }
09593 dcc_send_msg((*i).socket,disp,ec);
09594 disp=lang_get_string(1,(*i).lang,484)+eol;
09595 dcc_send_msg((*i).socket,disp,ec);
09596 (*i).edit_user++;
09597 return;
09598 }
09599 if((*i).edit_user==1201) {
09600 string p=dcc_get_line((*i).in_buff);
09601 if(!p.compare(""))
09602 return;
09603 bool got=false;
09604 if(!p.compare(".")) {
09605 got=true;
09606 (*i).edit_user=2;
09607 return;
09608 }
09609 if(!p.compare(".add")) {
09610 got=true;
09611 string disp=lang_get_string(1,(*i).lang,486)+eol;
09612 vector<string>::iterator i1;
09613 for(i1=(*i).access_grant_groups.begin(); i1!=(*i).access_grant_groups.end(); i1++)
09614 disp+=(*i1)+eol;
09615 int ec=0;
09616 dcc_send_msg((*i).socket,disp,ec);
09617 (*i).edit_user=1202;
09618 return;
09619 }
09620 string p1, p2;
09621 int pos=0;
09622 for(unsigned int i1=0; i1<p.length(); i1++) {
09623 if(p[i1]==0x20) {
09624 pos=1;
09625 continue;
09626 }
09627 if(pos==0)
09628 p1+=p[i1];
09629 if(pos==1)
09630 p2+=p[i1];
09631 }
09632 if(!p1.compare(".remove")) {
09633 got=true;
09634 int line=atol(p2.c_str());
09635
09636 int i2=1;
09637 vector<string>::iterator i1;
09638 for(i1=(*i).user_member_of.begin(); i1!=(*i).user_member_of.end(); i1++, i2++)
09639 if(i2==line) {
09640 vector<string>::iterator i3;
09641 bool access=false;
09642 map<string,string> vars;
09643 for(i3=(*i).access_grant_groups.begin(); i3!=(*i).access_grant_groups.end(); i3++)
09644 if(!(*i3).compare(logic_eval(*i1,vars))) {
09645 access=true;
09646 break;
09647 }
09648 if(!access) {
09649 string disp=lang_get_string(1,(*i).lang,121)+eol;
09650 int ec=0;
09651 dcc_send_msg((*i).socket,disp,ec);
09652 (*i).edit_user=1200;
09653 return;
09654 }
09655 (*i).user_member_of.erase(i1);
09656 break;
09657 }
09658 (*i).edit_user=1200;
09659 return;
09660 }
09661 if(!got) {
09662 string disp=lang_get_string(1,(*i).lang,484)+eol;
09663 int ec=0;
09664 dcc_send_msg((*i).socket,disp,ec);
09665 }
09666 }
09667 if((*i).edit_user==1202) {
09668 string p=dcc_get_line((*i).in_buff);
09669 if(!p.compare(""))
09670 return;
09671
09672 vector<string>::iterator i1;
09673 bool got=false;
09674 for(i1=(*i).access_grant_groups.begin(); i1!=(*i).access_grant_groups.end(); i1++)
09675 if(!(*i1).compare(p)) {
09676 got=true;
09677 break;
09678 }
09679
09680 if(got) {
09681 p=(string)"\""+p+"\"";
09682 (*i).user_member_of.push_back(p);
09683 } else {
09684 string disp=lang_get_string(1,(*i).lang,487)+eol;
09685 int ec=0;
09686 dcc_send_msg((*i).socket,disp,ec);
09687 }
09688 (*i).edit_user=1200;
09689 return;
09690 }
09691
09692
09693 if((*i).edit_user==1300) {
09694 string disp=lang_get_string(1,(*i).lang,561)+eol;
09695 int ec=0;
09696 dcc_send_msg((*i).socket,disp,ec);
09697 disp="";
09698 int i2=1;
09699 map<string,string> vars;
09700
09701 map<string,string>::iterator i1;
09702 for(i1=(*i).user_meta.begin(); i1!=(*i).user_meta.end(); i1++, i2++) {
09703 char tmp[64];
09704 ltoa(i2,tmp,10);
09705 disp+=lang_get_string(1,(*i).lang,593);
09706 if(i2<10)
09707 disp+="0";
09708 if(i2<100)
09709 disp+="0";
09710 disp+=(string)tmp+": ";
09711 disp+=logic_eval((*i1).first,vars);
09712 disp+="=";
09713 disp+=logic_eval((*i1).second,vars);
09714 disp+=eol;
09715 }
09716 dcc_send_msg((*i).socket,disp,ec);
09717 disp=lang_get_string(1,(*i).lang,562)+eol;
09718 dcc_send_msg((*i).socket,disp,ec);
09719 (*i).edit_user++;
09720 }
09721 if((*i).edit_user==1301) {
09722 string p=dcc_get_line((*i).in_buff);
09723 if(!p.compare(""))
09724 return;
09725 bool got=false;
09726 if(!p.compare(".")) {
09727 got=true;
09728 (*i).edit_user=2;
09729 }
09730 if(!p.compare(".add")) {
09731 got=true;
09732 string disp=lang_get_string(1,(*i).lang,563)+eol;
09733 int ec=0;
09734 dcc_send_msg((*i).socket,disp,ec);
09735 (*i).edit_user=1302;
09736 }
09737 string p1, p2;
09738 int pos=0;
09739 for(unsigned int i1=0; i1<p.length(); i1++) {
09740 if(p[i1]==0x20) {
09741 pos=1;
09742 continue;
09743 }
09744 if(pos==0)
09745 p1+=p[i1];
09746 if(pos==1)
09747 p2+=p[i1];
09748 }
09749 if(!p1.compare(".remove")) {
09750 got=true;
09751 int line=atol(p2.c_str());
09752
09753 int i2=1;
09754 map<string,string>::iterator i1;
09755 for(i1=(*i).user_meta.begin(); i1!=(*i).user_meta.end(); i1++, i2++)
09756 if(i2==line) {
09757 (*i).user_meta.erase(i1);
09758 break;
09759 }
09760 (*i).edit_user=1300;
09761 }
09762 if(!got) {
09763 string disp=lang_get_string(1,(*i).lang,562)+eol;
09764 int ec=0;
09765 dcc_send_msg((*i).socket,disp,ec);
09766 }
09767 }
09768 if((*i).edit_user==1302) {
09769 string p=dcc_get_line((*i).in_buff);
09770 if(!p.compare(""))
09771 return;
09772 pair<string,string> pr;
09773 bool equal=false;
09774 for(unsigned int i1=0; i1<p.length(); i1++) {
09775 if(!equal && p[i1]=='=') {
09776 equal=true;
09777 continue;
09778 }
09779 if(!equal)
09780 pr.first+=p[i1];
09781 else
09782 pr.second+=p[i1];
09783 }
09784 pr.first=(string)"\""+pr.first+"\"";
09785 pr.second=(string)"\""+pr.second+"\"";
09786 (*i).user_meta.insert(pr);
09787 (*i).edit_user=1300;
09788 }
09789
09790 if((*i).edit_user==2) {
09791 string disp="";
09792 int ec=0;
09793
09794 for(int iii=91; iii<=98; iii++)
09795 disp+=lang_get_string(1,(*i).lang,iii)+eol;
09796
09797 disp+=lang_get_string(1,(*i).lang,591)+eol;
09798
09799 for(int iii=99; iii<=100; iii++)
09800 disp+=lang_get_string(1,(*i).lang,iii)+eol;
09801
09802 disp+=lang_get_string(1,(*i).lang,172)+eol;
09803 disp+=lang_get_string(1,(*i).lang,483)+eol;
09804 disp+=lang_get_string(1,(*i).lang,560)+eol;
09805
09806 dcc_send_msg((*i).socket,disp,ec);
09807
09808 int i3=1;
09809 vector<s_channel>::iterator i2;
09810 for(i2=(*i).user_channels.begin(); i2!=(*i).user_channels.end(); i2++, i3++) {
09811 disp=lang_get_string(1,(*i).lang,101)+eol;
09812 char tmp[64];
09813 ltoa(i3,tmp,10);
09814 disp=lang_subst(disp,tmp);
09815 disp=lang_subst(disp,(*i2).channel_name);
09816 vector<string>::iterator i3;
09817 bool access=false;
09818 map<string,string> vars;
09819 for(i3=(*i).access_to_channel.begin(); i3!=(*i).access_to_channel.end(); i3++)
09820 if(!cmp_strings_case_insensitive(*i3,logic_eval((*i2).channel_name,vars))) {
09821 access=true;
09822 break;
09823 }
09824 disp+=" ";
09825 if(access)
09826 disp+=lang_get_string(1,(*i).lang,464);
09827 else
09828 disp+=lang_get_string(1,(*i).lang,466);
09829 disp+=" ";
09830 if((*i2).configured)
09831 disp+=lang_get_string(1,(*i).lang,467);
09832 else
09833 disp+=lang_get_string(1,(*i).lang,465);
09834
09835 disp+=eol;
09836 dcc_send_msg((*i).socket,disp,ec);
09837 }
09838 disp=lang_get_string(1,(*i).lang,160)+eol;
09839
09840 if((*i).user_hosts.begin()==(*i).user_hosts.end())
09841 disp+=lang_get_string(1,(*i).lang,547)+eol;
09842 if((*i).user_fullnames.begin()==(*i).user_fullnames.end())
09843 disp+=lang_get_string(1,(*i).lang,548)+eol;
09844
09845 dcc_send_msg((*i).socket,disp,ec);
09846
09847 (*i).edit_user++;
09848 }
09849 if((*i).edit_user==3) {
09850 string p=dcc_get_line((*i).in_buff);
09851 if(!p.compare(""))
09852 return;
09853 bool got=false;
09854 if(!p.compare(".host")) {
09855 got=true;
09856 (*i).edit_user=100;
09857 }
09858 if(!p.compare(".dcchost")) {
09859 got=true;
09860 (*i).edit_user=200;
09861 }
09862 if(!p.compare(".fn")) {
09863 got=true;
09864 (*i).edit_user=300;
09865 }
09866 if(!p.compare(".pl")) {
09867 got=true;
09868 (*i).edit_user=400;
09869 }
09870 if(!p.compare(".atg")) {
09871 got=true;
09872 (*i).edit_user=500;
09873 }
09874 if(!p.compare(".aug")) {
09875 got=true;
09876 (*i).edit_user=600;
09877 }
09878 if(!p.compare(".atp")) {
09879 got=true;
09880 (*i).edit_user=700;
09881 }
09882 if(!p.compare(".agp")) {
09883 got=true;
09884 (*i).edit_user=800;
09885 }
09886 if(!p.compare(".aup")) {
09887 got=true;
09888 (*i).edit_user=1400;
09889 }
09890 if(!p.compare(".atc")) {
09891 got=true;
09892 (*i).edit_user=900;
09893 }
09894 if(!p.compare(".auc")) {
09895 got=true;
09896 (*i).edit_user=1000;
09897 }
09898 if(!p.compare(".commands")) {
09899 got=true;
09900 (*i).edit_user=1100;
09901 }
09902 if(!p.compare(".groups")) {
09903 got=true;
09904 (*i).edit_user=1200;
09905 }
09906 if(!p.compare(".meta")) {
09907 got=true;
09908 (*i).edit_user=1300;
09909 }
09910 vector<s_channel>::iterator i1;
09911 int i2=1;
09912 for(i1=(*i).user_channels.begin(); i1!=(*i).user_channels.end(); i1++, i2++) {
09913 char tmp[64];
09914 ltoa(i2,tmp,10);
09915 string pp=(string)"."+tmp;
09916 if(!p.compare(pp)) {
09917 got=true;
09918 (*i).edit_user=2000;
09919 (*i).edit_channel_num=i2;
09920 break;
09921 }
09922 }
09923 if(!p.compare(".finish")) {
09924 got=true;
09925
09926 string disp=lang_get_string(1,(*i).lang,161)+eol;
09927 int ec=0;
09928 dcc_send_msg((*i).socket,disp,ec);
09929
09930 (*i).edit_user++;
09931 }
09932 if(!got) {
09933 string disp=lang_get_string(1,(*i).lang,106)+eol;
09934 int ec=0;
09935 dcc_send_msg((*i).socket,disp,ec);
09936 }
09937 }
09938 if((*i).edit_user==4) {
09939 string p=dcc_get_line((*i).in_buff);
09940 if(!p.compare(""))
09941 return;
09942 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) {
09943 string disp=lang_get_string(1,(*i).lang,161)+eol;
09944 int ec=0;
09945 dcc_send_msg((*i).socket,disp,ec);
09946 } else {
09947 if(!p.compare("y") || !p.compare("Y")) {
09948 if((*i).user_hosts.begin()==(*i).user_hosts.end() || (*i).user_fullnames.begin()==(*i).user_fullnames.end()) {
09949 string disp=lang_get_string(1,(*i).lang,549)+eol;
09950 int ec=0;
09951 dcc_send_msg((*i).socket,disp,ec);
09952 (*i).edit_user--;
09953 return;
09954 }
09955
09956 bool was_host_bot;
09957 {
09958 s_user u;
09959 vector<s_channel> chs;
09960 logic_partyline_get_user((*i).user_name,u,chs);
09961 was_host_bot=u.host_bot;
09962 }
09963
09964 s_user u;
09965
09966 u.name=(*i).user_name;
09967
09968 vector<string>::iterator i1;
09969 for(i1=(*i).user_member_of.begin(); i1!=(*i).user_member_of.end(); i1++) {
09970 s_group g;
09971 g.name=*i1;
09972 u.groups.push_back(g);
09973 }
09974 for(i1=(*i).user_hosts.begin(); i1!=(*i).user_hosts.end(); i1++)
09975 u.hostmask.push_back(*i1);
09976 vector<s_dcc_host>::iterator i2;
09977 for(i2=(*i).user_dcc_hosts.begin(); i2!=(*i).user_dcc_hosts.end(); i2++)
09978 u.dcc_hosts.push_back(*i2);
09979 for(i1=(*i).user_fullnames.begin(); i1!=(*i).user_fullnames.end(); i1++)
09980 u.fullname.push_back(*i1);
09981 u.access_to_partyline=(*i).user_access_to_partyline;
09982 u.access_grant_partyline=(*i).user_access_grant_partyline;
09983 u.access_to_backup=(*i).user_access_to_backup;
09984 u.access_to_rehash=(*i).user_access_to_rehash;
09985 u.access_grant_backup=(*i).user_access_grant_backup;
09986 u.access_grant_rehash=(*i).user_access_grant_rehash;
09987
09988 u.access_to_plususer=(*i).user_access_to_plususer;
09989 u.access_grant_plususer=(*i).user_access_grant_plususer;
09990
09991 u.access_to_plusproc=(*i).user_access_to_plusproc;
09992 u.access_grant_plusproc=(*i).user_access_grant_plusproc;
09993
09994 u.access_to_restart=(*i).user_access_to_restart;
09995 u.access_grant_restart=(*i).user_access_grant_restart;
09996 u.access_to_die=(*i).user_access_to_die;
09997 u.access_grant_die=(*i).user_access_grant_die;
09998
09999 u.access_to_filesystem=(*i).user_access_to_filesystem;
10000 u.access_grant_filesystem=(*i).user_access_grant_filesystem;
10001
10002 u.access_to_private=(*i).user_access_to_private;
10003 u.access_grant_private=(*i).user_access_grant_private;
10004
10005 u.access_to_upgrade=(*i).user_access_to_upgrade;
10006 u.access_grant_upgrade=(*i).user_access_grant_upgrade;
10007
10008 u.access_to_apply=(*i).user_access_to_apply;
10009 u.access_grant_apply=(*i).user_access_grant_apply;
10010
10011 u.access_to_replication=(*i).user_access_to_replication;
10012 u.access_grant_replication=(*i).user_access_grant_replication;
10013
10014 u.access_to_can_send_all_users=(*i).user_access_to_can_send_all_users;
10015 u.access_grant_can_send_all_users=(*i).user_access_grant_can_send_all_users;
10016
10017 u.access_to_can_send_unknown_users=(*i).user_access_to_can_send_unknown_users;
10018 u.access_grant_can_send_unknown_users=(*i).user_access_grant_can_send_unknown_users;
10019
10020 for(i1=(*i).user_access_to_groups.begin(); i1!=(*i).user_access_to_groups.end(); i1++)
10021 u.access_to_group.push_back(*i1);
10022 for(i1=(*i).user_access_grant_groups.begin(); i1!=(*i).user_access_grant_groups.end(); i1++)
10023 u.access_grant_group.push_back(*i1);
10024 for(i1=(*i).user_access_to_proc_groups.begin(); i1!=(*i).user_access_to_proc_groups.end(); i1++)
10025 u.access_to_proc.push_back(*i1);
10026 for(i1=(*i).user_access_grant_proc_groups.begin(); i1!=(*i).user_access_grant_proc_groups.end(); i1++)
10027 u.access_grant_procedure.push_back(*i1);
10028 for(i1=(*i).user_access_usage_proc_groups.begin(); i1!=(*i).user_access_usage_proc_groups.end(); i1++)
10029 u.access_usage_procedure.push_back(*i1);
10030 for(i1=(*i).user_access_to_channel.begin(); i1!=(*i).user_access_to_channel.end(); i1++)
10031 u.access_to_channel.push_back(*i1);
10032 for(i1=(*i).user_access_grant_channel.begin(); i1!=(*i).user_access_grant_channel.end(); i1++)
10033 u.access_grant_channel.push_back(*i1);
10034
10035 map<string,string>::iterator i6;
10036 for(i6=(*i).user_meta.begin(); i6!=(*i).user_meta.end(); i6++)
10037 u.meta.insert(*i6);
10038
10039 vector<s_channel> chs;
10040 vector<s_channel>::iterator i3;
10041 for(i3=(*i).user_channels.begin(); i3!=(*i).user_channels.end(); i3++) {
10042 if(!(*i3).configured)
10043 continue;
10044 (*i3).username=(*i).user_name;
10045 chs.push_back(*i3);
10046 }
10047
10048 u.partyline_msg_flood=(*i).user_partyline_msg_flood;
10049
10050 time(&u.last_changed);
10051 logic_partyline_remove_user(u.name);
10052 u.host_bot=was_host_bot;
10053 u.host_unknown=false;
10054 u.is_template=false;
10055 logic_partyline_add_user(u,chs);
10056
10057 string disp=lang_get_string(1,(*i).lang,163)+eol;
10058 int ec=0;
10059 dcc_send_msg((*i).socket,disp,ec);
10060 } else {
10061 string disp=lang_get_string(1,(*i).lang,162)+eol;
10062 int ec=0;
10063 dcc_send_msg((*i).socket,disp,ec);
10064 }
10065 (*i).edit_user=0;
10066 }
10067 }
10068
10069 if((*i).edit_user==100) {
10070 string disp=lang_get_string(1,(*i).lang,107)+eol;
10071 int ec=0;
10072 dcc_send_msg((*i).socket,disp,ec);
10073 disp="";
10074 int i2=1;
10075 vector<string>::iterator i1;
10076 for(i1=(*i).user_hosts.begin(); i1!=(*i).user_hosts.end(); i1++, i2++) {
10077 char tmp[64];
10078 ltoa(i2,tmp,10);
10079 disp+=lang_get_string(1,(*i).lang,593);
10080 if(i2<10)
10081 disp+="0";
10082 if(i2<100)
10083 disp+="0";
10084 disp+=(string)tmp+": "+*i1+eol;
10085 }
10086 dcc_send_msg((*i).socket,disp,ec);
10087 disp=lang_get_string(1,(*i).lang,108)+eol;
10088 dcc_send_msg((*i).socket,disp,ec);
10089 (*i).edit_user++;
10090 }
10091 if((*i).edit_user==101) {
10092 string p=dcc_get_line((*i).in_buff);
10093 if(!p.compare(""))
10094 return;
10095 bool got=false;
10096 if(!p.compare(".")) {
10097 got=true;
10098 if((*i).user_hosts.begin()==(*i).user_hosts.end()) {
10099 string disp=lang_get_string(1,(*i).lang,109)+eol;
10100 int ec=0;
10101 dcc_send_msg((*i).socket,disp,ec);
10102 } else {
10103 (*i).edit_user=2;
10104 }
10105 }
10106 if(!p.compare(".add")) {
10107 got=true;
10108 string disp=lang_get_string(1,(*i).lang,110)+eol;
10109 int ec=0;
10110 dcc_send_msg((*i).socket,disp,ec);
10111 (*i).edit_user=102;
10112 return;
10113 }
10114 string p1, p2;
10115 int pos=0;
10116 for(unsigned int i1=0; i1<p.length(); i1++) {
10117 if(p[i1]==0x20) {
10118 pos=1;
10119 continue;
10120 }
10121 if(pos==0)
10122 p1+=p[i1];
10123 if(pos==1)
10124 p2+=p[i1];
10125 }
10126 if(!p1.compare(".remove")) {
10127 got=true;
10128 int line=atol(p2.c_str());
10129
10130 int i2=1;
10131 vector<string>::iterator i1;
10132 for(i1=(*i).user_hosts.begin(); i1!=(*i).user_hosts.end(); i1++, i2++)
10133 if(i2==line) {
10134 (*i).user_hosts.erase(i1);
10135 break;
10136 }
10137 (*i).edit_user=100;
10138 }
10139 if(!got) {
10140 string disp=lang_get_string(1,(*i).lang,108)+eol;
10141 int ec=0;
10142 dcc_send_msg((*i).socket,disp,ec);
10143 }
10144 }
10145 if((*i).edit_user==102) {
10146 string p=dcc_get_line((*i).in_buff);
10147 if(!p.compare(""))
10148 return;
10149 p=(string)"\""+p+"\"";
10150 (*i).user_hosts.push_back(p);
10151 (*i).edit_user=100;
10152 }
10153
10154
10155 if((*i).edit_user==200) {
10156 string disp=lang_get_string(1,(*i).lang,111)+eol;
10157 int ec=0;
10158 dcc_send_msg((*i).socket,disp,ec);
10159 disp="";
10160 int i2=1;
10161 vector<s_dcc_host>::iterator i1;
10162 for(i1=(*i).user_dcc_hosts.begin(); i1!=(*i).user_dcc_hosts.end(); i1++, i2++) {
10163 char tmp[64];
10164 ltoa(i2,tmp,10);
10165 disp+=lang_get_string(1,(*i).lang,593);
10166 if(i2<10)
10167 disp+="0";
10168 if(i2<100)
10169 disp+="0";
10170 char tmp2[64];
10171 ltoa((*i1).group,tmp2,10);
10172 disp+=(string)tmp+": "+(string)tmp2+";"+(*i1).host+eol;
10173 }
10174 dcc_send_msg((*i).socket,disp,ec);
10175 disp=lang_get_string(1,(*i).lang,108)+eol;
10176 dcc_send_msg((*i).socket,disp,ec);
10177 (*i).edit_user++;
10178 }
10179 if((*i).edit_user==201) {
10180 string p=dcc_get_line((*i).in_buff);
10181 if(!p.compare(""))
10182 return;
10183 bool got=false;
10184 if(!p.compare(".")) {
10185 got=true;
10186 (*i).edit_user=2;
10187 }
10188 if(!p.compare(".add")) {
10189 got=true;
10190 string disp=lang_get_string(1,(*i).lang,112)+eol;
10191 int ec=0;
10192 dcc_send_msg((*i).socket,disp,ec);
10193 (*i).edit_user=202;
10194 }
10195 string p1, p2;
10196 int pos=0;
10197 for(unsigned int i1=0; i1<p.length(); i1++) {
10198 if(p[i1]==0x20) {
10199 pos=1;
10200 continue;
10201 }
10202 if(pos==0)
10203 p1+=p[i1];
10204 if(pos==1)
10205 p2+=p[i1];
10206 }
10207 if(!p1.compare(".remove")) {
10208 got=true;
10209 int line=atol(p2.c_str());
10210
10211 int i2=1;
10212 vector<s_dcc_host>::iterator i1;
10213 for(i1=(*i).user_dcc_hosts.begin(); i1!=(*i).user_dcc_hosts.end(); i1++, i2++)
10214 if(i2==line) {
10215 (*i).user_dcc_hosts.erase(i1);
10216 break;
10217 }
10218 (*i).edit_user=200;
10219 }
10220 if(!got) {
10221 string disp=lang_get_string(1,(*i).lang,108)+eol;
10222 int ec=0;
10223 dcc_send_msg((*i).socket,disp,ec);
10224 }
10225 }
10226 if((*i).edit_user==202) {
10227 string p=dcc_get_line((*i).in_buff);
10228 if(!p.compare(""))
10229 return;
10230 (*i).user_dcc_host.group=atol(p.c_str());
10231 string disp=lang_get_string(1,(*i).lang,113)+eol;
10232 int ec=0;
10233 dcc_send_msg((*i).socket,disp,ec);
10234 (*i).edit_user++;
10235 }
10236 if((*i).edit_user==203) {
10237 string p=dcc_get_line((*i).in_buff);
10238 if(!p.compare(""))
10239 return;
10240 p=(string)"\""+p+"\"";
10241 (*i).user_dcc_host.host=p;
10242 (*i).user_dcc_hosts.push_back((*i).user_dcc_host);
10243 (*i).edit_user=200;
10244 }
10245
10246
10247 if((*i).edit_user==300) {
10248 string disp=lang_get_string(1,(*i).lang,114)+eol;
10249 int ec=0;
10250 dcc_send_msg((*i).socket,disp,ec);
10251 disp="";
10252 int i2=1;
10253 vector<string>::iterator i1;
10254 for(i1=(*i).user_fullnames.begin(); i1!=(*i).user_fullnames.end(); i1++, i2++) {
10255 char tmp[64];
10256 ltoa(i2,tmp,10);
10257 disp+=lang_get_string(1,(*i).lang,593);
10258 if(i2<10)
10259 disp+="0";
10260 if(i2<100)
10261 disp+="0";
10262 disp+=(string)tmp+": "+*i1+eol;
10263 }
10264 dcc_send_msg((*i).socket,disp,ec);
10265 disp=lang_get_string(1,(*i).lang,115)+eol;
10266 dcc_send_msg((*i).socket,disp,ec);
10267 (*i).edit_user++;
10268 }
10269 if((*i).edit_user==301) {
10270 string p=dcc_get_line((*i).in_buff);
10271 if(!p.compare(""))
10272 return;
10273 bool got=false;
10274 if(!p.compare(".")) {
10275 if((*i).user_fullnames.begin()==(*i).user_fullnames.end()) {
10276 string disp=lang_get_string(1,(*i).lang,546)+eol;
10277 int ec=0;
10278 dcc_send_msg((*i).socket,disp,ec);
10279 return;
10280 } else {
10281 got=true;
10282 (*i).edit_user=2;
10283 }
10284 }
10285 if(!p.compare(".add")) {
10286 got=true;
10287 string disp=lang_get_string(1,(*i).lang,116)+eol;
10288 int ec=0;
10289 dcc_send_msg((*i).socket,disp,ec);
10290 (*i).edit_user=302;
10291 }
10292 string p1, p2;
10293 int pos=0;
10294 for(unsigned int i1=0; i1<p.length(); i1++) {
10295 if(p[i1]==0x20) {
10296 pos=1;
10297 continue;
10298 }
10299 if(pos==0)
10300 p1+=p[i1];
10301 if(pos==1)
10302 p2+=p[i1];
10303 }
10304 if(!p1.compare(".remove")) {
10305 got=true;
10306 int line=atol(p2.c_str());
10307
10308 int i2=1;
10309 vector<string>::iterator i1;
10310 for(i1=(*i).user_fullnames.begin(); i1!=(*i).user_fullnames.end(); i1++, i2++)
10311 if(i2==line) {
10312 (*i).user_fullnames.erase(i1);
10313 break;
10314 }
10315 (*i).edit_user=300;
10316 }
10317 if(!got) {
10318 string disp=lang_get_string(1,(*i).lang,115)+eol;
10319 int ec=0;
10320 dcc_send_msg((*i).socket,disp,ec);
10321 }
10322 }
10323 if((*i).edit_user==302) {
10324 string p=dcc_get_line((*i).in_buff);
10325 if(!p.compare(""))
10326 return;
10327 p=(string)"\""+p+"\"";
10328 (*i).user_fullnames.push_back(p);
10329 (*i).edit_user=300;
10330 }
10331
10332
10333 if((*i).edit_user==400) {
10334 if(!(*i).access_grant_partyline) {
10335 string disp=lang_get_string(1,(*i).lang,118)+eol;
10336 int ec=0;
10337 dcc_send_msg((*i).socket,disp,ec);
10338 (*i).edit_user=2;
10339 } else {
10340 string disp=lang_get_string(1,(*i).lang,117)+eol;
10341 int ec=0;
10342 dcc_send_msg((*i).socket,disp,ec);
10343 (*i).edit_user++;
10344 }
10345 }
10346 if((*i).edit_user==401) {
10347 string p=dcc_get_line((*i).in_buff);
10348 if(!p.compare(""))
10349 return;
10350 bool got=false;
10351 if(!p.compare("y") || !p.compare("Y")) {
10352 (*i).user_access_to_partyline=true;
10353 got=true;
10354 }
10355 if(!p.compare("n") || !p.compare("N")) {
10356 (*i).user_access_to_partyline=false;
10357 got=true;
10358 }
10359 (*i).edit_user++;
10360 if(!got)
10361 (*i).edit_user=400;
10362 }
10363 if((*i).edit_user==402) {
10364 string disp=lang_get_string(1,(*i).lang,200)+eol;
10365 int ec=0;
10366 dcc_send_msg((*i).socket,disp,ec);
10367 (*i).edit_user++;
10368 }
10369 if((*i).edit_user==403) {
10370 string p=dcc_get_line((*i).in_buff);
10371 if(!p.compare(""))
10372 return;
10373 bool got=false;
10374 if(!p.compare(".")) {
10375 got=true;
10376 (*i).edit_user++;
10377 } else {
10378 if(!p.compare("0"))
10379 p="0 0";
10380 string lines, seconds;
10381 int pos=0;
10382 for(unsigned int i1=0; i1<p.length(); i1++) {
10383 if(p[i1]==0x20) {
10384 pos++;
10385 continue;
10386 }
10387 if(pos==0)
10388 lines+=p[i1];
10389 if(pos==1)
10390 seconds+=p[i1];
10391 }
10392 string disp;
10393 (*i).user_partyline_msg_flood.lines=atol(lines.c_str());
10394 (*i).user_partyline_msg_flood.seconds=atol(seconds.c_str());
10395 (*i).edit_user++;
10396 got=true;
10397 }
10398 if(!got)
10399 (*i).edit_user=402;
10400 }
10401 if((*i).edit_user==404) {
10402 (*i).edit_user=2;
10403 }
10404
10405 if((*i).edit_user==500) {
10406 string disp=lang_get_string(1,(*i).lang,119)+eol;
10407 int ec=0;
10408 dcc_send_msg((*i).socket,disp,ec);
10409 disp="";
10410 int i2=1;
10411 vector<string>::iterator i1;
10412 for(i1=(*i).user_access_to_groups.begin(); i1!=(*i).user_access_to_groups.end(); i1++, i2++) {
10413 char tmp[64];
10414 ltoa(i2,tmp,10);
10415 disp+=lang_get_string(1,(*i).lang,593);
10416 if(i2<10)
10417 disp+="0";
10418 if(i2<100)
10419 disp+="0";
10420 bool access=false;
10421 vector<string>::iterator i3;
10422 for(i3=(*i).access_grant_groups.begin(); i3!=(*i).access_grant_groups.end(); i3++) {
10423 if(!(*i3).compare(*i1) || !(*i3).compare("*")) {
10424 access=true;
10425 break;
10426 }
10427 }
10428 char tmp2[128];
10429 if(access)
10430 strcpy(tmp2,lang_get_string(1,(*i).lang,120).c_str());
10431 else
10432 strcpy(tmp2,lang_get_string(1,(*i).lang,121).c_str());
10433 disp+=(string)tmp+": "+*i1+" = "+tmp2+eol;
10434 }
10435 dcc_send_msg((*i).socket,disp,ec);
10436 disp=lang_get_string(1,(*i).lang,122)+eol;
10437 dcc_send_msg((*i).socket,disp,ec);
10438 (*i).edit_user++;
10439 }
10440 if((*i).edit_user==501) {
10441 string p=dcc_get_line((*i).in_buff);
10442 if(!p.compare(""))
10443 return;
10444 bool got=false;
10445 if(!p.compare(".")) {
10446 got=true;
10447 (*i).edit_user=2;
10448 }
10449 if(!p.compare(".add")) {
10450 got=true;
10451 string disp=lang_get_string(1,(*i).lang,124)+eol;
10452 int ec=0;
10453 dcc_send_msg((*i).socket,disp,ec);
10454
10455 disp="";
10456 vector<string>::iterator i3;
10457 for(i3=(*i).access_grant_groups.begin(); i3!=(*i).access_grant_groups.end(); i3++)
10458 disp+=*i3+eol;
10459 if((*i).access_grant_groups.begin()==(*i).access_grant_groups.end()) {
10460 disp=lang_get_string(1,(*i).lang,124)+eol;
10461 dcc_send_msg((*i).socket,disp,ec);
10462 (*i).edit_user=500;
10463 } else {
10464 dcc_send_msg((*i).socket,disp,ec);
10465 disp=lang_get_string(1,(*i).lang,125)+eol;
10466 dcc_send_msg((*i).socket,disp,ec);
10467 (*i).edit_user=502;
10468 }
10469 }
10470 string p1, p2;
10471 int pos=0;
10472 for(unsigned int i1=0; i1<p.length(); i1++) {
10473 if(p[i1]==0x20) {
10474 pos=1;
10475 continue;
10476 }
10477 if(pos==0)
10478 p1+=p[i1];
10479 if(pos==1)
10480 p2+=p[i1];
10481 }
10482 if(!p1.compare(".remove")) {
10483 got=true;
10484 int line=atol(p2.c_str());
10485
10486 int i2=1;
10487 vector<string>::iterator i1;
10488 bool access=false;
10489 for(i1=(*i).user_access_to_groups.begin(); i1!=(*i).user_access_to_groups.end(); i1++, i2++) {
10490 vector<string>::iterator i3;
10491 for(i3=(*i).access_grant_groups.begin(); i3!=(*i).access_grant_groups.end(); i3++) {
10492 if((!(*i3).compare(*i1) || !(*i3).compare("*")) && i2==line) {
10493 access=true;
10494 (*i).user_access_to_groups.erase(i1);
10495 break;
10496 }
10497 }
10498 if(access)
10499 break;
10500 }
10501 if(!access) {
10502 string disp=lang_get_string(1,(*i).lang,123)+eol;
10503 int ec=0;
10504 dcc_send_msg((*i).socket,disp,ec);
10505 }
10506 (*i).edit_user=500;
10507 }
10508 if(!got) {
10509 string disp=lang_get_string(1,(*i).lang,122)+eol;
10510 int ec=0;
10511 dcc_send_msg((*i).socket,disp,ec);
10512 }
10513 }
10514 if((*i).edit_user==502) {
10515 string p=dcc_get_line((*i).in_buff);
10516 if(!p.compare(""))
10517 return;
10518 vector<string>::iterator i3;
10519 bool access=false;
10520 for(i3=(*i).access_grant_groups.begin(); i3!=(*i).access_grant_groups.end(); i3++)
10521 if((*i3).compare(p) || !(*i3).compare("*")) {
10522 access=true;
10523 break;
10524 }
10525 if(p.compare("*"))
10526 p=(string)"\""+p+"\"";
10527 if(!access) {
10528 string disp=lang_get_string(1,(*i).lang,123)+eol;
10529 int ec=0;
10530 dcc_send_msg((*i).socket,disp,ec);
10531 } else {
10532 (*i).user_access_to_groups.push_back(p);
10533 }
10534 (*i).edit_user=500;
10535 }
10536
10537 if((*i).edit_user==600) {
10538 string disp=lang_get_string(1,(*i).lang,119)+eol;
10539 int ec=0;
10540 dcc_send_msg((*i).socket,disp,ec);
10541 disp="";
10542 int i2=1;
10543 vector<string>::iterator i1;
10544 for(i1=(*i).user_access_grant_groups.begin(); i1!=(*i).user_access_grant_groups.end(); i1++, i2++) {
10545 char tmp[64];
10546 ltoa(i2,tmp,10);
10547 disp+=lang_get_string(1,(*i).lang,593);
10548 if(i2<10)
10549 disp+="0";
10550 if(i2<100)
10551 disp+="0";
10552 bool access=false;
10553 vector<string>::iterator i3;
10554 for(i3=(*i).access_grant_groups.begin(); i3!=(*i).access_grant_groups.end(); i3++) {
10555 if(!(*i3).compare(*i1) || !(*i3).compare("*")) {
10556 access=true;
10557 break;
10558 }
10559 }
10560 char tmp2[128];
10561 if(access)
10562 strcpy(tmp2,lang_get_string(1,(*i).lang,120).c_str());
10563 else
10564 strcpy(tmp2,lang_get_string(1,(*i).lang,121).c_str());
10565 disp+=(string)tmp+": "+*i1+" = "+tmp2+eol;
10566 }
10567 dcc_send_msg((*i).socket,disp,ec);
10568 disp=lang_get_string(1,(*i).lang,122)+eol;
10569 dcc_send_msg((*i).socket,disp,ec);
10570 (*i).edit_user++;
10571 }
10572 if((*i).edit_user==601) {
10573 string p=dcc_get_line((*i).in_buff);
10574 if(!p.compare(""))
10575 return;
10576 bool got=false;
10577 if(!p.compare(".")) {
10578 got=true;
10579 (*i).edit_user=2;
10580 }
10581 if(!p.compare(".add")) {
10582 got=true;
10583 string disp=lang_get_string(1,(*i).lang,124)+eol;
10584 int ec=0;
10585 dcc_send_msg((*i).socket,disp,ec);
10586
10587 disp="";
10588 vector<string>::iterator i3;
10589 for(i3=(*i).access_grant_groups.begin(); i3!=(*i).access_grant_groups.end(); i3++)
10590 disp+=*i3+eol;
10591 if((*i).access_grant_groups.begin()==(*i).access_grant_groups.end()) {
10592 disp=lang_get_string(1,(*i).lang,124)+eol;
10593 dcc_send_msg((*i).socket,disp,ec);
10594 (*i).edit_user=600;
10595 } else {
10596 dcc_send_msg((*i).socket,disp,ec);
10597 disp=lang_get_string(1,(*i).lang,125)+eol;
10598 dcc_send_msg((*i).socket,disp,ec);
10599 (*i).edit_user=602;
10600 }
10601 }
10602 string p1, p2;
10603 int pos=0;
10604 for(unsigned int i1=0; i1<p.length(); i1++) {
10605 if(p[i1]==0x20) {
10606 pos=1;
10607 continue;
10608 }
10609 if(pos==0)
10610 p1+=p[i1];
10611 if(pos==1)
10612 p2+=p[i1];
10613 }
10614 if(!p1.compare(".remove")) {
10615 got=true;
10616 int line=atol(p2.c_str());
10617
10618 int i2=1;
10619 bool access=false;
10620 vector<string>::iterator i1;
10621 vector<string>::iterator i3;
10622 for(i1=(*i).user_access_grant_groups.begin(); i1!=(*i).user_access_grant_groups.end(); i1++, i2++) {
10623 for(i3=(*i).access_grant_groups.begin(); i3!=(*i).access_grant_groups.end(); i3++) {
10624 if((!(*i1).compare(*i3) || !(*i3).compare("*")) && i2==line) {
10625 access=true;
10626 (*i).user_access_grant_groups.erase(i1);
10627 break;
10628 }
10629 }
10630 }
10631 if(!access) {
10632 string disp=lang_get_string(1,(*i).lang,123)+eol;
10633 int ec=0;
10634 dcc_send_msg((*i).socket,disp,ec);
10635 }
10636 (*i).edit_user=600;
10637 }
10638 if(!got) {
10639 string disp=lang_get_string(1,(*i).lang,122)+eol;
10640 int ec=0;
10641 dcc_send_msg((*i).socket,disp,ec);
10642 }
10643 }
10644 if((*i).edit_user==602) {
10645 string p=dcc_get_line((*i).in_buff);
10646 if(!p.compare(""))
10647 return;
10648 vector<string>::iterator i3;
10649 bool access=false;
10650 for(i3=(*i).access_grant_groups.begin(); i3!=(*i).access_grant_groups.end(); i3++)
10651 if((*i3).compare(p) || !(*i3).compare("*")) {
10652 access=true;
10653 break;
10654 }
10655 if(p.compare("*"))
10656 p=(string)"\""+p+"\"";
10657 if(!access) {
10658 string disp=lang_get_string(1,(*i).lang,123)+eol;
10659 int ec=0;
10660 dcc_send_msg((*i).socket,disp,ec);
10661 } else {
10662 (*i).user_access_to_groups.push_back(p);
10663 }
10664 (*i).edit_user=600;
10665 }
10666
10667 if((*i).edit_user==700) {
10668 string disp=lang_get_string(1,(*i).lang,126)+eol;
10669 int ec=0;
10670 dcc_send_msg((*i).socket,disp,ec);
10671 disp="";
10672 int i2=1;
10673 vector<string>::iterator i1;
10674 for(i1=(*i).user_access_to_proc_groups.begin(); i1!=(*i).user_access_to_proc_groups.end(); i1++, i2++) {
10675 char tmp[64];
10676 ltoa(i2,tmp,10);
10677 disp+=lang_get_string(1,(*i).lang,593);
10678 if(i2<10)
10679 disp+="0";
10680 if(i2<100)
10681 disp+="0";
10682 bool access=false;
10683 vector<string>::iterator i3;
10684 for(i3=(*i).access_grant_proc_groups.begin(); i3!=(*i).access_grant_proc_groups.end(); i3++) {
10685 if(!(*i3).compare(*i1) || !(*i3).compare("*")) {
10686 access=true;
10687 break;
10688 }
10689 }
10690 char tmp2[128];
10691 if(access)
10692 strcpy(tmp2,lang_get_string(1,(*i).lang,120).c_str());
10693 else
10694 strcpy(tmp2,lang_get_string(1,(*i).lang,121).c_str());
10695 disp+=(string)tmp+": "+*i1+" = "+tmp2+eol;
10696 }
10697 dcc_send_msg((*i).socket,disp,ec);
10698 disp=lang_get_string(1,(*i).lang,122)+eol;
10699 dcc_send_msg((*i).socket,disp,ec);
10700 (*i).edit_user++;
10701 }
10702 if((*i).edit_user==701) {
10703 string p=dcc_get_line((*i).in_buff);
10704 if(!p.compare(""))
10705 return;
10706 bool got=false;
10707 if(!p.compare(".")) {
10708 got=true;
10709 (*i).edit_user=2;
10710 }
10711 if(!p.compare(".add")) {
10712 got=true;
10713 string disp=lang_get_string(1,(*i).lang,124)+eol;
10714 int ec=0;
10715 dcc_send_msg((*i).socket,disp,ec);
10716
10717 disp="";
10718 vector<string>::iterator i3;
10719 for(i3=(*i).access_grant_proc_groups.begin(); i3!=(*i).access_grant_proc_groups.end(); i3++)
10720 disp+=*i3+eol;
10721 if((*i).access_grant_proc_groups.begin()==(*i).access_grant_proc_groups.end()) {
10722 disp=lang_get_string(1,(*i).lang,127)+eol;
10723 dcc_send_msg((*i).socket,disp,ec);
10724 (*i).edit_user=700;
10725 } else {
10726 dcc_send_msg((*i).socket,disp,ec);
10727 disp=lang_get_string(1,(*i).lang,125)+eol;
10728 dcc_send_msg((*i).socket,disp,ec);
10729 (*i).edit_user=702;
10730 }
10731 }
10732 string p1, p2;
10733 int pos=0;
10734 for(unsigned int i1=0; i1<p.length(); i1++) {
10735 if(p[i1]==0x20) {
10736 pos=1;
10737 continue;
10738 }
10739 if(pos==0)
10740 p1+=p[i1];
10741 if(pos==1)
10742 p2+=p[i1];
10743 }
10744 if(!p1.compare(".remove")) {
10745 got=true;
10746 int line=atol(p2.c_str());
10747
10748 int i2=1;
10749 vector<string>::iterator i1;
10750 bool access=false;
10751 for(i1=(*i).user_access_to_proc_groups.begin(); i1!=(*i).user_access_to_proc_groups.end(); i1++, i2++) {
10752 vector<string>::iterator i3;
10753 for(i3=(*i).access_grant_proc_groups.begin(); i3!=(*i).access_grant_proc_groups.end(); i3++) {
10754 if((!(*i3).compare(*i1) || !(*i3).compare("*")) && i2==line) {
10755 access=true;
10756 (*i).user_access_to_proc_groups.erase(i1);
10757 break;
10758 }
10759 }
10760 if(access)
10761 break;
10762 }
10763 if(!access) {
10764 string disp=lang_get_string(1,(*i).lang,123)+eol;
10765 int ec=0;
10766 dcc_send_msg((*i).socket,disp,ec);
10767 }
10768 (*i).edit_user=700;
10769 }
10770 if(!got) {
10771 string disp=lang_get_string(1,(*i).lang,122)+eol;
10772 int ec=0;
10773 dcc_send_msg((*i).socket,disp,ec);
10774 }
10775 }
10776 if((*i).edit_user==702) {
10777 string p=dcc_get_line((*i).in_buff);
10778 if(!p.compare(""))
10779 return;
10780 vector<string>::iterator i3;
10781 bool access=false;
10782 for(i3=(*i).access_grant_proc_groups.begin(); i3!=(*i).access_grant_proc_groups.end(); i3++)
10783 if((*i3).compare(p) || !(*i3).compare("*")) {
10784 access=true;
10785 break;
10786 }
10787 if(p.compare("*"))
10788 p=(string)"\""+p+"\"";
10789 if(!access) {
10790 string disp=lang_get_string(1,(*i).lang,123)+eol;
10791 int ec=0;
10792 dcc_send_msg((*i).socket,disp,ec);
10793 } else {
10794 (*i).user_access_to_proc_groups.push_back(p);
10795 }
10796 (*i).edit_user=700;
10797 }
10798
10799 if((*i).edit_user==800) {
10800 string disp=lang_get_string(1,(*i).lang,128)+eol;
10801 int ec=0;
10802 dcc_send_msg((*i).socket,disp,ec);
10803 disp="";
10804 int i2=1;
10805 vector<string>::iterator i1;
10806 for(i1=(*i).user_access_grant_proc_groups.begin(); i1!=(*i).user_access_grant_proc_groups.end(); i1++, i2++) {
10807 char tmp[64];
10808 ltoa(i2,tmp,10);
10809 disp+=lang_get_string(1,(*i).lang,593);
10810 if(i2<10)
10811 disp+="0";
10812 if(i2<100)
10813 disp+="0";
10814 bool access=false;
10815 vector<string>::iterator i3;
10816 for(i3=(*i).access_grant_proc_groups.begin(); i3!=(*i).access_grant_proc_groups.end(); i3++) {
10817 if(!(*i3).compare(*i1) || !(*i3).compare("*")) {
10818 access=true;
10819 break;
10820 }
10821 }
10822 char tmp2[128];
10823 if(access)
10824 strcpy(tmp2,lang_get_string(1,(*i).lang,120).c_str());
10825 else
10826 strcpy(tmp2,lang_get_string(1,(*i).lang,121).c_str());
10827 disp+=(string)tmp+": "+*i1+" = "+tmp2+eol;
10828 }
10829 dcc_send_msg((*i).socket,disp,ec);
10830 disp=lang_get_string(1,(*i).lang,122)+eol;
10831 dcc_send_msg((*i).socket,disp,ec);
10832 (*i).edit_user++;
10833 }
10834 if((*i).edit_user==801) {
10835 string p=dcc_get_line((*i).in_buff);
10836 if(!p.compare(""))
10837 return;
10838 bool got=false;
10839 if(!p.compare(".")) {
10840 got=true;
10841 (*i).edit_user=2;
10842 }
10843 if(!p.compare(".add")) {
10844 got=true;
10845 string disp=lang_get_string(1,(*i).lang,124)+eol;
10846 int ec=0;
10847 dcc_send_msg((*i).socket,disp,ec);
10848
10849 disp="";
10850 vector<string>::iterator i3;
10851 for(i3=(*i).access_grant_proc_groups.begin(); i3!=(*i).access_grant_proc_groups.end(); i3++)
10852 disp+=*i3+eol;
10853 if((*i).access_grant_proc_groups.begin()==(*i).access_grant_proc_groups.end()) {
10854 disp=lang_get_string(1,(*i).lang,124)+eol;
10855 dcc_send_msg((*i).socket,disp,ec);
10856 (*i).edit_user=800;
10857 } else {
10858 dcc_send_msg((*i).socket,disp,ec);
10859 disp=lang_get_string(1,(*i).lang,125)+eol;
10860 dcc_send_msg((*i).socket,disp,ec);
10861 (*i).edit_user=802;
10862 }
10863 }
10864 string p1, p2;
10865 int pos=0;
10866 for(unsigned int i1=0; i1<p.length(); i1++) {
10867 if(p[i1]==0x20) {
10868 pos=1;
10869 continue;
10870 }
10871 if(pos==0)
10872 p1+=p[i1];
10873 if(pos==1)
10874 p2+=p[i1];
10875 }
10876 if(!p1.compare(".remove")) {
10877 got=true;
10878 int line=atol(p2.c_str());
10879
10880 int i2=1;
10881 bool access=false;
10882 vector<string>::iterator i1;
10883 vector<string>::iterator i3;
10884 for(i1=(*i).user_access_grant_proc_groups.begin(); i1!=(*i).user_access_grant_proc_groups.end(); i1++, i2++) {
10885 for(i3=(*i).access_grant_proc_groups.begin(); i3!=(*i).access_grant_proc_groups.end(); i3++) {
10886 if((!(*i1).compare(*i3) || !(*i3).compare("*")) && i2==line) {
10887 access=true;
10888 (*i).user_access_grant_proc_groups.erase(i1);
10889 break;
10890 }
10891 }
10892 }
10893 if(!access) {
10894 string disp=lang_get_string(1,(*i).lang,123)+eol;
10895 int ec=0;
10896 dcc_send_msg((*i).socket,disp,ec);
10897 }
10898 (*i).edit_user=800;
10899 }
10900 if(!got) {
10901 string disp=lang_get_string(1,(*i).lang,122)+eol;
10902 int ec=0;
10903 dcc_send_msg((*i).socket,disp,ec);
10904 }
10905 }
10906 if((*i).edit_user==802) {
10907 string p=dcc_get_line((*i).in_buff);
10908 if(!p.compare(""))
10909 return;
10910 vector<string>::iterator i3;
10911 bool access=false;
10912 for(i3=(*i).access_grant_proc_groups.begin(); i3!=(*i).access_grant_proc_groups.end(); i3++)
10913 if((*i3).compare(p) || !(*i3).compare("*")) {
10914 access=true;
10915 break;
10916 }
10917 if(p.compare("*"))
10918 p=(string)"\""+p+"\"";
10919 if(!access) {
10920 string disp=lang_get_string(1,(*i).lang,123)+eol;
10921 int ec=0;
10922 dcc_send_msg((*i).socket,disp,ec);
10923 } else {
10924 (*i).user_access_grant_proc_groups.push_back(p);
10925 }
10926 (*i).edit_user=800;
10927 }
10928
10929
10930 if((*i).edit_user==1400) {
10931 string disp=lang_get_string(1,(*i).lang,128)+eol;
10932 int ec=0;
10933 dcc_send_msg((*i).socket,disp,ec);
10934 disp="";
10935 int i2=1;
10936 vector<string>::iterator i1;
10937 for(i1=(*i).user_access_usage_proc_groups.begin(); i1!=(*i).user_access_usage_proc_groups.end(); i1++, i2++) {
10938 char tmp[64];
10939 ltoa(i2,tmp,10);
10940 disp+=lang_get_string(1,(*i).lang,593);
10941 if(i2<10)
10942 disp+="0";
10943 if(i2<100)
10944 disp+="0";
10945 bool access=false;
10946 vector<string>::iterator i3;
10947 for(i3=(*i).access_grant_proc_groups.begin(); i3!=(*i).access_grant_proc_groups.end(); i3++) {
10948 if(!(*i3).compare(*i1) || !(*i3).compare("*")) {
10949 access=true;
10950 break;
10951 }
10952 }
10953 char tmp2[128];
10954 if(access)
10955 strcpy(tmp2,lang_get_string(1,(*i).lang,120).c_str());
10956 else
10957 strcpy(tmp2,lang_get_string(1,(*i).lang,121).c_str());
10958 disp+=(string)tmp+": "+*i1+" = "+tmp2+eol;
10959 }
10960 dcc_send_msg((*i).socket,disp,ec);
10961 disp=lang_get_string(1,(*i).lang,122)+eol;
10962 dcc_send_msg((*i).socket,disp,ec);
10963 (*i).edit_user++;
10964 }
10965 if((*i).edit_user==1401) {
10966 string p=dcc_get_line((*i).in_buff);
10967 if(!p.compare(""))
10968 return;
10969 bool got=false;
10970 if(!p.compare(".")) {
10971 got=true;
10972 (*i).edit_user=2;
10973 }
10974 if(!p.compare(".add")) {
10975 got=true;
10976 string disp=lang_get_string(1,(*i).lang,124)+eol;
10977 int ec=0;
10978 dcc_send_msg((*i).socket,disp,ec);
10979
10980 disp="";
10981 vector<string>::iterator i3;
10982 for(i3=(*i).access_grant_proc_groups.begin(); i3!=(*i).access_grant_proc_groups.end(); i3++)
10983 disp+=*i3+eol;
10984 if((*i).access_grant_proc_groups.begin()==(*i).access_grant_proc_groups.end()) {
10985 disp=lang_get_string(1,(*i).lang,124)+eol;
10986 dcc_send_msg((*i).socket,disp,ec);
10987 (*i).edit_user=1400;
10988 } else {
10989 dcc_send_msg((*i).socket,disp,ec);
10990 disp=lang_get_string(1,(*i).lang,125)+eol;
10991 dcc_send_msg((*i).socket,disp,ec);
10992 (*i).edit_user=1402;
10993 }
10994 }
10995 string p1, p2;
10996 int pos=0;
10997 for(unsigned int i1=0; i1<p.length(); i1++) {
10998 if(p[i1]==0x20) {
10999 pos=1;
11000 continue;
11001 }
11002 if(pos==0)
11003 p1+=p[i1];
11004 if(pos==1)
11005 p2+=p[i1];
11006 }
11007 if(!p1.compare(".remove")) {
11008 got=true;
11009 int line=atol(p2.c_str());
11010
11011 int i2=1;
11012 bool access=false;
11013 vector<string>::iterator i1;
11014 vector<string>::iterator i3;
11015 for(i1=(*i).user_access_usage_proc_groups.begin(); i1!=(*i).user_access_usage_proc_groups.end(); i1++, i2++) {
11016 for(i3=(*i).access_grant_proc_groups.begin(); i3!=(*i).access_grant_proc_groups.end(); i3++) {
11017 if((!(*i1).compare(*i3) || !(*i3).compare("*")) && i2==line) {
11018 access=true;
11019 (*i).user_access_usage_proc_groups.erase(i1);
11020 break;
11021 }
11022 }
11023 }
11024 if(!access) {
11025 string disp=lang_get_string(1,(*i).lang,123)+eol;
11026 int ec=0;
11027 dcc_send_msg((*i).socket,disp,ec);
11028 }
11029 (*i).edit_user=1400;
11030 }
11031 if(!got) {
11032 string disp=lang_get_string(1,(*i).lang,122)+eol;
11033 int ec=0;
11034 dcc_send_msg((*i).socket,disp,ec);
11035 }
11036 }
11037 if((*i).edit_user==1402) {
11038 string p=dcc_get_line((*i).in_buff);
11039 if(!p.compare(""))
11040 return;
11041 vector<string>::iterator i3;
11042 bool access=false;
11043 for(i3=(*i).access_grant_proc_groups.begin(); i3!=(*i).access_grant_proc_groups.end(); i3++)
11044 if((*i3).compare(p) || !(*i3).compare("*")) {
11045 access=true;
11046 break;
11047 }
11048 if(p.compare("*"))
11049 p=(string)"\""+p+"\"";
11050 if(!access) {
11051 string disp=lang_get_string(1,(*i).lang,123)+eol;
11052 int ec=0;
11053 dcc_send_msg((*i).socket,disp,ec);
11054 } else {
11055 (*i).user_access_usage_proc_groups.push_back(p);
11056 }
11057 (*i).edit_user=1400;
11058 }
11059
11060
11061 if((*i).edit_user==900) {
11062 string disp=lang_get_string(1,(*i).lang,126)+eol;
11063 int ec=0;
11064 dcc_send_msg((*i).socket,disp,ec);
11065 disp="";
11066 int i2=1;
11067 vector<string>::iterator i1;
11068 for(i1=(*i).user_access_to_channel.begin(); i1!=(*i).user_access_to_channel.end(); i1++, i2++) {
11069 char tmp[64];
11070 ltoa(i2,tmp,10);
11071 disp+=lang_get_string(1,(*i).lang,593);
11072 if(i2<10)
11073 disp+="0";
11074 if(i2<100)
11075 disp+="0";
11076 bool access=false;
11077 vector<string>::iterator i3;
11078 for(i3=(*i).access_grant_channel.begin(); i3!=(*i).access_grant_channel.end(); i3++) {
11079 if(!(*i3).compare(*i1) || !(*i3).compare("*")) {
11080 access=true;
11081 break;
11082 }
11083 }
11084 char tmp2[128];
11085 if(access)
11086 strcpy(tmp2,lang_get_string(1,(*i).lang,120).c_str());
11087 else
11088 strcpy(tmp2,lang_get_string(1,(*i).lang,121).c_str());
11089 disp+=(string)tmp+": "+*i1+" = "+tmp2+eol;
11090 }
11091 dcc_send_msg((*i).socket,disp,ec);
11092 disp=lang_get_string(1,(*i).lang,122)+eol;
11093 dcc_send_msg((*i).socket,disp,ec);
11094 (*i).edit_user++;
11095 }
11096 if((*i).edit_user==901) {
11097 string p=dcc_get_line((*i).in_buff);
11098 if(!p.compare(""))
11099 return;
11100 bool got=false;
11101 if(!p.compare(".")) {
11102 got=true;
11103 (*i).edit_user=2;
11104 }
11105 if(!p.compare(".add")) {
11106 got=true;
11107 string disp=lang_get_string(1,(*i).lang,124)+eol;
11108 int ec=0;
11109 dcc_send_msg((*i).socket,disp,ec);
11110
11111 disp="";
11112 vector<string>::iterator i3;
11113 for(i3=(*i).access_grant_channel.begin(); i3!=(*i).access_grant_channel.end(); i3++)
11114 disp+=*i3+eol;
11115 if((*i).access_grant_channel.begin()==(*i).access_grant_channel.end()) {
11116 disp=lang_get_string(1,(*i).lang,127)+eol;
11117 dcc_send_msg((*i).socket,disp,ec);
11118 (*i).edit_user=900;
11119 } else {
11120 dcc_send_msg((*i).socket,disp,ec);
11121 disp=lang_get_string(1,(*i).lang,125)+eol;
11122 dcc_send_msg((*i).socket,disp,ec);
11123 (*i).edit_user=902;
11124 }
11125 }
11126 string p1, p2;
11127 int pos=0;
11128 for(unsigned int i1=0; i1<p.length(); i1++) {
11129 if(p[i1]==0x20) {
11130 pos=1;
11131 continue;
11132 }
11133 if(pos==0)
11134 p1+=p[i1];
11135 if(pos==1)
11136 p2+=p[i1];
11137 }
11138 if(!p1.compare(".remove")) {
11139 got=true;
11140 int line=atol(p2.c_str());
11141
11142 int i2=1;
11143 vector<string>::iterator i1;
11144 bool access=false;
11145 for(i1=(*i).user_access_to_channel.begin(); i1!=(*i).user_access_to_channel.end(); i1++, i2++) {
11146 vector<string>::iterator i3;
11147 for(i3=(*i).access_grant_channel.begin(); i3!=(*i).access_grant_channel.end(); i3++) {
11148 if((!(*i3).compare(*i1) || !(*i3).compare("*")) && i2==line) {
11149 access=true;
11150 (*i).user_access_to_channel.erase(i1);
11151 break;
11152 }
11153 }
11154 if(access)
11155 break;
11156 }
11157 if(!access) {
11158 string disp=lang_get_string(1,(*i).lang,123)+eol;
11159 int ec=0;
11160 dcc_send_msg((*i).socket,disp,ec);
11161 }
11162 (*i).edit_user=900;
11163 }
11164 if(!got) {
11165 string disp=lang_get_string(1,(*i).lang,122)+eol;
11166 int ec=0;
11167 dcc_send_msg((*i).socket,disp,ec);
11168 }
11169 }
11170 if((*i).edit_user==902) {
11171 string p=dcc_get_line((*i).in_buff);
11172 if(!p.compare(""))
11173 return;
11174 vector<string>::iterator i3;
11175 bool access=false;
11176 for(i3=(*i).access_grant_channel.begin(); i3!=(*i).access_grant_channel.end(); i3++)
11177 if((*i3).compare(p) || !(*i3).compare("*")) {
11178 access=true;
11179 break;
11180 }
11181 if(p.compare("*"))
11182 p=(string)"\""+p+"\"";
11183 if(!access) {
11184 string disp=lang_get_string(1,(*i).lang,123)+eol;
11185 int ec=0;
11186 dcc_send_msg((*i).socket,disp,ec);
11187 } else {
11188 (*i).user_access_to_groups.push_back(p);
11189 }
11190 (*i).edit_user=900;
11191 }
11192
11193 if((*i).edit_user==1000) {
11194 string disp=lang_get_string(1,(*i).lang,128)+eol;
11195 int ec=0;
11196 dcc_send_msg((*i).socket,disp,ec);
11197 disp="";
11198 int i2=1;
11199 vector<string>::iterator i1;
11200 for(i1=(*i).user_access_grant_channel.begin(); i1!=(*i).user_access_grant_channel.end(); i1++, i2++) {
11201 char tmp[64];
11202 ltoa(i2,tmp,10);
11203 disp+=lang_get_string(1,(*i).lang,593);
11204 if(i2<10)
11205 disp+="0";
11206 if(i2<100)
11207 disp+="0";
11208 bool access=false;
11209 vector<string>::iterator i3;
11210 for(i3=(*i).access_grant_channel.begin(); i3!=(*i).access_grant_channel.end(); i3++) {
11211 if(!(*i3).compare(*i1) || !(*i3).compare("*")) {
11212 access=true;
11213 break;
11214 }
11215 }
11216 char tmp2[128];
11217 if(access)
11218 strcpy(tmp2,lang_get_string(1,(*i).lang,120).c_str());
11219 else
11220 strcpy(tmp2,lang_get_string(1,(*i).lang,121).c_str());
11221 disp+=(string)tmp+": "+*i1+" = "+tmp2+eol;
11222 }
11223 dcc_send_msg((*i).socket,disp,ec);
11224 disp=lang_get_string(1,(*i).lang,122)+eol;
11225 dcc_send_msg((*i).socket,disp,ec);
11226 (*i).edit_user++;
11227 }
11228 if((*i).edit_user==1001) {
11229 string p=dcc_get_line((*i).in_buff);
11230 if(!p.compare(""))
11231 return;
11232 bool got=false;
11233 if(!p.compare(".")) {
11234 got=true;
11235 (*i).edit_user=2;
11236 }
11237 if(!p.compare(".add")) {
11238 got=true;
11239 string disp=lang_get_string(1,(*i).lang,124)+eol;
11240 int ec=0;
11241 dcc_send_msg((*i).socket,disp,ec);
11242
11243 disp="";
11244 vector<string>::iterator i3;
11245 for(i3=(*i).access_grant_channel.begin(); i3!=(*i).access_grant_channel.end(); i3++)
11246 disp+=*i3+eol;
11247 if((*i).access_grant_channel.begin()==(*i).access_grant_channel.end()) {
11248 disp=lang_get_string(1,(*i).lang,124)+eol;
11249 dcc_send_msg((*i).socket,disp,ec);
11250 (*i).edit_user=1000;
11251 } else {
11252 dcc_send_msg((*i).socket,disp,ec);
11253 disp=lang_get_string(1,(*i).lang,125)+eol;
11254 dcc_send_msg((*i).socket,disp,ec);
11255 (*i).edit_user=1002;
11256 }
11257 }
11258 string p1, p2;
11259 int pos=0;
11260 for(unsigned int i1=0; i1<p.length(); i1++) {
11261 if(p[i1]==0x20) {
11262 pos=1;
11263 continue;
11264 }
11265 if(pos==0)
11266 p1+=p[i1];
11267 if(pos==1)
11268 p2+=p[i1];
11269 }
11270 if(!p1.compare(".remove")) {
11271 got=true;
11272 int line=atol(p2.c_str());
11273
11274 int i2=1;
11275 bool access=false;
11276 vector<string>::iterator i1;
11277 vector<string>::iterator i3;
11278 for(i1=(*i).user_access_grant_channel.begin(); i1!=(*i).user_access_grant_channel.end(); i1++, i2++) {
11279 for(i3=(*i).access_grant_channel.begin(); i3!=(*i).access_grant_channel.end(); i3++) {
11280 if((!(*i1).compare(*i3) || !(*i3).compare("*")) && i2==line) {
11281 access=true;
11282 (*i).user_access_grant_channel.erase(i1);
11283 break;
11284 }
11285 }
11286 }
11287 if(!access) {
11288 string disp=lang_get_string(1,(*i).lang,123)+eol;
11289 int ec=0;
11290 dcc_send_msg((*i).socket,disp,ec);
11291 }
11292 (*i).edit_user=1000;
11293 }
11294 if(!got) {
11295 string disp=lang_get_string(1,(*i).lang,122)+eol;
11296 int ec=0;
11297 dcc_send_msg((*i).socket,disp,ec);
11298 }
11299 }
11300 if((*i).edit_user==1002) {
11301 string p=dcc_get_line((*i).in_buff);
11302 if(!p.compare(""))
11303 return;
11304 vector<string>::iterator i3;
11305 bool access=false;
11306 for(i3=(*i).access_grant_channel.begin(); i3!=(*i).access_grant_channel.end(); i3++)
11307 if((*i3).compare(p) || !(*i3).compare("*")) {
11308 access=true;
11309 break;
11310 }
11311 if(p.compare("*"))
11312 p=(string)"\""+p+"\"";
11313 if(!access) {
11314 string disp=lang_get_string(1,(*i).lang,123)+eol;
11315 int ec=0;
11316 dcc_send_msg((*i).socket,disp,ec);
11317 } else {
11318 (*i).user_access_to_groups.push_back(p);
11319 }
11320 (*i).edit_user=1000;
11321 }
11322
11323 if((*i).edit_user==2000) {
11324 string chan;
11325 vector<s_channel>::iterator i1;
11326 int i2=1;
11327 for(i1=(*i).user_channels.begin(); i1!=(*i).user_channels.end(); i1++, i2++)
11328 if(i2==(*i).edit_channel_num) {
11329 chan=(*i1).channel_name;
11330 break;
11331 }
11332 if(!chan.compare("")) {
11333 (*i).edit_user=2;
11334 log_debug("in file " __FILE__ " in function " __FUNC__ " occurred error: cannot find channel to edit! (#1) huh?!");
11335 return;
11336 }
11337 (*i).user_channel.channel_name=chan;
11338 (*i).user_channel.on_deop=(*i1).on_deop;
11339 (*i).user_channel.on_ban=(*i1).on_ban;
11340 (*i).user_channel.on_unban=(*i1).on_unban;
11341 (*i).user_channel.on_kick=(*i1).on_kick;
11342 (*i).user_channel.on_op=(*i1).on_op;
11343 (*i).user_channel.on_voice=(*i1).on_voice;
11344 (*i).user_channel.on_devoice=(*i1).on_devoice;
11345 (*i).user_channel.on_creator=(*i1).on_creator;
11346 (*i).user_channel.on_decreator=(*i1).on_decreator;
11347 (*i).user_channel.on_join=(*i1).on_join;
11348 (*i).user_channel.on_banned=(*i1).on_banned;
11349 (*i).user_channel.on_flood=(*i1).on_flood;
11350 (*i).user_channel.on_privmsg=(*i1).on_privmsg;
11351 (*i).user_channel.on_notice=(*i1).on_notice;
11352 (*i).user_channel.on_other_mode=(*i1).on_other_mode;
11353
11354 (*i).user_channel.msg_flood=(*i1).msg_flood;
11355 (*i).user_channel.notice_flood=(*i1).notice_flood;
11356 (*i).user_channel.repeat_flood=(*i1).repeat_flood;
11357 (*i).user_channel.nick_flood=(*i1).nick_flood;
11358 (*i).user_channel.join_flood=(*i1).join_flood;
11359 (*i).user_channel.mode_flood=(*i1).mode_flood;
11360 (*i).user_channel.ctcp_flood=(*i1).ctcp_flood;
11361
11362 (*i).user_channel.allow_dynamic.clear();
11363 vector<s_dynamic_rule>::iterator i3;
11364 for(i3=(*i1).allow_dynamic.begin(); i3!=(*i1).allow_dynamic.end(); i3++)
11365 (*i).user_channel.allow_dynamic.push_back(*i3);
11366
11367 string disp=lang_get_string(1,(*i).lang,129)+eol;
11368 disp=lang_subst(disp,chan);
11369 int ec=0;
11370 dcc_send_msg((*i).socket,disp,ec);
11371
11372 (*i).edit_user++;
11373 }
11374
11375 if((*i).edit_user==2001) {
11376 string disp;
11377 int ec=0;
11378
11379 disp=lang_get_string(1,(*i).lang,55)+eol;
11380 dcc_send_msg((*i).socket,disp,ec);
11381
11382 vector<string>::iterator i3;
11383 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
11384 disp=*i3+eol;
11385 dcc_send_msg((*i).socket,disp,ec);
11386 }
11387
11388 disp=(string)"----------------"+eol;
11389 dcc_send_msg((*i).socket,disp,ec);
11390
11391 disp=lang_get_string(1,(*i).lang,75)+eol;
11392 dcc_send_msg((*i).socket,disp,ec);
11393
11394 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol;
11395 dcc_send_msg((*i).socket,disp,ec);
11396
11397 disp=lang_get_string(1,(*i).lang,133)+eol;
11398 disp=lang_subst(disp,(*i).user_channel.on_deop);
11399 dcc_send_msg((*i).socket,disp,ec);
11400
11401 disp=lang_get_string(1,(*i).lang,544)+eol;
11402 dcc_send_msg((*i).socket,disp,ec);
11403
11404 (*i).edit_user++;
11405 }
11406 if((*i).edit_user==2002) {
11407 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_deop)) {
11408 int ec=0;
11409 string disp=lang_get_string(1,(*i).lang,592)+eol;
11410 dcc_send_msg((*i).socket,disp,ec);
11411 (*i).edit_user++;
11412 return;
11413 }
11414
11415 string p=dcc_get_line((*i).in_buff);
11416 if(!p.compare(""))
11417 return;
11418 vector<string>::iterator i1;
11419 bool got=false;
11420 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
11421 if(!(*i1).compare(p))
11422 got=true;
11423 if(!p.compare(".")) {
11424 got=true;
11425 string disp=lang_get_string(1,(*i).lang,131)+eol;
11426 int ec=0;
11427 dcc_send_msg((*i).socket,disp,ec);
11428 (*i).edit_user++;
11429 } else {
11430 if(!p.compare("..")) {
11431 got=true;
11432 string disp=lang_get_string(1,(*i).lang,132)+eol;
11433 int ec=0;
11434 dcc_send_msg((*i).socket,disp,ec);
11435 (*i).user_channel.on_deop="";
11436 (*i).edit_user++;
11437 } else {
11438 if(!p.compare("!")) {
11439 vector<s_channel>::iterator i1;
11440 for(i1=(*i).user_channels.begin(); i1!=(*i).user_channels.end(); i1++)
11441 if(!(*i1).channel_name.compare((*i).user_channel.channel_name)) {
11442 (*i1).configured=false;
11443 (*i).edit_user=2;
11444 return;
11445 }
11446 } else {
11447 string disp;
11448 if(got)
11449 disp=lang_get_string(1,(*i).lang,57)+eol;
11450 else
11451 disp=lang_get_string(1,(*i).lang,58)+eol;
11452 int ec=0;
11453 dcc_send_msg((*i).socket,disp,ec);
11454 if(got)
11455 (*i).user_channel.on_deop=p;
11456 else {
11457 (*i).edit_user--;
11458 return;
11459 }
11460 (*i).edit_user++;
11461 }
11462 }
11463 }
11464 }
11465
11466 if((*i).edit_user==2003) {
11467 string disp;
11468 int ec=0;
11469
11470 disp=lang_get_string(1,(*i).lang,59)+eol;
11471 dcc_send_msg((*i).socket,disp,ec);
11472
11473 vector<string>::iterator i3;
11474 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
11475 disp=*i3+eol;
11476 dcc_send_msg((*i).socket,disp,ec);
11477 }
11478
11479 disp=(string)"----------------"+eol;
11480 dcc_send_msg((*i).socket,disp,ec);
11481
11482 disp=lang_get_string(1,(*i).lang,76)+eol;
11483 dcc_send_msg((*i).socket,disp,ec);
11484
11485 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol;
11486 dcc_send_msg((*i).socket,disp,ec);
11487
11488 disp=lang_get_string(1,(*i).lang,133)+eol;
11489 disp=lang_subst(disp,(*i).user_channel.on_ban);
11490 dcc_send_msg((*i).socket,disp,ec);
11491
11492 disp=lang_get_string(1,(*i).lang,130)+eol;
11493 dcc_send_msg((*i).socket,disp,ec);
11494
11495 (*i).edit_user++;
11496 }
11497 if((*i).edit_user==2004) {
11498 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_ban)) {
11499 int ec=0;
11500 string disp=lang_get_string(1,(*i).lang,592)+eol;
11501 dcc_send_msg((*i).socket,disp,ec);
11502 (*i).edit_user++;
11503 return;
11504 }
11505
11506 string p=dcc_get_line((*i).in_buff);
11507 if(!p.compare(""))
11508 return;
11509 vector<string>::iterator i1;
11510 bool got=false;
11511 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
11512 if(!(*i1).compare(p))
11513 got=true;
11514 if(!p.compare(".")) {
11515 got=true;
11516 string disp=lang_get_string(1,(*i).lang,131)+eol;
11517 int ec=0;
11518 dcc_send_msg((*i).socket,disp,ec);
11519 (*i).edit_user++;
11520 } else {
11521 if(!p.compare("..")) {
11522 got=true;
11523 string disp=lang_get_string(1,(*i).lang,132)+eol;
11524 int ec=0;
11525 dcc_send_msg((*i).socket,disp,ec);
11526 (*i).user_channel.on_ban="";
11527 (*i).edit_user++;
11528 } else {
11529 string disp;
11530 if(got)
11531 disp=lang_get_string(1,(*i).lang,57)+eol;
11532 else
11533 disp=lang_get_string(1,(*i).lang,58)+eol;
11534 int ec=0;
11535 dcc_send_msg((*i).socket,disp,ec);
11536 if(got)
11537 (*i).user_channel.on_ban=p;
11538 else {
11539 (*i).edit_user--;
11540 return;
11541 }
11542 (*i).edit_user++;
11543 }
11544 }
11545 }
11546
11547 if((*i).edit_user==2005) {
11548 string disp;
11549 int ec=0;
11550
11551 disp=lang_get_string(1,(*i).lang,60)+eol;
11552 dcc_send_msg((*i).socket,disp,ec);
11553
11554 vector<string>::iterator i3;
11555 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
11556 disp=*i3+eol;
11557 dcc_send_msg((*i).socket,disp,ec);
11558 }
11559
11560 disp=(string)"----------------"+eol;
11561 dcc_send_msg((*i).socket,disp,ec);
11562
11563 disp=lang_get_string(1,(*i).lang,77)+eol;
11564 dcc_send_msg((*i).socket,disp,ec);
11565
11566 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol;
11567 dcc_send_msg((*i).socket,disp,ec);
11568
11569 disp=lang_get_string(1,(*i).lang,133)+eol;
11570 disp=lang_subst(disp,(*i).user_channel.on_unban);
11571 dcc_send_msg((*i).socket,disp,ec);
11572
11573 disp=lang_get_string(1,(*i).lang,130)+eol;
11574 dcc_send_msg((*i).socket,disp,ec);
11575
11576 (*i).edit_user++;
11577 }
11578 }
11579
11580
11581
11582
11583
11584
11585
11586
11587
11588 void dcc_loop_edit_user2(vector<s_dcc_client>::iterator i, string& eol)
11589 {
11590 if((*i).edit_user==2006) {
11591 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_unban)) {
11592 int ec=0;
11593 string disp=lang_get_string(1,(*i).lang,592)+eol;
11594 dcc_send_msg((*i).socket,disp,ec);
11595 (*i).edit_user++;
11596 return;
11597 }
11598
11599 string p=dcc_get_line((*i).in_buff);
11600 if(!p.compare(""))
11601 return;
11602 vector<string>::iterator i1;
11603 bool got=false;
11604 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
11605 if(!(*i1).compare(p))
11606 got=true;
11607 if(!p.compare(".")) {
11608 got=true;
11609 string disp=lang_get_string(1,(*i).lang,131)+eol;
11610 int ec=0;
11611 dcc_send_msg((*i).socket,disp,ec);
11612 (*i).edit_user++;
11613 } else {
11614 if(!p.compare("..")) {
11615 got=true;
11616 string disp=lang_get_string(1,(*i).lang,132)+eol;
11617 int ec=0;
11618 dcc_send_msg((*i).socket,disp,ec);
11619 (*i).user_channel.on_unban="";
11620 (*i).edit_user++;
11621 } else {
11622 string disp;
11623 if(got)
11624 disp=lang_get_string(1,(*i).lang,57)+eol;
11625 else
11626 disp=lang_get_string(1,(*i).lang,58)+eol;
11627 int ec=0;
11628 dcc_send_msg((*i).socket,disp,ec);
11629 if(got)
11630 (*i).user_channel.on_unban=p;
11631 else {
11632 (*i).edit_user--;
11633 return;
11634 }
11635 (*i).edit_user++;
11636 }
11637 }
11638 }
11639
11640 if((*i).edit_user==2007) {
11641 string disp;
11642 int ec=0;
11643
11644 disp=lang_get_string(1,(*i).lang,61)+eol;
11645 dcc_send_msg((*i).socket,disp,ec);
11646
11647 vector<string>::iterator i3;
11648 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
11649 disp=*i3+eol;
11650 dcc_send_msg((*i).socket,disp,ec);
11651 }
11652
11653 disp=(string)"----------------"+eol;
11654 dcc_send_msg((*i).socket,disp,ec);
11655
11656 disp=lang_get_string(1,(*i).lang,78)+eol;
11657 dcc_send_msg((*i).socket,disp,ec);
11658
11659 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol;
11660 dcc_send_msg((*i).socket,disp,ec);
11661
11662 disp=lang_get_string(1,(*i).lang,133)+eol;
11663 disp=lang_subst(disp,(*i).user_channel.on_kick);
11664 dcc_send_msg((*i).socket,disp,ec);
11665
11666 disp=lang_get_string(1,(*i).lang,130)+eol;
11667 dcc_send_msg((*i).socket,disp,ec);
11668
11669 (*i).edit_user++;
11670 }
11671 if((*i).edit_user==2008) {
11672 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_kick)) {
11673 int ec=0;
11674 string disp=lang_get_string(1,(*i).lang,592)+eol;
11675 dcc_send_msg((*i).socket,disp,ec);
11676 (*i).edit_user++;
11677 return;
11678 }
11679
11680 string p=dcc_get_line((*i).in_buff);
11681 if(!p.compare(""))
11682 return;
11683 vector<string>::iterator i1;
11684 bool got=false;
11685 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
11686 if(!(*i1).compare(p))
11687 got=true;
11688 if(!p.compare(".")) {
11689 got=true;
11690 string disp=lang_get_string(1,(*i).lang,131)+eol;
11691 int ec=0;
11692 dcc_send_msg((*i).socket,disp,ec);
11693 (*i).edit_user++;
11694 } else {
11695 if(!p.compare("..")) {
11696 got=true;
11697 string disp=lang_get_string(1,(*i).lang,132)+eol;
11698 int ec=0;
11699 dcc_send_msg((*i).socket,disp,ec);
11700 (*i).user_channel.on_kick="";
11701 (*i).edit_user++;
11702 } else {
11703 string disp;
11704 if(got)
11705 disp=lang_get_string(1,(*i).lang,57)+eol;
11706 else
11707 disp=lang_get_string(1,(*i).lang,58)+eol;
11708 int ec=0;
11709 dcc_send_msg((*i).socket,disp,ec);
11710 if(got)
11711 (*i).user_channel.on_kick=p;
11712 else {
11713 (*i).edit_user--;
11714 return;
11715 }
11716 (*i).edit_user++;
11717 }
11718 }
11719 }
11720
11721 if((*i).edit_user==2009) {
11722 string disp;
11723 int ec=0;
11724
11725 disp=lang_get_string(1,(*i).lang,62)+eol;
11726 dcc_send_msg((*i).socket,disp,ec);
11727
11728 vector<string>::iterator i3;
11729 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
11730 disp=*i3+eol;
11731 dcc_send_msg((*i).socket,disp,ec);
11732 }
11733
11734 disp=(string)"----------------"+eol;
11735 dcc_send_msg((*i).socket,disp,ec);
11736
11737 disp=lang_get_string(1,(*i).lang,79)+eol;
11738 dcc_send_msg((*i).socket,disp,ec);
11739
11740 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol;
11741 dcc_send_msg((*i).socket,disp,ec);
11742
11743 disp=lang_get_string(1,(*i).lang,133)+eol;
11744 disp=lang_subst(disp,(*i).user_channel.on_op);
11745 dcc_send_msg((*i).socket,disp,ec);
11746
11747 disp=lang_get_string(1,(*i).lang,130)+eol;
11748 dcc_send_msg((*i).socket,disp,ec);
11749
11750 (*i).edit_user++;
11751 }
11752 if((*i).edit_user==2010) {
11753 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_op)) {
11754 int ec=0;
11755 string disp=lang_get_string(1,(*i).lang,592)+eol;
11756 dcc_send_msg((*i).socket,disp,ec);
11757 (*i).edit_user++;
11758 return;
11759 }
11760
11761 string p=dcc_get_line((*i).in_buff);
11762 if(!p.compare(""))
11763 return;
11764 vector<string>::iterator i1;
11765 bool got=false;
11766 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
11767 if(!(*i1).compare(p))
11768 got=true;
11769 if(!p.compare(".")) {
11770 got=true;
11771 string disp=lang_get_string(1,(*i).lang,131)+eol;
11772 int ec=0;
11773 dcc_send_msg((*i).socket,disp,ec);
11774 (*i).edit_user++;
11775 } else {
11776 if(!p.compare("..")) {
11777 got=true;
11778 string disp=lang_get_string(1,(*i).lang,132)+eol;
11779 int ec=0;
11780 dcc_send_msg((*i).socket,disp,ec);
11781 (*i).user_channel.on_op="";
11782 (*i).edit_user++;
11783 } else {
11784 string disp;
11785 if(got)
11786 disp=lang_get_string(1,(*i).lang,57)+eol;
11787 else
11788 disp=lang_get_string(1,(*i).lang,58)+eol;
11789 int ec=0;
11790 dcc_send_msg((*i).socket,disp,ec);
11791 if(got)
11792 (*i).user_channel.on_op=p;
11793 else {
11794 (*i).edit_user--;
11795 return;
11796 }
11797 (*i).edit_user++;
11798 }
11799 }
11800 }
11801
11802 if((*i).edit_user==2011) {
11803 string disp;
11804 int ec=0;
11805
11806 disp=lang_get_string(1,(*i).lang,63)+eol;
11807 dcc_send_msg((*i).socket,disp,ec);
11808
11809 vector<string>::iterator i3;
11810 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
11811 disp=*i3+eol;
11812 dcc_send_msg((*i).socket,disp,ec);
11813 }
11814
11815 disp=(string)"----------------"+eol;
11816 dcc_send_msg((*i).socket,disp,ec);
11817
11818 disp=lang_get_string(1,(*i).lang,80)+eol;
11819 dcc_send_msg((*i).socket,disp,ec);
11820
11821 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol;
11822 dcc_send_msg((*i).socket,disp,ec);
11823
11824 disp=lang_get_string(1,(*i).lang,133)+eol;
11825 disp=lang_subst(disp,(*i).user_channel.on_voice);
11826 dcc_send_msg((*i).socket,disp,ec);
11827
11828 disp=lang_get_string(1,(*i).lang,130)+eol;
11829 dcc_send_msg((*i).socket,disp,ec);
11830
11831 (*i).edit_user++;
11832 }
11833 if((*i).edit_user==2012) {
11834 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_voice)) {
11835 int ec=0;
11836 string disp=lang_get_string(1,(*i).lang,592)+eol;
11837 dcc_send_msg((*i).socket,disp,ec);
11838 (*i).edit_user++;
11839 return;
11840 }
11841
11842 string p=dcc_get_line((*i).in_buff);
11843 if(!p.compare(""))
11844 return;
11845 vector<string>::iterator i1;
11846 bool got=false;
11847 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
11848 if(!(*i1).compare(p))
11849 got=true;
11850 if(!p.compare(".")) {
11851 got=true;
11852 string disp=lang_get_string(1,(*i).lang,131)+eol;
11853 int ec=0;
11854 dcc_send_msg((*i).socket,disp,ec);
11855 (*i).edit_user++;
11856 } else {
11857 if(!p.compare("..")) {
11858 got=true;
11859 string disp=lang_get_string(1,(*i).lang,132)+eol;
11860 int ec=0;
11861 dcc_send_msg((*i).socket,disp,ec);
11862 (*i).user_channel.on_voice="";
11863 (*i).edit_user++;
11864 } else {
11865 string disp;
11866 if(got)
11867 disp=lang_get_string(1,(*i).lang,57)+eol;
11868 else
11869 disp=lang_get_string(1,(*i).lang,58)+eol;
11870 int ec=0;
11871 dcc_send_msg((*i).socket,disp,ec);
11872 if(got)
11873 (*i).user_channel.on_voice=p;
11874 else {
11875 (*i).edit_user--;
11876 return;
11877 }
11878 (*i).edit_user++;
11879 }
11880 }
11881 }
11882
11883 if((*i).edit_user==2013) {
11884 string disp;
11885 int ec=0;
11886
11887 disp=lang_get_string(1,(*i).lang,64)+eol;
11888 dcc_send_msg((*i).socket,disp,ec);
11889
11890 vector<string>::iterator i3;
11891 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
11892 disp=*i3+eol;
11893 dcc_send_msg((*i).socket,disp,ec);
11894 }
11895
11896 disp=(string)"----------------"+eol;
11897 dcc_send_msg((*i).socket,disp,ec);
11898
11899 disp=lang_get_string(1,(*i).lang,81)+eol;
11900 dcc_send_msg((*i).socket,disp,ec);
11901
11902 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol;
11903 dcc_send_msg((*i).socket,disp,ec);
11904
11905 disp=lang_get_string(1,(*i).lang,133)+eol;
11906 disp=lang_subst(disp,(*i).user_channel.on_devoice);
11907 dcc_send_msg((*i).socket,disp,ec);
11908
11909 disp=lang_get_string(1,(*i).lang,130)+eol;
11910 dcc_send_msg((*i).socket,disp,ec);
11911
11912 (*i).edit_user++;
11913 }
11914 if((*i).edit_user==2014) {
11915 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_devoice)) {
11916 int ec=0;
11917 string disp=lang_get_string(1,(*i).lang,592)+eol;
11918 dcc_send_msg((*i).socket,disp,ec);
11919 (*i).edit_user++;
11920 return;
11921 }
11922
11923 string p=dcc_get_line((*i).in_buff);
11924 if(!p.compare(""))
11925 return;
11926 vector<string>::iterator i1;
11927 bool got=false;
11928 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
11929 if(!(*i1).compare(p))
11930 got=true;
11931 if(!p.compare(".")) {
11932 got=true;
11933 string disp=lang_get_string(1,(*i).lang,131)+eol;
11934 int ec=0;
11935 dcc_send_msg((*i).socket,disp,ec);
11936 (*i).edit_user++;
11937 } else {
11938 if(!p.compare("..")) {
11939 got=true;
11940 string disp=lang_get_string(1,(*i).lang,132)+eol;
11941 int ec=0;
11942 dcc_send_msg((*i).socket,disp,ec);
11943 (*i).user_channel.on_devoice="";
11944 (*i).edit_user++;
11945 } else {
11946 string disp;
11947 if(got)
11948 disp=lang_get_string(1,(*i).lang,57)+eol;
11949 else
11950 disp=lang_get_string(1,(*i).lang,58)+eol;
11951 int ec=0;
11952 dcc_send_msg((*i).socket,disp,ec);
11953 if(got)
11954 (*i).user_channel.on_devoice=p;
11955 else {
11956 (*i).edit_user--;
11957 return;
11958 }
11959 (*i).edit_user++;
11960 }
11961 }
11962 }
11963
11964 if((*i).edit_user==2015) {
11965 string disp;
11966 int ec=0;
11967
11968 disp=lang_get_string(1,(*i).lang,65)+eol;
11969 dcc_send_msg((*i).socket,disp,ec);
11970
11971 vector<string>::iterator i3;
11972 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
11973 disp=*i3+eol;
11974 dcc_send_msg((*i).socket,disp,ec);
11975 }
11976
11977 disp=(string)"----------------"+eol;
11978 dcc_send_msg((*i).socket,disp,ec);
11979
11980 disp=lang_get_string(1,(*i).lang,82)+eol;
11981 dcc_send_msg((*i).socket,disp,ec);
11982
11983 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol;
11984 dcc_send_msg((*i).socket,disp,ec);
11985
11986 disp=lang_get_string(1,(*i).lang,133)+eol;
11987 disp=lang_subst(disp,(*i).user_channel.on_creator);
11988 dcc_send_msg((*i).socket,disp,ec);
11989
11990 disp=lang_get_string(1,(*i).lang,130)+eol;
11991 dcc_send_msg((*i).socket,disp,ec);
11992
11993 (*i).edit_user++;
11994 }
11995 if((*i).edit_user==2016) {
11996 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_creator)) {
11997 int ec=0;
11998 string disp=lang_get_string(1,(*i).lang,592)+eol;
11999 dcc_send_msg((*i).socket,disp,ec);
12000 (*i).edit_user++;
12001 return;
12002 }
12003
12004 string p=dcc_get_line((*i).in_buff);
12005 if(!p.compare(""))
12006 return;
12007 vector<string>::iterator i1;
12008 bool got=false;
12009 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
12010 if(!(*i1).compare(p))
12011 got=true;
12012 if(!p.compare(".")) {
12013 got=true;
12014 string disp=lang_get_string(1,(*i).lang,131)+eol;
12015 int ec=0;
12016 dcc_send_msg((*i).socket,disp,ec);
12017 (*i).edit_user++;
12018 } else {
12019 if(!p.compare("..")) {
12020 got=true;
12021 string disp=lang_get_string(1,(*i).lang,132)+eol;
12022 int ec=0;
12023 dcc_send_msg((*i).socket,disp,ec);
12024 (*i).user_channel.on_creator="";
12025 (*i).edit_user++;
12026 } else {
12027 string disp;
12028 if(got)
12029 disp=lang_get_string(1,(*i).lang,57)+eol;
12030 else
12031 disp=lang_get_string(1,(*i).lang,58)+eol;
12032 int ec=0;
12033 dcc_send_msg((*i).socket,disp,ec);
12034 if(got)
12035 (*i).user_channel.on_creator=p;
12036 else {
12037 (*i).edit_user--;
12038 return;
12039 }
12040 (*i).edit_user++;
12041 }
12042 }
12043 }
12044
12045 if((*i).edit_user==2017) {
12046 string disp;
12047 int ec=0;
12048
12049 disp=lang_get_string(1,(*i).lang,66)+eol;
12050 dcc_send_msg((*i).socket,disp,ec);
12051
12052 vector<string>::iterator i3;
12053 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
12054 disp=*i3+eol;
12055 dcc_send_msg((*i).socket,disp,ec);
12056 }
12057
12058 disp=(string)"----------------"+eol;
12059 dcc_send_msg((*i).socket,disp,ec);
12060
12061 disp=lang_get_string(1,(*i).lang,83)+eol;
12062 dcc_send_msg((*i).socket,disp,ec);
12063
12064 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol;
12065 dcc_send_msg((*i).socket,disp,ec);
12066
12067 disp=lang_get_string(1,(*i).lang,133)+eol;
12068 disp=lang_subst(disp,(*i).user_channel.on_decreator);
12069 dcc_send_msg((*i).socket,disp,ec);
12070
12071 disp=lang_get_string(1,(*i).lang,130)+eol;
12072 dcc_send_msg((*i).socket,disp,ec);
12073
12074 (*i).edit_user++;
12075 }
12076 if((*i).edit_user==2018) {
12077 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_decreator)) {
12078 int ec=0;
12079 string disp=lang_get_string(1,(*i).lang,592)+eol;
12080 dcc_send_msg((*i).socket,disp,ec);
12081 (*i).edit_user++;
12082 return;
12083 }
12084
12085 string p=dcc_get_line((*i).in_buff);
12086 if(!p.compare(""))
12087 return;
12088 vector<string>::iterator i1;
12089 bool got=false;
12090 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
12091 if(!(*i1).compare(p))
12092 got=true;
12093 if(!p.compare(".")) {
12094 got=true;
12095 string disp=lang_get_string(1,(*i).lang,131)+eol;
12096 int ec=0;
12097 dcc_send_msg((*i).socket,disp,ec);
12098 (*i).edit_user++;
12099 } else {
12100 if(!p.compare("..")) {
12101 got=true;
12102 string disp=lang_get_string(1,(*i).lang,132)+eol;
12103 int ec=0;
12104 dcc_send_msg((*i).socket,disp,ec);
12105 (*i).user_channel.on_decreator="";
12106 (*i).edit_user++;
12107 } else {
12108 string disp;
12109 if(got)
12110 disp=lang_get_string(1,(*i).lang,57)+eol;
12111 else
12112 disp=lang_get_string(1,(*i).lang,58)+eol;
12113 int ec=0;
12114 dcc_send_msg((*i).socket,disp,ec);
12115 if(got)
12116 (*i).user_channel.on_decreator=p;
12117 else {
12118 (*i).edit_user--;
12119 return;
12120 }
12121 (*i).edit_user++;
12122 }
12123 }
12124 }
12125
12126 if((*i).edit_user==2019) {
12127 string disp;
12128 int ec=0;
12129
12130 disp=lang_get_string(1,(*i).lang,67)+eol;
12131 dcc_send_msg((*i).socket,disp,ec);
12132
12133 vector<string>::iterator i3;
12134 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
12135 disp=*i3+eol;
12136 dcc_send_msg((*i).socket,disp,ec);
12137 }
12138
12139 disp=(string)"----------------"+eol;
12140 dcc_send_msg((*i).socket,disp,ec);
12141
12142 disp=lang_get_string(1,(*i).lang,84)+eol;
12143 dcc_send_msg((*i).socket,disp,ec);
12144
12145 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol;
12146 dcc_send_msg((*i).socket,disp,ec);
12147
12148 disp=lang_get_string(1,(*i).lang,133)+eol;
12149 disp=lang_subst(disp,(*i).user_channel.on_join);
12150 dcc_send_msg((*i).socket,disp,ec);
12151
12152 disp=lang_get_string(1,(*i).lang,130)+eol;
12153 dcc_send_msg((*i).socket,disp,ec);
12154
12155 (*i).edit_user++;
12156 }
12157 if((*i).edit_user==2020) {
12158 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_join)) {
12159 int ec=0;
12160 string disp=lang_get_string(1,(*i).lang,592)+eol;
12161 dcc_send_msg((*i).socket,disp,ec);
12162 (*i).edit_user++;
12163 return;
12164 }
12165
12166 string p=dcc_get_line((*i).in_buff);
12167 if(!p.compare(""))
12168 return;
12169 vector<string>::iterator i1;
12170 bool got=false;
12171 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
12172 if(!(*i1).compare(p))
12173 got=true;
12174 if(!p.compare(".")) {
12175 got=true;
12176 string disp=lang_get_string(1,(*i).lang,131)+eol;
12177 int ec=0;
12178 dcc_send_msg((*i).socket,disp,ec);
12179 (*i).edit_user++;
12180 } else {
12181 if(!p.compare("..")) {
12182 got=true;
12183 string disp=lang_get_string(1,(*i).lang,132)+eol;
12184 int ec=0;
12185 dcc_send_msg((*i).socket,disp,ec);
12186 (*i).user_channel.on_join="";
12187 (*i).edit_user++;
12188 } else {
12189 string disp;
12190 if(got)
12191 disp=lang_get_string(1,(*i).lang,57)+eol;
12192 else
12193 disp=lang_get_string(1,(*i).lang,58)+eol;
12194 int ec=0;
12195 dcc_send_msg((*i).socket,disp,ec);
12196 if(got)
12197 (*i).user_channel.on_join=p;
12198 else {
12199 (*i).edit_user--;
12200 return;
12201 }
12202 (*i).edit_user++;
12203 }
12204 }
12205 }
12206
12207 if((*i).edit_user==2021) {
12208 string disp;
12209 int ec=0;
12210
12211 disp=lang_get_string(1,(*i).lang,68)+eol;
12212 dcc_send_msg((*i).socket,disp,ec);
12213
12214 vector<string>::iterator i3;
12215 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
12216 disp=*i3+eol;
12217 dcc_send_msg((*i).socket,disp,ec);
12218 }
12219
12220 disp=(string)"----------------"+eol;
12221 dcc_send_msg((*i).socket,disp,ec);
12222
12223 disp=lang_get_string(1,(*i).lang,85)+eol;
12224 dcc_send_msg((*i).socket,disp,ec);
12225
12226 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol;
12227 dcc_send_msg((*i).socket,disp,ec);
12228
12229 disp=lang_get_string(1,(*i).lang,133)+eol;
12230 disp=lang_subst(disp,(*i).user_channel.on_banned);
12231 dcc_send_msg((*i).socket,disp,ec);
12232
12233 disp=lang_get_string(1,(*i).lang,130)+eol;
12234 dcc_send_msg((*i).socket,disp,ec);
12235
12236 (*i).edit_user++;
12237 }
12238 if((*i).edit_user==2022) {
12239 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_banned)) {
12240 int ec=0;
12241 string disp=lang_get_string(1,(*i).lang,592)+eol;
12242 dcc_send_msg((*i).socket,disp,ec);
12243 (*i).edit_user++;
12244 return;
12245 }
12246
12247 string p=dcc_get_line((*i).in_buff);
12248 if(!p.compare(""))
12249 return;
12250 vector<string>::iterator i1;
12251 bool got=false;
12252 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
12253 if(!(*i1).compare(p))
12254 got=true;
12255 if(!p.compare(".")) {
12256 got=true;
12257 string disp=lang_get_string(1,(*i).lang,131)+eol;
12258 int ec=0;
12259 dcc_send_msg((*i).socket,disp,ec);
12260 (*i).edit_user++;
12261 } else {
12262 if(!p.compare("..")) {
12263 got=true;
12264 string disp=lang_get_string(1,(*i).lang,132)+eol;
12265 int ec=0;
12266 dcc_send_msg((*i).socket,disp,ec);
12267 (*i).user_channel.on_banned="";
12268 (*i).edit_user++;
12269 } else {
12270 string disp;
12271 if(got)
12272 disp=lang_get_string(1,(*i).lang,57)+eol;
12273 else
12274 disp=lang_get_string(1,(*i).lang,58)+eol;
12275 int ec=0;
12276 dcc_send_msg((*i).socket,disp,ec);
12277 if(got)
12278 (*i).user_channel.on_banned=p;
12279 else {
12280 (*i).edit_user--;
12281 return;
12282 }
12283 (*i).edit_user++;
12284 }
12285 }
12286 }
12287
12288 if((*i).edit_user==2023) {
12289 string disp;
12290 int ec=0;
12291
12292 disp=lang_get_string(1,(*i).lang,146)+eol;
12293 dcc_send_msg((*i).socket,disp,ec);
12294
12295 vector<string>::iterator i3;
12296 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
12297 disp=*i3+eol;
12298 dcc_send_msg((*i).socket,disp,ec);
12299 }
12300
12301 disp=(string)"----------------"+eol;
12302 dcc_send_msg((*i).socket,disp,ec);
12303
12304 disp=lang_get_string(1,(*i).lang,147)+eol;
12305 dcc_send_msg((*i).socket,disp,ec);
12306
12307 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol;
12308 dcc_send_msg((*i).socket,disp,ec);
12309
12310 disp=lang_get_string(1,(*i).lang,133)+eol;
12311 disp=lang_subst(disp,(*i).user_channel.on_flood);
12312 dcc_send_msg((*i).socket,disp,ec);
12313
12314 disp=lang_get_string(1,(*i).lang,130)+eol;
12315 dcc_send_msg((*i).socket,disp,ec);
12316
12317 (*i).edit_user++;
12318 }
12319 if((*i).edit_user==2024) {
12320 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_flood)) {
12321 int ec=0;
12322 string disp=lang_get_string(1,(*i).lang,592)+eol;
12323 dcc_send_msg((*i).socket,disp,ec);
12324 (*i).edit_user++;
12325 return;
12326 }
12327
12328 string p=dcc_get_line((*i).in_buff);
12329 if(!p.compare(""))
12330 return;
12331 vector<string>::iterator i1;
12332 bool got=false;
12333 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
12334 if(!(*i1).compare(p))
12335 got=true;
12336 if(!p.compare(".")) {
12337 got=true;
12338 string disp=lang_get_string(1,(*i).lang,131)+eol;
12339 int ec=0;
12340 dcc_send_msg((*i).socket,disp,ec);
12341 (*i).edit_user++;
12342 } else {
12343 if(!p.compare("..")) {
12344 got=true;
12345 string disp=lang_get_string(1,(*i).lang,132)+eol;
12346 int ec=0;
12347 dcc_send_msg((*i).socket,disp,ec);
12348 (*i).user_channel.on_flood="";
12349 (*i).edit_user++;
12350 } else {
12351 string disp;
12352 if(got)
12353 disp=lang_get_string(1,(*i).lang,57)+eol;
12354 else
12355 disp=lang_get_string(1,(*i).lang,58)+eol;
12356 int ec=0;
12357 dcc_send_msg((*i).socket,disp,ec);
12358 if(got)
12359 (*i).user_channel.on_flood=p;
12360 else {
12361 (*i).edit_user--;
12362 return;
12363 }
12364 (*i).edit_user++;
12365 }
12366 }
12367 }
12368
12369 if((*i).edit_user==2025) {
12370 string disp;
12371 int ec=0;
12372
12373 disp=lang_get_string(1,(*i).lang,164)+eol;
12374 dcc_send_msg((*i).socket,disp,ec);
12375
12376 vector<string>::iterator i3;
12377 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
12378 disp=*i3+eol;
12379 dcc_send_msg((*i).socket,disp,ec);
12380 }
12381
12382 disp=(string)"----------------"+eol;
12383 dcc_send_msg((*i).socket,disp,ec);
12384
12385 disp=lang_get_string(1,(*i).lang,165)+eol;
12386 dcc_send_msg((*i).socket,disp,ec);
12387
12388 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol;
12389 dcc_send_msg((*i).socket,disp,ec);
12390
12391 disp=lang_get_string(1,(*i).lang,133)+eol;
12392 disp=lang_subst(disp,(*i).user_channel.on_privmsg);
12393 dcc_send_msg((*i).socket,disp,ec);
12394
12395 disp=lang_get_string(1,(*i).lang,130)+eol;
12396 dcc_send_msg((*i).socket,disp,ec);
12397
12398 (*i).edit_user++;
12399 }
12400 if((*i).edit_user==2026) {
12401 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_privmsg)) {
12402 int ec=0;
12403 string disp=lang_get_string(1,(*i).lang,592)+eol;
12404 dcc_send_msg((*i).socket,disp,ec);
12405 (*i).edit_user++;
12406 return;
12407 }
12408
12409 string p=dcc_get_line((*i).in_buff);
12410 if(!p.compare(""))
12411 return;
12412 vector<string>::iterator i1;
12413 bool got=false;
12414 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
12415 if(!(*i1).compare(p))
12416 got=true;
12417 if(!p.compare(".")) {
12418 got=true;
12419 string disp=lang_get_string(1,(*i).lang,131)+eol;
12420 int ec=0;
12421 dcc_send_msg((*i).socket,disp,ec);
12422 (*i).edit_user++;
12423 } else {
12424 if(!p.compare("..")) {
12425 got=true;
12426 string disp=lang_get_string(1,(*i).lang,132)+eol;
12427 int ec=0;
12428 dcc_send_msg((*i).socket,disp,ec);
12429 (*i).user_channel.on_privmsg="";
12430 (*i).edit_user++;
12431 } else {
12432 string disp;
12433 if(got)
12434 disp=lang_get_string(1,(*i).lang,57)+eol;
12435 else
12436 disp=lang_get_string(1,(*i).lang,58)+eol;
12437 int ec=0;
12438 dcc_send_msg((*i).socket,disp,ec);
12439 if(got)
12440 (*i).user_channel.on_privmsg=p;
12441 else {
12442 (*i).edit_user--;
12443 return;
12444 }
12445 (*i).edit_user++;
12446 }
12447 }
12448 }
12449
12450
12451 if((*i).edit_user==2027) {
12452 string disp;
12453 int ec=0;
12454
12455 disp=lang_get_string(1,(*i).lang,601)+eol;
12456 dcc_send_msg((*i).socket,disp,ec);
12457
12458 vector<string>::iterator i3;
12459 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
12460 disp=*i3+eol;
12461 dcc_send_msg((*i).socket,disp,ec);
12462 }
12463
12464 disp=(string)"----------------"+eol;
12465 dcc_send_msg((*i).socket,disp,ec);
12466
12467 disp=lang_get_string(1,(*i).lang,602)+eol;
12468 dcc_send_msg((*i).socket,disp,ec);
12469
12470 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol;
12471 dcc_send_msg((*i).socket,disp,ec);
12472
12473 disp=lang_get_string(1,(*i).lang,133)+eol;
12474 disp=lang_subst(disp,(*i).user_channel.on_privmsg);
12475 dcc_send_msg((*i).socket,disp,ec);
12476
12477 disp=lang_get_string(1,(*i).lang,130)+eol;
12478 dcc_send_msg((*i).socket,disp,ec);
12479
12480 (*i).edit_user++;
12481 }
12482 if((*i).edit_user==2028) {
12483 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_notice)) {
12484 int ec=0;
12485 string disp=lang_get_string(1,(*i).lang,592)+eol;
12486 dcc_send_msg((*i).socket,disp,ec);
12487 (*i).edit_user++;
12488 return;
12489 }
12490
12491 string p=dcc_get_line((*i).in_buff);
12492 if(!p.compare(""))
12493 return;
12494 vector<string>::iterator i1;
12495 bool got=false;
12496 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
12497 if(!(*i1).compare(p))
12498 got=true;
12499 if(!p.compare(".")) {
12500 got=true;
12501 string disp=lang_get_string(1,(*i).lang,131)+eol;
12502 int ec=0;
12503 dcc_send_msg((*i).socket,disp,ec);
12504 (*i).edit_user++;
12505 } else {
12506 if(!p.compare("..")) {
12507 got=true;
12508 string disp=lang_get_string(1,(*i).lang,132)+eol;
12509 int ec=0;
12510 dcc_send_msg((*i).socket,disp,ec);
12511 (*i).user_channel.on_notice="";
12512 (*i).edit_user++;
12513 } else {
12514 string disp;
12515 if(got)
12516 disp=lang_get_string(1,(*i).lang,57)+eol;
12517 else
12518 disp=lang_get_string(1,(*i).lang,58)+eol;
12519 int ec=0;
12520 dcc_send_msg((*i).socket,disp,ec);
12521 if(got)
12522 (*i).user_channel.on_notice=p;
12523 else {
12524 (*i).edit_user--;
12525 return;
12526 }
12527 (*i).edit_user++;
12528 }
12529 }
12530 }
12531
12532
12533 if((*i).edit_user==2029) {
12534 string disp;
12535 int ec=0;
12536
12537 disp=lang_get_string(1,(*i).lang,564)+eol;
12538 dcc_send_msg((*i).socket,disp,ec);
12539
12540 vector<string>::iterator i3;
12541 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
12542 disp=*i3+eol;
12543 dcc_send_msg((*i).socket,disp,ec);
12544 }
12545
12546 disp=(string)"----------------"+eol;
12547 dcc_send_msg((*i).socket,disp,ec);
12548
12549 disp=lang_get_string(1,(*i).lang,565)+eol;
12550 dcc_send_msg((*i).socket,disp,ec);
12551
12552 disp=lang_subst(lang_get_string(1,(*i).lang,54),(*i).user_channel.channel_name)+eol;
12553 dcc_send_msg((*i).socket,disp,ec);
12554
12555 disp=lang_get_string(1,(*i).lang,133)+eol;
12556 disp=lang_subst(disp,(*i).user_channel.on_privmsg);
12557 dcc_send_msg((*i).socket,disp,ec);
12558
12559 disp=lang_get_string(1,(*i).lang,130)+eol;
12560 dcc_send_msg((*i).socket,disp,ec);
12561
12562 (*i).edit_user++;
12563 }
12564 if((*i).edit_user==2030) {
12565 if(!dcc_can_unassign(i,eol,(*i).user_channel.on_other_mode)) {
12566 int ec=0;
12567 string disp=lang_get_string(1,(*i).lang,592)+eol;
12568 dcc_send_msg((*i).socket,disp,ec);
12569 (*i).edit_user++;
12570 return;
12571 }
12572
12573 string p=dcc_get_line((*i).in_buff);
12574 if(!p.compare(""))
12575 return;
12576 vector<string>::iterator i1;
12577 bool got=false;
12578 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
12579 if(!(*i1).compare(p))
12580 got=true;
12581 if(!p.compare(".")) {
12582 got=true;
12583 string disp=lang_get_string(1,(*i).lang,131)+eol;
12584 int ec=0;
12585 dcc_send_msg((*i).socket,disp,ec);
12586 (*i).edit_user++;
12587 } else {
12588 if(!p.compare("..")) {
12589 got=true;
12590 string disp=lang_get_string(1,(*i).lang,132)+eol;
12591 int ec=0;
12592 dcc_send_msg((*i).socket,disp,ec);
12593 (*i).user_channel.on_other_mode="";
12594 (*i).edit_user++;
12595 } else {
12596 string disp;
12597 if(got)
12598 disp=lang_get_string(1,(*i).lang,57)+eol;
12599 else
12600 disp=lang_get_string(1,(*i).lang,58)+eol;
12601 int ec=0;
12602 dcc_send_msg((*i).socket,disp,ec);
12603 if(got)
12604 (*i).user_channel.on_other_mode=p;
12605 else {
12606 (*i).edit_user--;
12607 return;
12608 }
12609 (*i).edit_user++;
12610 }
12611 }
12612 }
12613
12614 if((*i).edit_user==2031) {
12615 string disp;
12616 int ec=0;
12617
12618 disp=lang_get_string(1,(*i).lang,153)+eol;
12619 dcc_send_msg((*i).socket,disp,ec);
12620
12621 (*i).edit_user++;
12622 }
12623 if((*i).edit_user==2032) {
12624 string p=dcc_get_line((*i).in_buff);
12625 if(!p.compare(""))
12626 return;
12627 if(!p.compare(".")) {
12628 (*i).edit_user++;
12629 } else {
12630 if(!p.compare("0"))
12631 p="0 0";
12632 string lines, seconds;
12633 int pos=0;
12634 for(unsigned int i1=0; i1<p.length(); i1++) {
12635 if(p[i1]==0x20) {
12636 pos++;
12637 continue;
12638 }
12639 if(pos==0)
12640 lines+=p[i1];
12641 if(pos==1)
12642 seconds+=p[i1];
12643 }
12644 string disp;
12645 (*i).user_channel.msg_flood.lines=atol(lines.c_str());
12646 (*i).user_channel.msg_flood.seconds=atol(seconds.c_str());
12647 (*i).edit_user++;
12648 }
12649 }
12650
12651 if((*i).edit_user==2033) {
12652 string disp;
12653 int ec=0;
12654
12655 disp=lang_get_string(1,(*i).lang,154)+eol;
12656 dcc_send_msg((*i).socket,disp,ec);
12657
12658 (*i).edit_user++;
12659 }
12660 if((*i).edit_user==2034) {
12661 string p=dcc_get_line((*i).in_buff);
12662 if(!p.compare(""))
12663 return;
12664 if(!p.compare(".")) {
12665 (*i).edit_user++;
12666 } else {
12667 if(!p.compare("0"))
12668 p="0 0";
12669 string lines, seconds;
12670 int pos=0;
12671 for(unsigned int i1=0; i1<p.length(); i1++) {
12672 if(p[i1]==0x20) {
12673 pos++;
12674 continue;
12675 }
12676 if(pos==0)
12677 lines+=p[i1];
12678 if(pos==1)
12679 seconds+=p[i1];
12680 }
12681 string disp;
12682 (*i).user_channel.notice_flood.lines=atol(lines.c_str());
12683 (*i).user_channel.notice_flood.seconds=atol(seconds.c_str());
12684 (*i).edit_user++;
12685 }
12686 }
12687
12688 if((*i).edit_user==2035) {
12689 string disp;
12690 int ec=0;
12691
12692 disp=lang_get_string(1,(*i).lang,155)+eol;
12693 dcc_send_msg((*i).socket,disp,ec);
12694
12695 (*i).edit_user++;
12696 }
12697 if((*i).edit_user==2036) {
12698 string p=dcc_get_line((*i).in_buff);
12699 if(!p.compare(""))
12700 return;
12701 if(!p.compare(".")) {
12702 (*i).edit_user++;
12703 } else {
12704 if(!p.compare("0"))
12705 p="0 0";
12706 string lines, seconds;
12707 int pos=0;
12708 for(unsigned int i1=0; i1<p.length(); i1++) {
12709 if(p[i1]==0x20) {
12710 pos++;
12711 continue;
12712 }
12713 if(pos==0)
12714 lines+=p[i1];
12715 if(pos==1)
12716 seconds+=p[i1];
12717 }
12718 string disp;
12719 (*i).user_channel.repeat_flood.lines=atol(lines.c_str());
12720 (*i).user_channel.repeat_flood.seconds=atol(seconds.c_str());
12721 (*i).edit_user++;
12722 }
12723 }
12724
12725 if((*i).edit_user==2037) {
12726 string disp;
12727 int ec=0;
12728
12729 disp=lang_get_string(1,(*i).lang,156)+eol;
12730 dcc_send_msg((*i).socket,disp,ec);
12731
12732 (*i).edit_user++;
12733 }
12734 if((*i).edit_user==2038) {
12735 string p=dcc_get_line((*i).in_buff);
12736 if(!p.compare(""))
12737 return;
12738 if(!p.compare(".")) {
12739 (*i).edit_user++;
12740 } else {
12741 if(!p.compare("0"))
12742 p="0 0";
12743 string lines, seconds;
12744 int pos=0;
12745 for(unsigned int i1=0; i1<p.length(); i1++) {
12746 if(p[i1]==0x20) {
12747 pos++;
12748 continue;
12749 }
12750 if(pos==0)
12751 lines+=p[i1];
12752 if(pos==1)
12753 seconds+=p[i1];
12754 }
12755 string disp;
12756 (*i).user_channel.nick_flood.lines=atol(lines.c_str());
12757 (*i).user_channel.nick_flood.seconds=atol(seconds.c_str());
12758 (*i).edit_user++;
12759 }
12760 }
12761
12762 if((*i).edit_user==2039) {
12763 string disp;
12764 int ec=0;
12765
12766 disp=lang_get_string(1,(*i).lang,157)+eol;
12767 dcc_send_msg((*i).socket,disp,ec);
12768
12769 (*i).edit_user++;
12770 }
12771 if((*i).edit_user==2040) {
12772 string p=dcc_get_line((*i).in_buff);
12773 if(!p.compare(""))
12774 return;
12775 if(!p.compare(".")) {
12776 (*i).edit_user++;
12777 } else {
12778 if(!p.compare("0"))
12779 p="0 0";
12780 string lines, seconds;
12781 int pos=0;
12782 for(unsigned int i1=0; i1<p.length(); i1++) {
12783 if(p[i1]==0x20) {
12784 pos++;
12785 continue;
12786 }
12787 if(pos==0)
12788 lines+=p[i1];
12789 if(pos==1)
12790 seconds+=p[i1];
12791 }
12792 string disp;
12793 (*i).user_channel.join_flood.lines=atol(lines.c_str());
12794 (*i).user_channel.join_flood.seconds=atol(seconds.c_str());
12795 (*i).edit_user++;
12796 }
12797 }
12798
12799 if((*i).edit_user==2041) {
12800 string disp;
12801 int ec=0;
12802
12803 disp=lang_get_string(1,(*i).lang,159)+eol;
12804 dcc_send_msg((*i).socket,disp,ec);
12805
12806 (*i).edit_user++;
12807 }
12808 if((*i).edit_user==2042) {
12809 string p=dcc_get_line((*i).in_buff);
12810 if(!p.compare(""))
12811 return;
12812 if(!p.compare(".")) {
12813 (*i).edit_user++;
12814 } else {
12815 if(!p.compare("0"))
12816 p="0 0";
12817 string lines, seconds;
12818 int pos=0;
12819 for(unsigned int i1=0; i1<p.length(); i1++) {
12820 if(p[i1]==0x20) {
12821 pos++;
12822 continue;
12823 }
12824 if(pos==0)
12825 lines+=p[i1];
12826 if(pos==1)
12827 seconds+=p[i1];
12828 }
12829 string disp;
12830 (*i).user_channel.mode_flood.lines=atol(lines.c_str());
12831 (*i).user_channel.mode_flood.seconds=atol(seconds.c_str());
12832 (*i).edit_user=2100;
12833 return;
12834 }
12835 }
12836
12837 if((*i).edit_user==2100) {
12838 string disp;
12839 int ec=0;
12840
12841 disp=lang_get_string(1,(*i).lang,385)+eol;
12842 dcc_send_msg((*i).socket,disp,ec);
12843
12844 (*i).edit_user++;
12845 }
12846 if((*i).edit_user==2101) {
12847 string p=dcc_get_line((*i).in_buff);
12848 if(!p.compare(""))
12849 return;
12850 if(!p.compare(".")) {
12851 (*i).edit_user++;
12852 } else {
12853 if(!p.compare("0"))
12854 p="0 0";
12855 string lines, seconds;
12856 int pos=0;
12857 for(unsigned int i1=0; i1<p.length(); i1++) {
12858 if(p[i1]==0x20) {
12859 pos++;
12860 continue;
12861 }
12862 if(pos==0)
12863 lines+=p[i1];
12864 if(pos==1)
12865 seconds+=p[i1];
12866 }
12867 string disp;
12868 (*i).user_channel.ctcp_flood.lines=atol(lines.c_str());
12869 (*i).user_channel.ctcp_flood.seconds=atol(seconds.c_str());
12870 (*i).edit_user++;
12871 }
12872 }
12873
12874 if((*i).edit_user==2102) {
12875 string disp;
12876 int ec=0;
12877
12878 disp=lang_get_string(1,(*i).lang,475)+eol;
12879 dcc_send_msg((*i).socket,disp,ec);
12880
12881 (*i).edit_user++;
12882 return;
12883 }
12884 if((*i).edit_user==2103) {
12885 string p=dcc_get_line((*i).in_buff);
12886 if(p.empty())
12887 return;
12888
12889 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) {
12890 string disp=lang_get_string(1,(*i).lang,475)+eol;
12891 int ec=0;
12892 dcc_send_msg((*i).socket,disp,ec);
12893 } else {
12894 if(!p.compare("n") || !p.compare("N")) {
12895 (*i).user_channel.can_send_unknown_users=false;
12896 } else {
12897 (*i).user_channel.can_send_unknown_users=true;
12898 }
12899 (*i).edit_user=2039;
12900 }
12901 return;
12902 }
12903
12904
12905 if((*i).edit_user==2039) {
12906 string disp=lang_get_string(1,(*i).lang,218)+eol;
12907 int ec=0;
12908 dcc_send_msg((*i).socket,disp,ec);
12909 disp="";
12910 int i2=1;
12911 vector<s_dynamic_rule>::iterator i1;
12912 for(i1=(*i).user_channel.allow_dynamic.begin(); i1!=(*i).user_channel.allow_dynamic.end(); i1++, i2++) {
12913 char tmp[64];
12914 ltoa(i2,tmp,10);
12915 disp+=lang_get_string(1,(*i).lang,593);
12916 if(i2<10)
12917 disp+="0";
12918 if(i2<100)
12919 disp+="0";
12920 disp+=(string)tmp+": "+(*i1).group+";"+(*i1).plus_modes+";"+(*i1).minus_modes+eol;
12921 }
12922 dcc_send_msg((*i).socket,disp,ec);
12923 disp=lang_get_string(1,(*i).lang,219)+eol;
12924 dcc_send_msg((*i).socket,disp,ec);
12925 (*i).edit_user++;
12926 }
12927 if((*i).edit_user==2040) {
12928 string p=dcc_get_line((*i).in_buff);
12929 if(!p.compare(""))
12930 return;
12931 bool got=false;
12932 if(!p.compare(".")) {
12933 got=true;
12934 (*i).edit_user=2044;
12935 }
12936 if(!p.compare(".add")) {
12937 got=true;
12938 string disp=lang_get_string(1,(*i).lang,211)+eol;
12939 int ec=0;
12940 dcc_send_msg((*i).socket,disp,ec);
12941
12942 vector<string>::iterator i1;
12943 for(i1=(*i).access_grant_groups.begin(); i1!=(*i).access_grant_groups.end(); i1++) {
12944 disp=(*i1)+eol;
12945 dcc_send_msg((*i).socket,disp,ec);
12946 }
12947
12948 (*i).user_channel_allow_dynamic.group="";
12949 (*i).user_channel_allow_dynamic.plus_modes="";
12950 (*i).user_channel_allow_dynamic.minus_modes="";
12951
12952 (*i).edit_user=2041;
12953 }
12954 string p1, p2;
12955 int pos=0;
12956 for(unsigned int i1=0; i1<p.length(); i1++) {
12957 if(p[i1]==0x20) {
12958 pos=1;
12959 continue;
12960 }
12961 if(pos==0)
12962 p1+=p[i1];
12963 if(pos==1)
12964 p2+=p[i1];
12965 }
12966 if(!p1.compare(".remove")) {
12967 got=true;
12968 int line=atol(p2.c_str());
12969
12970 int i2=1;
12971 vector<s_dynamic_rule>::iterator i1;
12972 for(i1=(*i).user_channel.allow_dynamic.begin(); i1!=(*i).user_channel.allow_dynamic.end(); i1++, i2++)
12973 if(i2==line) {
12974 (*i).user_channel.allow_dynamic.erase(i1);
12975 break;
12976 }
12977 (*i).edit_user=2039;
12978 }
12979 if(!got) {
12980 string disp=lang_get_string(1,(*i).lang,219)+eol;
12981 int ec=0;
12982 dcc_send_msg((*i).socket,disp,ec);
12983 }
12984 }
12985 if((*i).edit_user==2041) {
12986 string p=dcc_get_line((*i).in_buff);
12987 if(!p.compare(""))
12988 return;
12989
12990 vector<string>::iterator i1;
12991 bool got=false;
12992 for(i1=(*i).access_grant_groups.begin(); i1!=(*i).access_grant_groups.end(); i1++)
12993 if(!(*i1).compare(p))
12994 got=true;
12995 string disp;
12996 if(got)
12997 disp=lang_get_string(1,(*i).lang,212)+eol;
12998 else
12999 disp=lang_get_string(1,(*i).lang,214)+eol;
13000 int ec=0;
13001 dcc_send_msg((*i).socket,disp,ec);
13002 p=(string)"\""+p+"\"";
13003 if(got)
13004 (*i).user_channel_allow_dynamic.group=p;
13005
13006 (*i).edit_user++;
13007 }
13008 if((*i).edit_user==2042) {
13009 string p=dcc_get_line((*i).in_buff);
13010 if(!p.compare(""))
13011 return;
13012 if(!p.compare("."))
13013 p="";
13014 p=(string)"\""+p+"\"";
13015 (*i).user_channel_allow_dynamic.plus_modes=p;
13016
13017 string disp;
13018 int ec=0;
13019
13020 disp=lang_get_string(1,(*i).lang,213)+eol;
13021 dcc_send_msg((*i).socket,disp,ec);
13022 (*i).edit_user++;
13023 }
13024 if((*i).edit_user==2043) {
13025 string p=dcc_get_line((*i).in_buff);
13026 if(!p.compare(""))
13027 return;
13028 if(!p.compare("."))
13029 p="";
13030 p=(string)"\""+p+"\"";
13031 (*i).user_channel_allow_dynamic.minus_modes=p;
13032
13033 (*i).user_channel.allow_dynamic.push_back((*i).user_channel_allow_dynamic);
13034
13035 (*i).edit_user=2039;
13036 }
13037
13038 if((*i).edit_user==2044) {
13039 string chan;
13040 vector<s_channel>::iterator i1;
13041 int i2=1;
13042 for(i1=(*i).user_channels.begin(); i1!=(*i).user_channels.end(); i1++, i2++)
13043 if(i2==(*i).edit_channel_num) {
13044 chan=(*i1).channel_name;
13045 break;
13046 }
13047 if(!chan.compare("")) {
13048 (*i).edit_user=2;
13049 log_debug("in file " __FILE__ " in function " __FUNC__ " occurred error: cannot find channel to edit! (#2) huh?!");
13050 return;
13051 }
13052 (*i1).on_deop=(*i).user_channel.on_deop;
13053 (*i1).on_ban=(*i).user_channel.on_ban;
13054 (*i1).on_unban=(*i).user_channel.on_unban;
13055 (*i1).on_kick=(*i).user_channel.on_kick;
13056 (*i1).on_op=(*i).user_channel.on_op;
13057 (*i1).on_voice=(*i).user_channel.on_voice;
13058 (*i1).on_devoice=(*i).user_channel.on_devoice;
13059 (*i1).on_creator=(*i).user_channel.on_creator;
13060 (*i1).on_decreator=(*i).user_channel.on_decreator;
13061 (*i1).on_join=(*i).user_channel.on_join;
13062 (*i1).on_banned=(*i).user_channel.on_banned;
13063 (*i1).on_flood=(*i).user_channel.on_flood;
13064 (*i1).on_privmsg=(*i).user_channel.on_privmsg;
13065 (*i1).on_notice=(*i).user_channel.on_notice;
13066 (*i1).on_other_mode=(*i).user_channel.on_other_mode;
13067
13068 (*i1).msg_flood=(*i).user_channel.msg_flood;
13069 (*i1).notice_flood=(*i).user_channel.notice_flood;
13070 (*i1).repeat_flood=(*i).user_channel.repeat_flood;
13071 (*i1).nick_flood=(*i).user_channel.nick_flood;
13072 (*i1).join_flood=(*i).user_channel.join_flood;
13073 (*i1).mode_flood=(*i).user_channel.mode_flood;
13074 (*i1).ctcp_flood=(*i).user_channel.ctcp_flood;
13075 (*i1).configured=true;
13076
13077 (*i1).allow_dynamic.clear();
13078 vector<s_dynamic_rule>::iterator i3;
13079 for(i3=(*i).user_channel.allow_dynamic.begin(); i3!=(*i).user_channel.allow_dynamic.end(); i3++)
13080 (*i1).allow_dynamic.push_back(*i3);
13081
13082 (*i).edit_user=2;
13083 }
13084
13085 if((*i).edit_user==1100) {
13086 if(!(*i).access_grant_backup) {
13087 string disp;
13088 int ec=0;
13089 disp=lang_get_string(1,(*i).lang,173)+eol;
13090 dcc_send_msg((*i).socket,disp,ec);
13091
13092 (*i).edit_user+=2;
13093 return;
13094 }
13095 string disp;
13096 int ec=0;
13097
13098 disp=lang_get_string(1,(*i).lang,168)+eol;
13099 dcc_send_msg((*i).socket,disp,ec);
13100
13101 (*i).edit_user++;
13102 }
13103 if((*i).edit_user==1101) {
13104 string p=dcc_get_line((*i).in_buff);
13105 if(!p.compare(""))
13106 return;
13107 bool got=false;
13108 if(!p.compare("y") || !p.compare("Y")) {
13109 got=true;
13110 (*i).user_access_to_backup=true;
13111 }
13112 if(!p.compare("n") || !p.compare("N")) {
13113 got=true;
13114 (*i).user_access_to_backup=false;
13115 }
13116 got?(*i).edit_user++:(*i).edit_user--;
13117 }
13118 if((*i).edit_user==1102) {
13119 if(!(*i).access_grant_rehash) {
13120 string disp;
13121 int ec=0;
13122 disp=lang_get_string(1,(*i).lang,174)+eol;
13123 dcc_send_msg((*i).socket,disp,ec);
13124
13125 (*i).edit_user+=2;
13126 return;
13127 }
13128 string disp;
13129 int ec=0;
13130
13131 disp=lang_get_string(1,(*i).lang,169)+eol;
13132 dcc_send_msg((*i).socket,disp,ec);
13133
13134 (*i).edit_user++;
13135 }
13136 if((*i).edit_user==1103) {
13137 string p=dcc_get_line((*i).in_buff);
13138 if(!p.compare(""))
13139 return;
13140 bool got=false;
13141 if(!p.compare("y") || !p.compare("Y")) {
13142 got=true;
13143 (*i).user_access_to_rehash=true;
13144 }
13145 if(!p.compare("n") || !p.compare("N")) {
13146 got=true;
13147 (*i).user_access_to_rehash=false;
13148 }
13149 got?(*i).edit_user++:(*i).edit_user--;
13150 }
13151 if((*i).edit_user==1104) {
13152 if(!(*i).access_grant_backup) {
13153 (*i).edit_user+=2;
13154 return;
13155 }
13156 string disp;
13157 int ec=0;
13158
13159 disp=lang_get_string(1,(*i).lang,170)+eol;
13160 dcc_send_msg((*i).socket,disp,ec);
13161
13162 (*i).edit_user++;
13163 }
13164 if((*i).edit_user==1105) {
13165 string p=dcc_get_line((*i).in_buff);
13166 if(!p.compare(""))
13167 return;
13168 bool got=false;
13169 if(!p.compare("y") || !p.compare("Y")) {
13170 got=true;
13171 (*i).user_access_grant_backup=true;
13172 }
13173 if(!p.compare("n") || !p.compare("N")) {
13174 got=true;
13175 (*i).user_access_grant_backup=false;
13176 }
13177 got?(*i).edit_user++:(*i).edit_user--;
13178 }
13179 if((*i).edit_user==1106) {
13180 if(!(*i).access_grant_rehash) {
13181 (*i).edit_user+=2;
13182 return;
13183 }
13184 string disp;
13185 int ec=0;
13186
13187 disp=lang_get_string(1,(*i).lang,171)+eol;
13188 dcc_send_msg((*i).socket,disp,ec);
13189
13190 (*i).edit_user++;
13191 }
13192 if((*i).edit_user==1107) {
13193 string p=dcc_get_line((*i).in_buff);
13194 if(!p.compare(""))
13195 return;
13196 bool got=false;
13197 if(!p.compare("y") || !p.compare("Y")) {
13198 got=true;
13199 (*i).user_access_grant_rehash=true;
13200 }
13201 if(!p.compare("n") || !p.compare("N")) {
13202 got=true;
13203 (*i).user_access_grant_rehash=false;
13204 }
13205 got?(*i).edit_user++:(*i).edit_user--;
13206 }
13207 if((*i).edit_user==1108) {
13208 if(!(*i).access_grant_plususer) {
13209 string disp;
13210 int ec=0;
13211 disp=lang_get_string(1,(*i).lang,191)+eol;
13212 dcc_send_msg((*i).socket,disp,ec);
13213
13214 (*i).edit_user+=2;
13215 return;
13216 }
13217 string disp;
13218 int ec=0;
13219
13220 disp=lang_get_string(1,(*i).lang,189)+eol;
13221 dcc_send_msg((*i).socket,disp,ec);
13222
13223 (*i).edit_user++;
13224 }
13225 if((*i).edit_user==1109) {
13226 string p=dcc_get_line((*i).in_buff);
13227 if(!p.compare(""))
13228 return;
13229 bool got=false;
13230 if(!p.compare("y") || !p.compare("Y")) {
13231 got=true;
13232 (*i).user_access_to_plususer=true;
13233 }
13234 if(!p.compare("n") || !p.compare("N")) {
13235 got=true;
13236 (*i).user_access_to_plususer=false;
13237 }
13238 got?(*i).edit_user++:(*i).edit_user--;
13239 }
13240 if((*i).edit_user==1110) {
13241 if(!(*i).access_grant_plususer) {
13242 (*i).edit_user+=2;
13243 return;
13244 }
13245 string disp;
13246 int ec=0;
13247
13248 disp=lang_get_string(1,(*i).lang,190)+eol;
13249 dcc_send_msg((*i).socket,disp,ec);
13250
13251 (*i).edit_user++;
13252 }
13253 if((*i).edit_user==1111) {
13254 string p=dcc_get_line((*i).in_buff);
13255 if(!p.compare(""))
13256 return;
13257 bool got=false;
13258 if(!p.compare("y") || !p.compare("Y")) {
13259 got=true;
13260 (*i).user_access_grant_plususer=true;
13261 }
13262 if(!p.compare("n") || !p.compare("N")) {
13263 got=true;
13264 (*i).user_access_grant_plususer=false;
13265 }
13266 got?(*i).edit_user++:(*i).edit_user--;
13267 }
13268 if((*i).edit_user==1112) {
13269 if(!(*i).access_grant_plusproc) {
13270 string disp;
13271 int ec=0;
13272 disp=lang_get_string(1,(*i).lang,199)+eol;
13273 dcc_send_msg((*i).socket,disp,ec);
13274
13275 (*i).edit_user+=2;
13276 return;
13277 }
13278 string disp;
13279 int ec=0;
13280
13281 disp=lang_get_string(1,(*i).lang,197)+eol;
13282 dcc_send_msg((*i).socket,disp,ec);
13283
13284 (*i).edit_user++;
13285 }
13286 if((*i).edit_user==1113) {
13287 string p=dcc_get_line((*i).in_buff);
13288 if(!p.compare(""))
13289 return;
13290 bool got=false;
13291 if(!p.compare("y") || !p.compare("Y")) {
13292 got=true;
13293 (*i).user_access_to_plusproc=true;
13294 }
13295 if(!p.compare("n") || !p.compare("N")) {
13296 got=true;
13297 (*i).user_access_to_plusproc=false;
13298 }
13299 got?(*i).edit_user++:(*i).edit_user--;
13300 }
13301 if((*i).edit_user==1114) {
13302 if(!(*i).access_grant_plususer) {
13303 (*i).edit_user+=2;
13304 return;
13305 }
13306 string disp;
13307 int ec=0;
13308
13309 disp=lang_get_string(1,(*i).lang,198)+eol;
13310 dcc_send_msg((*i).socket,disp,ec);
13311
13312 (*i).edit_user++;
13313 }
13314 if((*i).edit_user==1115) {
13315 string p=dcc_get_line((*i).in_buff);
13316 if(!p.compare(""))
13317 return;
13318 bool got=false;
13319 if(!p.compare("y") || !p.compare("Y")) {
13320 got=true;
13321 (*i).user_access_grant_plusproc=true;
13322 }
13323 if(!p.compare("n") || !p.compare("N")) {
13324 got=true;
13325 (*i).user_access_grant_plusproc=false;
13326 }
13327 got?(*i).edit_user++:(*i).edit_user--;
13328 }
13329 if((*i).edit_user==1116) {
13330 string disp;
13331 int ec=0;
13332
13333 if(!(*i).access_grant_replication) {
13334 (*i).edit_user+=2;
13335
13336 disp=lang_get_string(1,(*i).lang,216)+eol;
13337 dcc_send_msg((*i).socket,disp,ec);
13338
13339 return;
13340 }
13341
13342 disp=lang_get_string(1,(*i).lang,215)+eol;
13343 dcc_send_msg((*i).socket,disp,ec);
13344
13345 (*i).edit_user++;
13346 }
13347 if((*i).edit_user==1117) {
13348 string p=dcc_get_line((*i).in_buff);
13349 if(!p.compare(""))
13350 return;
13351 bool got=false;
13352 if(!p.compare("y") || !p.compare("Y")) {
13353 got=true;
13354 (*i).user_access_to_replication=true;
13355 }
13356 if(!p.compare("n") || !p.compare("N")) {
13357 got=true;
13358 (*i).user_access_to_replication=false;
13359 }
13360 got?(*i).edit_user++:(*i).edit_user--;
13361 }
13362 if((*i).edit_user==1118) {
13363 string disp;
13364 int ec=0;
13365
13366 if(!(*i).access_grant_replication) {
13367 (*i).edit_user+=2;
13368
13369 disp=lang_get_string(1,(*i).lang,216)+eol;
13370 dcc_send_msg((*i).socket,disp,ec);
13371
13372 return;
13373 }
13374
13375 disp=lang_get_string(1,(*i).lang,600)+eol;
13376 dcc_send_msg((*i).socket,disp,ec);
13377
13378 (*i).edit_user++;
13379 }
13380 if((*i).edit_user==1119) {
13381 string p=dcc_get_line((*i).in_buff);
13382 if(!p.compare(""))
13383 return;
13384 bool got=false;
13385 if(!p.compare("y") || !p.compare("Y")) {
13386 got=true;
13387 (*i).user_access_grant_replication=true;
13388 }
13389 if(!p.compare("n") || !p.compare("N")) {
13390 got=true;
13391 (*i).user_access_grant_replication=false;
13392 }
13393 got?(*i).edit_user++:(*i).edit_user--;
13394 }
13395
13396
13397
13398 if((*i).edit_user==1120) {
13399 string disp;
13400 int ec=0;
13401
13402 if(!(*i).access_grant_restart) {
13403 (*i).edit_user+=2;
13404
13405 disp=lang_get_string(1,(*i).lang,262)+eol;
13406 dcc_send_msg((*i).socket,disp,ec);
13407
13408 return;
13409 }
13410
13411 disp=lang_get_string(1,(*i).lang,260)+eol;
13412 dcc_send_msg((*i).socket,disp,ec);
13413
13414 (*i).edit_user++;
13415 }
13416 if((*i).edit_user==1121) {
13417 string p=dcc_get_line((*i).in_buff);
13418 if(!p.compare(""))
13419 return;
13420 bool got=false;
13421 if(!p.compare("y") || !p.compare("Y")) {
13422 got=true;
13423 (*i).user_access_to_restart=true;
13424 }
13425 if(!p.compare("n") || !p.compare("N")) {
13426 got=true;
13427 (*i).user_access_to_restart=false;
13428 }
13429 got?(*i).edit_user++:(*i).edit_user--;
13430 }
13431 if((*i).edit_user==1122) {
13432 string disp;
13433 int ec=0;
13434
13435 if(!(*i).access_grant_restart) {
13436 (*i).edit_user+=2;
13437
13438 return;
13439 }
13440
13441 disp=lang_get_string(1,(*i).lang,261)+eol;
13442 dcc_send_msg((*i).socket,disp,ec);
13443
13444 (*i).edit_user++;
13445 }
13446 if((*i).edit_user==1123) {
13447 string p=dcc_get_line((*i).in_buff);
13448 if(!p.compare(""))
13449 return;
13450 bool got=false;
13451 if(!p.compare("y") || !p.compare("Y")) {
13452 got=true;
13453 (*i).user_access_grant_restart=true;
13454 }
13455 if(!p.compare("n") || !p.compare("N")) {
13456 got=true;
13457 (*i).user_access_grant_restart=false;
13458 }
13459 got?(*i).edit_user++:(*i).edit_user--;
13460 }
13461
13462 if((*i).edit_user==1124) {
13463 string disp;
13464 int ec=0;
13465
13466 if(!(*i).access_grant_die) {
13467 (*i).edit_user+=2;
13468
13469 disp=lang_get_string(1,(*i).lang,269)+eol;
13470 dcc_send_msg((*i).socket,disp,ec);
13471
13472 return;
13473 }
13474
13475 disp=lang_get_string(1,(*i).lang,267)+eol;
13476 dcc_send_msg((*i).socket,disp,ec);
13477
13478 (*i).edit_user++;
13479 }
13480 if((*i).edit_user==1125) {
13481 string p=dcc_get_line((*i).in_buff);
13482 if(!p.compare(""))
13483 return;
13484 bool got=false;
13485 if(!p.compare("y") || !p.compare("Y")) {
13486 got=true;
13487 (*i).user_access_to_die=true;
13488 }
13489 if(!p.compare("n") || !p.compare("N")) {
13490 got=true;
13491 (*i).user_access_to_die=false;
13492 }
13493 got?(*i).edit_user++:(*i).edit_user--;
13494 }
13495 if((*i).edit_user==1126) {
13496 string disp;
13497 int ec=0;
13498
13499 if(!(*i).access_grant_die) {
13500 (*i).edit_user+=2;
13501
13502 return;
13503 }
13504
13505 disp=lang_get_string(1,(*i).lang,268)+eol;
13506 dcc_send_msg((*i).socket,disp,ec);
13507
13508 (*i).edit_user++;
13509 }
13510 if((*i).edit_user==1127) {
13511 string p=dcc_get_line((*i).in_buff);
13512 if(!p.compare(""))
13513 return;
13514 bool got=false;
13515 if(!p.compare("y") || !p.compare("Y")) {
13516 got=true;
13517 (*i).user_access_grant_die=true;
13518 }
13519 if(!p.compare("n") || !p.compare("N")) {
13520 got=true;
13521 (*i).user_access_grant_die=false;
13522 }
13523 got?(*i).edit_user++:(*i).edit_user--;
13524 }
13525
13526 if((*i).edit_user==1128) {
13527 string disp;
13528 int ec=0;
13529
13530 if(!(*i).access_grant_filesystem) {
13531 (*i).edit_user+=2;
13532
13533 disp=lang_get_string(1,(*i).lang,278)+eol;
13534 dcc_send_msg((*i).socket,disp,ec);
13535
13536 return;
13537 }
13538
13539 disp=lang_get_string(1,(*i).lang,276)+eol;
13540 dcc_send_msg((*i).socket,disp,ec);
13541
13542 (*i).edit_user++;
13543 }
13544 if((*i).edit_user==1129) {
13545 string p=dcc_get_line((*i).in_buff);
13546 if(!p.compare(""))
13547 return;
13548 bool got=false;
13549 if(!p.compare("y") || !p.compare("Y")) {
13550 got=true;
13551 (*i).user_access_to_filesystem=true;
13552 }
13553 if(!p.compare("n") || !p.compare("N")) {
13554 got=true;
13555 (*i).user_access_to_filesystem=false;
13556 }
13557 got?(*i).edit_user++:(*i).edit_user--;
13558 }
13559 if((*i).edit_user==1130) {
13560 string disp;
13561 int ec=0;
13562
13563 if(!(*i).access_grant_filesystem) {
13564 (*i).edit_user+=2;
13565
13566 return;
13567 }
13568
13569 disp=lang_get_string(1,(*i).lang,277)+eol;
13570 dcc_send_msg((*i).socket,disp,ec);
13571
13572 (*i).edit_user++;
13573 }
13574 if((*i).edit_user==1131) {
13575 string p=dcc_get_line((*i).in_buff);
13576 if(!p.compare(""))
13577 return;
13578 bool got=false;
13579 if(!p.compare("y") || !p.compare("Y")) {
13580 got=true;
13581 (*i).user_access_grant_filesystem=true;
13582 }
13583 if(!p.compare("n") || !p.compare("N")) {
13584 got=true;
13585 (*i).user_access_grant_filesystem=false;
13586 }
13587 got?(*i).edit_user++:(*i).edit_user--;
13588 }
13589
13590 if((*i).edit_user==1132) {
13591 string disp;
13592 int ec=0;
13593
13594 if(!(*i).access_grant_private) {
13595 (*i).edit_user+=2;
13596
13597 disp=lang_get_string(1,(*i).lang,409)+eol;
13598 dcc_send_msg((*i).socket,disp,ec);
13599
13600 return;
13601 }
13602
13603 disp=lang_get_string(1,(*i).lang,406)+eol;
13604 dcc_send_msg((*i).socket,disp,ec);
13605
13606 (*i).edit_user++;
13607 }
13608 if((*i).edit_user==1133) {
13609 string p=dcc_get_line((*i).in_buff);
13610 if(!p.compare(""))
13611 return;
13612 bool got=false;
13613 if(!p.compare("y") || !p.compare("Y")) {
13614 got=true;
13615 (*i).user_access_to_private=true;
13616 }
13617 if(!p.compare("n") || !p.compare("N")) {
13618 got=true;
13619 (*i).user_access_to_private=false;
13620 }
13621 got?(*i).edit_user++:(*i).edit_user--;
13622 }
13623
13624 if((*i).edit_user==1134) {
13625 string disp;
13626 int ec=0;
13627
13628 if(!(*i).access_grant_private) {
13629 (*i).edit_user+=2;
13630 return;
13631 }
13632
13633 disp=lang_get_string(1,(*i).lang,407)+eol;
13634 dcc_send_msg((*i).socket,disp,ec);
13635
13636 (*i).edit_user++;
13637 }
13638 if((*i).edit_user==1135) {
13639 string p=dcc_get_line((*i).in_buff);
13640 if(!p.compare(""))
13641 return;
13642 bool got=false;
13643 if(!p.compare("y") || !p.compare("Y")) {
13644 got=true;
13645 (*i).user_access_grant_private=true;
13646 }
13647 if(!p.compare("n") || !p.compare("N")) {
13648 got=true;
13649 (*i).user_access_grant_private=false;
13650 }
13651 got?(*i).edit_user++:(*i).edit_user--;
13652 }
13653
13654 if((*i).edit_user==1136) {
13655 string disp;
13656 int ec=0;
13657
13658 if(!(*i).access_grant_upgrade) {
13659 (*i).edit_user+=2;
13660 return;
13661 }
13662
13663 disp=lang_get_string(1,(*i).lang,625)+eol;
13664 dcc_send_msg((*i).socket,disp,ec);
13665
13666 (*i).edit_user++;
13667 }
13668 if((*i).edit_user==1137) {
13669 string p=dcc_get_line((*i).in_buff);
13670 if(!p.compare(""))
13671 return;
13672 bool got=false;
13673 if(!p.compare("y") || !p.compare("Y")) {
13674 got=true;
13675 (*i).user_access_to_upgrade=true;
13676 }
13677 if(!p.compare("n") || !p.compare("N")) {
13678 got=true;
13679 (*i).user_access_to_upgrade=false;
13680 }
13681 got?(*i).edit_user++:(*i).edit_user--;
13682 }
13683
13684 if((*i).edit_user==1138) {
13685 string disp;
13686 int ec=0;
13687
13688 if(!(*i).access_grant_upgrade) {
13689 (*i).edit_user+=2;
13690 return;
13691 }
13692
13693 disp=lang_get_string(1,(*i).lang,626)+eol;
13694 dcc_send_msg((*i).socket,disp,ec);
13695
13696 (*i).edit_user++;
13697 }
13698 if((*i).edit_user==1139) {
13699 string p=dcc_get_line((*i).in_buff);
13700 if(!p.compare(""))
13701 return;
13702 bool got=false;
13703 if(!p.compare("y") || !p.compare("Y")) {
13704 got=true;
13705 (*i).user_access_grant_upgrade=true;
13706 }
13707 if(!p.compare("n") || !p.compare("N")) {
13708 got=true;
13709 (*i).user_access_grant_upgrade=false;
13710 }
13711 got?(*i).edit_user++:(*i).edit_user--;
13712 }
13713
13714
13715 if((*i).edit_user==1140) {
13716 string disp;
13717 int ec=0;
13718
13719 if(!(*i).access_grant_apply) {
13720 (*i).edit_user+=2;
13721 return;
13722 }
13723
13724 disp=lang_get_string(1,(*i).lang,680)+eol;
13725 dcc_send_msg((*i).socket,disp,ec);
13726
13727 (*i).edit_user++;
13728 }
13729 if((*i).edit_user==1141) {
13730 string p=dcc_get_line((*i).in_buff);
13731 if(!p.compare(""))
13732 return;
13733 bool got=false;
13734 if(!p.compare("y") || !p.compare("Y")) {
13735 got=true;
13736 (*i).user_access_to_apply=true;
13737 }
13738 if(!p.compare("n") || !p.compare("N")) {
13739 got=true;
13740 (*i).user_access_to_apply=false;
13741 }
13742 got?(*i).edit_user++:(*i).edit_user--;
13743 }
13744
13745 if((*i).edit_user==1142) {
13746 string disp;
13747 int ec=0;
13748
13749 if(!(*i).access_grant_apply) {
13750 (*i).edit_user+=2;
13751 return;
13752 }
13753
13754 disp=lang_get_string(1,(*i).lang,681)+eol;
13755 dcc_send_msg((*i).socket,disp,ec);
13756
13757 (*i).edit_user++;
13758 }
13759 if((*i).edit_user==1143) {
13760 string p=dcc_get_line((*i).in_buff);
13761 if(!p.compare(""))
13762 return;
13763 bool got=false;
13764 if(!p.compare("y") || !p.compare("Y")) {
13765 got=true;
13766 (*i).user_access_grant_apply=true;
13767 }
13768 if(!p.compare("n") || !p.compare("N")) {
13769 got=true;
13770 (*i).user_access_grant_apply=false;
13771 }
13772 got?(*i).edit_user++:(*i).edit_user--;
13773 }
13774
13775
13776 if((*i).edit_user==1144) {
13777 if(!(*i).access_grant_can_send_all_users) {
13778 (*i).edit_user+=2;
13779 return;
13780 }
13781 string disp;
13782 int ec=0;
13783
13784 disp=lang_get_string(1,(*i).lang,477)+eol;
13785 dcc_send_msg((*i).socket,disp,ec);
13786
13787 (*i).edit_user++;
13788 }
13789 if((*i).edit_user==1145) {
13790 string p=dcc_get_line((*i).in_buff);
13791 if(!p.compare(""))
13792 return;
13793 bool got=false;
13794 if(!p.compare("y") || !p.compare("Y")) {
13795 got=true;
13796 (*i).user_access_to_can_send_all_users=true;
13797 }
13798 if(!p.compare("n") || !p.compare("N")) {
13799 got=true;
13800 (*i).user_access_to_can_send_all_users=false;
13801 }
13802 got?(*i).edit_user++:(*i).edit_user--;
13803 }
13804
13805 if((*i).edit_user==1146) {
13806 if(!(*i).access_grant_can_send_all_users) {
13807 (*i).edit_user+=2;
13808 return;
13809 }
13810 string disp;
13811 int ec=0;
13812
13813 disp=lang_get_string(1,(*i).lang,478)+eol;
13814 dcc_send_msg((*i).socket,disp,ec);
13815
13816 (*i).edit_user++;
13817 }
13818 if((*i).edit_user==1147) {
13819 string p=dcc_get_line((*i).in_buff);
13820 if(!p.compare(""))
13821 return;
13822 bool got=false;
13823 if(!p.compare("y") || !p.compare("Y")) {
13824 got=true;
13825 (*i).user_access_grant_can_send_all_users=true;
13826 }
13827 if(!p.compare("n") || !p.compare("N")) {
13828 got=true;
13829 (*i).user_access_grant_can_send_all_users=false;
13830 }
13831 got?(*i).edit_user++:(*i).edit_user--;
13832 }
13833
13834
13835 if((*i).edit_user==1148) {
13836 if(!(*i).access_grant_can_send_unknown_users) {
13837 (*i).edit_user+=2;
13838 return;
13839 }
13840 string disp;
13841 int ec=0;
13842
13843 disp=lang_get_string(1,(*i).lang,481)+eol;
13844 dcc_send_msg((*i).socket,disp,ec);
13845
13846 (*i).edit_user++;
13847 }
13848 if((*i).edit_user==1149) {
13849 string p=dcc_get_line((*i).in_buff);
13850 if(!p.compare(""))
13851 return;
13852 bool got=false;
13853 if(!p.compare("y") || !p.compare("Y")) {
13854 got=true;
13855 (*i).user_access_to_can_send_unknown_users=true;
13856 }
13857 if(!p.compare("n") || !p.compare("N")) {
13858 got=true;
13859 (*i).user_access_to_can_send_unknown_users=false;
13860 }
13861 got?(*i).edit_user++:(*i).edit_user--;
13862 }
13863
13864 if((*i).edit_user==1150) {
13865 if(!(*i).access_grant_can_send_unknown_users) {
13866 (*i).edit_user+=2;
13867 return;
13868 }
13869 string disp;
13870 int ec=0;
13871
13872 disp=lang_get_string(1,(*i).lang,482)+eol;
13873 dcc_send_msg((*i).socket,disp,ec);
13874
13875 (*i).edit_user++;
13876 }
13877 if((*i).edit_user==1151) {
13878 string p=dcc_get_line((*i).in_buff);
13879 if(!p.compare(""))
13880 return;
13881 bool got=false;
13882 if(!p.compare("y") || !p.compare("Y")) {
13883 got=true;
13884 (*i).user_access_grant_can_send_unknown_users=true;
13885 }
13886 if(!p.compare("n") || !p.compare("N")) {
13887 got=true;
13888 (*i).user_access_grant_can_send_unknown_users=false;
13889 }
13890 got?(*i).edit_user++:(*i).edit_user--;
13891 }
13892
13893 if((*i).edit_user==1152) {
13894 (*i).edit_user=2;
13895 }
13896 }
13897
13898
13899
13900
13901
13902
13903
13904
13905
13906 void dcc_loop_edit_rproc(vector<s_dcc_client>::iterator i, string& eol)
13907 {
13908 if((*i).edit_rproc==1) {
13909 string p=dcc_get_line((*i).in_buff);
13910 if(!p.compare(""))
13911 return;
13912 vector<string>::iterator i1;
13913 bool got=false;
13914 for(i1=(*i).access_to_procs.begin(); i1!=(*i).access_to_procs.end(); i1++)
13915 if(!(*i1).compare(p)) {
13916 got=true;
13917 (*i).proc_name=*i1;
13918 break;
13919 }
13920 if(!got) {
13921 string disp=lang_get_string(1,(*i).lang,137)+eol;
13922 int ec=0;
13923 dcc_send_msg((*i).socket,disp,ec);
13924 return;
13925 }
13926 (*i).rproc.clear();
13927 vector<s_procedure>::iterator i2;
13928 for(i2=r_procedures.begin(); i2!=r_procedures.end(); i2++) {
13929 if(!(*i2).name.compare((*i).proc_name)) {
13930 (*i).rproc=(*i2).rproc;
13931 break;
13932 }
13933 }
13934 (*i).edit_rproc++;
13935 }
13936 if((*i).edit_rproc==2) {
13937 string disp=lang_get_string(1,(*i).lang,617)+eol;
13938 disp=lang_subst(disp,(*i).proc_name);
13939 int ec=0;
13940 dcc_send_msg((*i).socket,disp,ec);
13941 disp="";
13942 int i2=1;
13943 vector<s_rproc>::iterator i1;
13944 for(i1=(*i).rproc.begin(); i1!=(*i).rproc.end(); i1++, i2++) {
13945 char tmp[64];
13946 ltoa(i2,tmp,10);
13947 disp+=lang_get_string(1,(*i).lang,593);
13948 if(i2<10)
13949 disp+="0";
13950 if(i2<100)
13951 disp+="0";
13952 disp+=(string)tmp+": "+(*i1).remote_bot+eol;
13953 }
13954 dcc_send_msg((*i).socket,disp,ec);
13955 disp=lang_get_string(1,(*i).lang,618)+eol;
13956 dcc_send_msg((*i).socket,disp,ec);
13957 (*i).edit_rproc++;
13958 }
13959 if((*i).edit_rproc==3) {
13960 string p=dcc_get_line((*i).in_buff);
13961 if(!p.compare(""))
13962 return;
13963
13964 if(!p.compare(".")) {
13965 string disp=lang_get_string(1,(*i).lang,426)+eol;
13966 int ec=0;
13967 dcc_send_msg((*i).socket,disp,ec);
13968 (*i).edit_rproc=100;
13969 return;
13970 }
13971
13972 if(!p.compare(".add")) {
13973 string disp=lang_get_string(1,(*i).lang,619)+eol;
13974
13975 vector<s_user>::iterator i1;
13976 for(i1=r_users.begin(); i1!=r_users.end(); i1++)
13977 disp+=(*i1).name+eol;
13978
13979 disp+=lang_get_string(1,(*i).lang,429)+eol;
13980
13981 int ec=0;
13982 dcc_send_msg((*i).socket,disp,ec);
13983 (*i).edit_rproc=200;
13984 return;
13985 }
13986
13987 string p1, p2;
13988 {
13989 int pos=0;
13990 for(unsigned int i1=0; i1<p.length(); i1++) {
13991 if(p[i1]==0x20) {
13992 pos=1;
13993 continue;
13994 }
13995 if(pos==0)
13996 p1+=p[i1];
13997 if(pos==1)
13998 p2+=p[i1];
13999 }
14000 }
14001 if(!p1.compare(".remove")) {
14002 int line=0;
14003
14004 vector<s_rproc>::iterator i1;
14005 for(i1=(*i).rproc.begin(); i1!=(*i).rproc.end(); i1++)
14006 if(++line==atol(p2.c_str())) {
14007 (*i).rproc.erase(i1);
14008 break;
14009 }
14010 (*i).edit_rproc=2;
14011 return;
14012 }
14013
14014 (*i).edit_rproc=2;
14015 return;
14016 }
14017
14018
14019 if((*i).edit_rproc==100) {
14020 string p=dcc_get_line((*i).in_buff);
14021 if(!p.compare(""))
14022 return;
14023
14024 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) {
14025 string disp=lang_get_string(1,(*i).lang,426)+eol;
14026 int ec=0;
14027 dcc_send_msg((*i).socket,disp,ec);
14028 } else {
14029 if(!p.compare("n") || !p.compare("N")) {
14030 string disp=lang_get_string(1,(*i).lang,70)+eol;
14031 int ec=0;
14032 dcc_send_msg((*i).socket,disp,ec);
14033
14034 (*i).proc_name="";
14035 (*i).rproc.clear();
14036 (*i).edit_rproc=0;
14037 return;
14038 } else {
14039 vector<string>::iterator i1;
14040 bool got=false;
14041 for(i1=(*i).access_to_procs.begin(); i1!=(*i).access_to_procs.end(); i1++)
14042 if(!(*i1).compare((*i).proc_name)) {
14043 got=true;
14044 break;
14045 }
14046 if(!got) {
14047 string disp=lang_get_string(1,(*i).lang,121)+eol;
14048 int ec=0;
14049 dcc_send_msg((*i).socket,disp,ec);
14050 } else {
14051 vector<s_procedure>::iterator i2;
14052 for(i2=r_procedures.begin(); i2!=r_procedures.end(); i2++) {
14053 if(!(*i2).name.compare((*i).proc_name)) {
14054 (*i2).rproc=(*i).rproc;
14055 break;
14056 }
14057 }
14058
14059 string disp=lang_get_string(1,(*i).lang,427)+eol;
14060 int ec=0;
14061 dcc_send_msg((*i).socket,disp,ec);
14062 }
14063
14064 (*i).proc_name="";
14065 (*i).rproc.clear();
14066 (*i).edit_rproc=0;
14067 return;
14068 }
14069 (*i).edit_rproc=0;
14070 return;
14071 }
14072 }
14073
14074
14075 if((*i).edit_rproc==200) {
14076 string p=dcc_get_line((*i).in_buff);
14077 if(!p.compare(""))
14078 return;
14079
14080 bool got=false;
14081 vector<s_user>::iterator i1;
14082 for(i1=r_users.begin(); i1!=r_users.end(); i1++) {
14083 if(!(*i1).name.compare(p)) {
14084 got=true;
14085 break;
14086 }
14087 }
14088
14089 if(!got) {
14090 string disp=lang_get_string(1,(*i).lang,428)+eol;
14091
14092 vector<s_user>::iterator i1;
14093 for(i1=r_users.begin(); i1!=r_users.end(); i1++)
14094 disp+=(*i1).name+eol;
14095
14096 disp+=lang_get_string(1,(*i).lang,429)+eol;
14097
14098 int ec=0;
14099 dcc_send_msg((*i).socket,disp,ec);
14100 return;
14101 }
14102
14103 s_rproc r;
14104 r.remote_bot=p;
14105 (*i).rproc.push_back(r);
14106
14107 (*i).edit_rproc=2;
14108 return;
14109 }
14110 }
14111
14112
14113
14114
14115
14116
14117
14118
14119
14120 void dcc_loop_edit_proc(vector<s_dcc_client>::iterator i, string& eol)
14121 {
14122 if((*i).edit_proc==1) {
14123 (*i).edit_proc_addbefore_line=-1;
14124 (*i).edit_proc_addafter_line=-1;
14125 (*i).proc_error="";
14126 (*i).proc_to_delete="";
14127 (*i).plus_proc=false;
14128
14129 string p=dcc_get_line((*i).in_buff);
14130 if(!p.compare(""))
14131 return;
14132 vector<string>::iterator i1;
14133 bool got=false;
14134 for(i1=(*i).access_to_procs.begin(); i1!=(*i).access_to_procs.end(); i1++)
14135 if(!(*i1).compare(p))
14136 got=true;
14137 if(!got) {
14138 string disp=lang_get_string(1,(*i).lang,137)+eol;
14139 int ec=0;
14140 dcc_send_msg((*i).socket,disp,ec);
14141 return;
14142 }
14143 (*i).proc_name=p;
14144 logic_list_proc((*i).proc_name,(*i).proc_commands,(*i).proc_decl,(*i).proc_groups);
14145 vector<string>::iterator i3;
14146 map<string,string> vars;
14147 for(i3=(*i).proc_groups.begin(); i3!=(*i).proc_groups.end(); i3++)
14148 *i3=logic_eval(*i3,vars);
14149 list<string>::iterator i2=(*i).proc_commands.end();
14150 i2--;
14151 if(i2!=(*i).proc_commands.begin())
14152 (*i).proc_commands.erase(i2);
14153 (*i).edit_proc++;
14154 }
14155 if((*i).edit_proc==2) {
14156 string disp=lang_get_string(1,(*i).lang,138)+eol;
14157 disp=lang_subst(disp,(*i).proc_name);
14158 int ec=0;
14159 dcc_send_msg((*i).socket,disp,ec);
14160 disp="";
14161 int i2=1;
14162 list<string>::iterator i1;
14163 for(i1=(*i).proc_commands.begin(); i1!=(*i).proc_commands.end(); i1++, i2++) {
14164 char tmp[64];
14165 ltoa(i2,tmp,10);
14166 disp+=lang_get_string(1,(*i).lang,593);
14167 if(i2<10)
14168 disp+="0";
14169 if(i2<100)
14170 disp+="0";
14171 disp+=(string)tmp+": "+*i1+eol;
14172 }
14173 dcc_send_msg((*i).socket,disp,ec);
14174 disp=lang_get_string(1,(*i).lang,139)+eol;
14175 dcc_send_msg((*i).socket,disp,ec);
14176 if((*i).proc_error.compare("")) {
14177 disp=(*i).proc_error;
14178 (*i).proc_error="";
14179 dcc_send_msg((*i).socket,disp,ec);
14180 }
14181 (*i).edit_proc++;
14182 }
14183 if((*i).edit_proc==3) {
14184 string p=dcc_get_line((*i).in_buff);
14185 if(!p.compare(""))
14186 return;
14187 bool got=false;
14188 if(!p.compare(".")) {
14189 got=true;
14190 (*i).edit_proc=6;
14191 return;
14192 }
14193
14194 string p1, p2;
14195 int pos=0;
14196 for(unsigned int i1=0; i1<p.length(); i1++) {
14197 if(p[i1]==0x20) {
14198 pos=1;
14199 continue;
14200 }
14201 if(pos==0)
14202 p1+=p[i1];
14203 if(pos==1)
14204 p2+=p[i1];
14205 }
14206
14207 if(!p1.compare(".addbefore")) {
14208 got=true;
14209 int line=atol(p2.c_str());
14210 (*i).edit_proc_addbefore_line=line;
14211
14212 string disp=lang_get_string(1,(*i).lang,140)+eol;
14213 char tmp[64];
14214 ltoa(line,tmp,10);
14215 disp=lang_subst(disp,tmp);
14216 int ec=0;
14217 dcc_send_msg((*i).socket,disp,ec);
14218
14219 (*i).edit_proc++;
14220 }
14221 if(!p1.compare(".addafter")) {
14222 got=true;
14223 int line=atol(p2.c_str());
14224 (*i).edit_proc_addafter_line=line;
14225
14226 string disp=lang_get_string(1,(*i).lang,141)+eol;
14227 char tmp[64];
14228 ltoa(line,tmp,10);
14229 disp=lang_subst(disp,tmp);
14230 int ec=0;
14231 dcc_send_msg((*i).socket,disp,ec);
14232
14233 (*i).edit_proc++;
14234 }
14235 if(!p1.compare(".remove")) {
14236 got=true;
14237 int line=atol(p2.c_str());
14238
14239 int i2=1;
14240 list<string>::iterator i1;
14241 for(i1=(*i).proc_commands.begin(); i1!=(*i).proc_commands.end(); i1++, i2++) {
14242 if(i2==line) {
14243 (*i).proc_commands.erase(i1);
14244 break;
14245 }
14246 }
14247 (*i).edit_proc=2;
14248 }
14249 if(!p1.compare(".replace")) {
14250 got=true;
14251 int line=atol(p2.c_str());
14252 (*i).edit_proc_replace_line=line;
14253
14254 string disp=lang_get_string(1,(*i).lang,141)+eol;
14255 char tmp[64];
14256 ltoa(line,tmp,10);
14257 disp=lang_subst(disp,tmp);
14258 int ec=0;
14259 dcc_send_msg((*i).socket,disp,ec);
14260
14261 (*i).edit_proc=5;
14262 }
14263 if(!p.compare(".groups")) {
14264 got=true;
14265
14266 (*i).edit_proc=7;
14267 }
14268 if(!got) {
14269 string disp=lang_get_string(1,(*i).lang,139)+eol;
14270 int ec=0;
14271 dcc_send_msg((*i).socket,disp,ec);
14272 }
14273 }
14274 if((*i).edit_proc==4) {
14275 string p=dcc_get_line((*i).in_buff);
14276 if(!p.compare(""))
14277 return;
14278 bool before=(*i).edit_proc_addbefore_line!=-1;
14279 int line;
14280 if(before)
14281 line=(*i).edit_proc_addbefore_line;
14282 else
14283 line=(*i).edit_proc_addafter_line;
14284 int i2=1;
14285 list<string>::iterator i1;
14286 bool got=false;
14287 for(i1=(*i).proc_commands.begin(); i1!=(*i).proc_commands.end(); i1++, i2++) {
14288 if(before && i2==line) {
14289 (*i).proc_commands.insert(i1,p);
14290 got=true;
14291 break;
14292 }
14293 if(!before && i2==line+1) {
14294 (*i).proc_commands.insert(i1,p);
14295 got=true;
14296 break;
14297 }
14298 }
14299 if(!got)
14300 (*i).proc_commands.push_back(p);
14301 (*i).edit_proc=2;
14302 }
14303 if((*i).edit_proc==5) {
14304 string p=dcc_get_line((*i).in_buff);
14305 if(!p.compare(""))
14306 return;
14307 int line=(*i).edit_proc_replace_line;
14308 int i2=1;
14309 list<string>::iterator i1;
14310 for(i1=(*i).proc_commands.begin(); i1!=(*i).proc_commands.end(); i1++, i2++) {
14311 if(i2==line) {
14312 *i1=p;
14313 break;
14314 }
14315 }
14316 (*i).edit_proc=2;
14317 }
14318 if((*i).edit_proc==6) {
14319 string disp=lang_get_string(1,(*i).lang,142)+eol;
14320 disp=lang_subst(disp,(*i).proc_name);
14321 int ec=0;
14322 dcc_send_msg((*i).socket,disp,ec);
14323
14324 int error_line;
14325 const char* error_reason=NULL;
14326 logic_parse_proc(error_reason,error_line,(*i).proc_commands,false,(*i).proc_decl,(*i).proc_groups);
14327
14328 if(error_line!=0) {
14329 disp=lang_get_string(1,(*i).lang,143)+eol;
14330 char tmp[64];
14331 ltoa(error_line,tmp,10);
14332 disp=lang_subst(disp,tmp);
14333 if(error_reason!=NULL) {
14334 string d=lang_get_string(1,(*i).lang,144)+eol;
14335 disp+=lang_subst(d,error_reason);
14336 }
14337 (*i).proc_error=disp;
14338 (*i).edit_proc=2;
14339 } else {
14340 {
14341
14342 if(!(*i).proc_to_delete.empty()) {
14343 vector<s_procedure>::iterator i1;
14344 for(i1=r_procedures.begin(); i1!=r_procedures.end(); i1++)
14345 if(!(*i1).name.compare((*i).proc_to_delete)) {
14346 r_procedures.erase(i1);
14347 break;
14348 }
14349 }
14350 }
14351
14352
14353
14354 time_t now;
14355 time(&now);
14356 char tmp[128];
14357 ltoa((long)now,tmp,10);
14358 (*i).proc_commands.push_front((string)"last_changed "+tmp);
14359 {
14360 vector<string>::iterator i1;
14361 for(i1=(*i).proc_groups.begin(); i1!=(*i).proc_groups.end(); i1++)
14362 (*i1)=(string)"\""+(*i1)+"\"";
14363 }
14364 logic_parse_proc(error_reason,error_line,(*i).proc_commands,true,(*i).proc_decl,(*i).proc_groups);
14365 disp=lang_get_string(1,(*i).lang,73)+eol;
14366 dcc_send_msg((*i).socket,disp,ec);
14367 (*i).edit_proc=0;
14368 }
14369 }
14370
14371 if((*i).edit_proc==7) {
14372 string disp=lang_get_string(1,(*i).lang,119)+eol;
14373 int ec=0;
14374 dcc_send_msg((*i).socket,disp,ec);
14375 disp="";
14376 int i2=1;
14377 vector<string>::iterator i1;
14378 for(i1=(*i).proc_groups.begin(); i1!=(*i).proc_groups.end(); i1++, i2++) {
14379 char tmp[64];
14380 ltoa(i2,tmp,10);
14381 disp+=lang_get_string(1,(*i).lang,593);
14382 if(i2<10)
14383 disp+="0";
14384 if(i2<100)
14385 disp+="0";
14386 bool access=false;
14387 vector<string>::iterator i3;
14388 for(i3=(*i).access_grant_groups.begin(); i3!=(*i).access_grant_groups.end(); i3++) {
14389 if(!(*i3).compare(*i1) || !(*i3).compare("*")) {
14390 access=true;
14391 break;
14392 }
14393 }
14394 char tmp2[128];
14395 if(access)
14396 strcpy(tmp2,lang_get_string(1,(*i).lang,120).c_str());
14397 else
14398 strcpy(tmp2,lang_get_string(1,(*i).lang,121).c_str());
14399 disp+=(string)tmp+": "+*i1+" = "+tmp2+eol;
14400 }
14401 dcc_send_msg((*i).socket,disp,ec);
14402 disp=lang_get_string(1,(*i).lang,122)+eol;
14403 dcc_send_msg((*i).socket,disp,ec);
14404 (*i).edit_proc++;
14405 }
14406 if((*i).edit_proc==8) {
14407 string p=dcc_get_line((*i).in_buff);
14408 if(!p.compare(""))
14409 return;
14410 bool got=false;
14411 if(!p.compare(".")) {
14412 got=true;
14413 (*i).edit_proc=2;
14414 return;
14415 }
14416 if(!p.compare(".add")) {
14417 got=true;
14418 string disp=lang_get_string(1,(*i).lang,124)+eol;
14419 int ec=0;
14420 dcc_send_msg((*i).socket,disp,ec);
14421
14422 disp="";
14423 vector<string>::iterator i3;
14424 for(i3=(*i).access_grant_groups.begin(); i3!=(*i).access_grant_groups.end(); i3++)
14425 disp+=*i3+eol;
14426 if((*i).access_grant_groups.begin()==(*i).access_grant_groups.end()) {
14427 disp=lang_get_string(1,(*i).lang,124)+eol;
14428 dcc_send_msg((*i).socket,disp,ec);
14429 (*i).edit_proc=2;
14430 } else {
14431 dcc_send_msg((*i).socket,disp,ec);
14432 disp=lang_get_string(1,(*i).lang,125)+eol;
14433 dcc_send_msg((*i).socket,disp,ec);
14434 (*i).edit_proc=9;
14435 }
14436 }
14437 string p1, p2;
14438 int pos=0;
14439 for(unsigned int i1=0; i1<p.length(); i1++) {
14440 if(p[i1]==0x20) {
14441 pos=1;
14442 continue;
14443 }
14444 if(pos==0)
14445 p1+=p[i1];
14446 if(pos==1)
14447 p2+=p[i1];
14448 }
14449 if(!p1.compare(".remove")) {
14450 got=true;
14451 int line=atol(p2.c_str());
14452
14453 int i2=1;
14454 vector<string>::iterator i1;
14455 bool access=false;
14456 for(i1=(*i).proc_groups.begin(); i1!=(*i).proc_groups.end(); i1++, i2++) {
14457 vector<string>::iterator i3;
14458 for(i3=(*i).access_grant_groups.begin(); i3!=(*i).access_grant_groups.end(); i3++) {
14459 if((!(*i3).compare(*i1) || !(*i3).compare("*")) && i2==line) {
14460 access=true;
14461 (*i).proc_groups.erase(i1);
14462 break;
14463 }
14464 }
14465 if(access)
14466 break;
14467 }
14468 if(!access) {
14469 string disp=lang_get_string(1,(*i).lang,123)+eol;
14470 int ec=0;
14471 dcc_send_msg((*i).socket,disp,ec);
14472 }
14473 (*i).edit_proc=2;
14474 }
14475 if(!got) {
14476 string disp=lang_get_string(1,(*i).lang,122)+eol;
14477 int ec=0;
14478 dcc_send_msg((*i).socket,disp,ec);
14479 }
14480 }
14481 if((*i).edit_proc==9) {
14482 string p=dcc_get_line((*i).in_buff);
14483 if(!p.compare(""))
14484 return;
14485 vector<string>::iterator i3;
14486 bool access=false;
14487 for(i3=(*i).access_grant_groups.begin(); i3!=(*i).access_grant_groups.end(); i3++)
14488 if(!(*i3).compare(p) || !(*i3).compare("*")) {
14489 access=true;
14490 break;
14491 }
14492 if(p.compare("*"))
14493 p=(string)"\""+p+"\"";
14494 if(!access) {
14495 string disp=lang_get_string(1,(*i).lang,123)+eol;
14496 int ec=0;
14497 dcc_send_msg((*i).socket,disp,ec);
14498 } else {
14499 (*i).proc_groups.push_back(p);
14500 }
14501 (*i).edit_proc=2;
14502 }
14503
14504
14505 if((*i).edit_proc==1000) {
14506 (*i).edit_proc_addbefore_line=-1;
14507 (*i).edit_proc_addafter_line=-1;
14508 (*i).proc_error="";
14509 (*i).proc_to_delete="";
14510 (*i).proc_name="";
14511 (*i).proc_decl="";
14512 (*i).plus_proc=true;
14513 string disp=lang_get_string(1,(*i).lang,373)+eol;
14514 int ec=0;
14515 dcc_send_msg((*i).socket,disp,ec);
14516 (*i).edit_proc++;
14517 return;
14518 }
14519 if((*i).edit_proc==1001) {
14520 string p=dcc_get_line((*i).in_buff);
14521 if(!p.compare(""))
14522 return;
14523
14524 (*i).proc_name=p;
14525 (*i).proc_decl=p;
14526
14527 string wo_decl=p;
14528 if(wo_decl.find("(",0)!=string::npos)
14529 wo_decl.erase(wo_decl.find("(",0),wo_decl.length()-wo_decl.find("(",0));
14530 else {
14531 string disp=lang_get_string(1,(*i).lang,374)+eol;
14532 int ec=0;
14533 dcc_send_msg((*i).socket,disp,ec);
14534 (*i).edit_proc=1000;
14535 return;
14536 }
14537
14538 vector<s_procedure>::iterator i1;
14539 bool got=false;
14540 for(i1=r_procedures.begin(); i1!=r_procedures.end(); i1++) {
14541 string pn=(*i1).name;
14542 if(pn.find("(",0)!=string::npos)
14543 pn.erase(pn.find("(",0),pn.length()-pn.find("(",0));
14544 if(!pn.compare(wo_decl)) {
14545 got=true;
14546 break;
14547 }
14548 }
14549
14550 if(got) {
14551 bool access=false;
14552 vector<string>::iterator i3;
14553 for(i3=(*i).access_to_procs.begin(); i3!=(*i).access_to_procs.end(); i3++) {
14554 string pn=*i3;
14555 if(pn.find("(",0)!=string::npos)
14556 pn.erase(pn.find("(",0),pn.length()-pn.find("(",0));
14557
14558 if(!(*i3).compare(wo_decl) || !(*i3).compare("*")) {
14559 access=true;
14560 break;
14561 }
14562 }
14563 if(!access) {
14564 string disp=lang_get_string(1,(*i).lang,123)+eol;
14565 int ec=0;
14566 dcc_send_msg((*i).socket,disp,ec);
14567 (*i).edit_proc=0;
14568 return;
14569 } else {
14570 (*i).proc_to_delete=(*i1).name;
14571 string disp=lang_subst(lang_get_string(1,(*i).lang,375),(*i).proc_to_delete)+eol;
14572 int ec=0;
14573 dcc_send_msg((*i).socket,disp,ec);
14574 (*i).edit_proc=1500;
14575 return;
14576 }
14577 } else
14578 (*i).edit_proc++;
14579 return;
14580 }
14581
14582 if((*i).edit_proc==1002) {
14583 string disp=lang_get_string(1,(*i).lang,376)+eol;
14584 int ec=0;
14585 dcc_send_msg((*i).socket,disp,ec);
14586 (*i).edit_proc++;
14587
14588 (*i).proc_commands.clear();
14589 return;
14590 }
14591 if((*i).edit_proc==1003) {
14592 string p=dcc_get_line((*i).in_buff);
14593 if(!p.compare(""))
14594 return;
14595
14596 if(p.compare("."))
14597 (*i).proc_commands.push_back(p);
14598 else {
14599 (*i).edit_proc=2;
14600 return;
14601 }
14602 }
14603
14604 if((*i).edit_proc==1500) {
14605 string p=dcc_get_line((*i).in_buff);
14606 if(!p.compare(""))
14607 return;
14608
14609 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) {
14610 string disp=lang_subst(lang_get_string(1,(*i).lang,375),(*i).proc_name)+eol;
14611 int ec=0;
14612 dcc_send_msg((*i).socket,disp,ec);
14613 } else {
14614 if(!p.compare("n") || !p.compare("N")) {
14615 (*i).edit_proc=0;
14616 return;
14617 } else {
14618 (*i).edit_proc=1002;
14619 return;
14620 }
14621 }
14622 }
14623 }
14624
14625
14626
14627
14628
14629
14630
14631
14632
14633 void dcc_loop_edit_dynbans(vector<s_dcc_client>::iterator i, string& eol)
14634 {
14635 int ec=0;
14636
14637 map<string,string> vars;
14638 if((*i).dynbans==1) {
14639 s_channel_def chd;
14640 bool got=logic_partyline_get_channel_def((*i).dynbans_channel,chd);
14641 bool access=false;
14642 if(got) {
14643 vector<string>::iterator i1;
14644 for(i1=chd.dynbans_editors.begin(); i1!=chd.dynbans_editors.end(); i1++) {
14645 vector<s_user>::iterator i2;
14646 for(i2=r_users.begin(); i2!=r_users.end(); i2++) {
14647 if(!(*i2).name.compare((*i).as_in_logic)) {
14648 vector<s_group>::iterator i3;
14649 for(i3=(*i2).groups.begin(); i3!=(*i2).groups.end(); i3++) {
14650 if(!logic_eval(*i1,vars).compare(logic_eval((*i3).name,vars))) {
14651 access=true;
14652 break;
14653 }
14654 }
14655 }
14656 if(access)
14657 break;
14658 }
14659 if(access)
14660 break;
14661 }
14662 }
14663 if(!got || !access) {
14664 (*i).dynbans=0;
14665 string disp=lang_get_string(1,(*i).lang,581)+eol;
14666 int ec=0;
14667 dcc_send_msg((*i).socket,disp,ec);
14668 return;
14669 }
14670
14671 (*i).dynbans++;
14672 return;
14673 }
14674
14675 if((*i).dynbans==2) {
14676 s_channel_def chd;
14677 bool got=logic_partyline_get_channel_def((*i).dynbans_channel,chd);
14678 if(!got) {
14679
14680 (*i).dynbans=0;
14681 return;
14682 }
14683
14684 string disp=lang_get_string(1,(*i).lang,582)+eol;
14685 map<string,string>::iterator i1;
14686 for(i1=chd.dynamic_bans.begin(); i1!=chd.dynamic_bans.end(); i1++) {
14687 disp+=lang_get_string(1,(*i).lang,583);
14688 disp+=" ";
14689 disp+=(*i1).first;
14690 disp+=" ";
14691 disp+=lang_get_string(1,(*i).lang,584);
14692 disp+=(*i1).second;
14693 disp+=eol;
14694 }
14695 disp+=lang_get_string(1,(*i).lang,585);
14696 dcc_send_msg((*i).socket,disp,ec);
14697 (*i).dynbans++;
14698 return;
14699 }
14700
14701 if((*i).dynbans==3) {
14702 string p=dcc_get_line((*i).in_buff);
14703 if(!p.compare(""))
14704 return;
14705
14706 bool got=false;
14707
14708 vector<s_channel_def>::iterator iii;
14709 for(iii=r_channel_defs.begin(); iii!=r_channel_defs.end(); iii++) {
14710 if(!cmp_strings_case_insensitive((*iii).channel_name,(*i).dynbans_channel)) {
14711 got=true;
14712 break;
14713 }
14714 }
14715
14716 if(!got) {
14717
14718 (*i).dynbans=0;
14719 return;
14720 }
14721
14722 if(p.length()>=3 && p[0]=='.' && p[1]=='-' && p[2]==0x20) {
14723 string mask=p;
14724 if(mask.find(" ",0)!=string::npos)
14725 mask.erase(0,mask.find(" ",0)+1);
14726
14727 mask=(string)"\""+mask+"\"";
14728
14729 map<string,string>::iterator i1;
14730 erase_again:
14731 for(i1=(*iii).dynamic_bans.begin(); i1!=(*iii).dynamic_bans.end(); i1++) {
14732 if(!(*i1).first.compare(mask)) {
14733 (*iii).dynamic_bans.erase(i1);
14734 goto erase_again;
14735 }
14736 }
14737
14738 (*i).dynbans=2;
14739 return;
14740 }
14741
14742 if(p.length()>=3 && p[0]=='.' && p[1]=='+' && p[2]==0x20) {
14743 string mask=p;
14744 if(mask.find(" ",0)!=string::npos)
14745 mask.erase(0,mask.find(" ",0)+1);
14746
14747 if(mask.find(" ",0)==string::npos)
14748 mask+=" ";
14749
14750 string reason=mask;
14751 if(mask.find(" ",0)!=string::npos)
14752 mask.erase(mask.find(" ",0),mask.length()-mask.find(" ",0));
14753 if(reason.find(" ",0)!=string::npos)
14754 reason.erase(0,reason.find(" ",0)+1);
14755
14756 mask=(string)"\""+mask+"\"";
14757
14758 map<string,string>::iterator i1;
14759 erase_ban_again:
14760 for(i1=(*iii).dynamic_bans.begin(); i1!=(*iii).dynamic_bans.end(); i1++) {
14761 if(!(*i1).first.compare(mask)) {
14762 (*iii).dynamic_bans.erase(i1);
14763 goto erase_ban_again;
14764 }
14765 }
14766
14767 pair<string,string> p;
14768 p.first=mask;
14769 p.second=(string)"\""+reason+"\"";
14770 (*iii).dynamic_bans.insert(p);
14771
14772 (*i).dynbans=2;
14773 return;
14774 }
14775
14776 if(!p.compare(".")) {
14777 string disp=lang_get_string(1,(*i).lang,586)+eol;
14778 dcc_send_msg((*i).socket,disp,ec);
14779 (*i).dynbans=0;
14780 return;
14781 }
14782
14783 (*i).dynbans=2;
14784 return;
14785 }
14786 }
14787
14788
14789
14790
14791
14792
14793
14794
14795
14796 void dcc_loop_edit_chan(vector<s_dcc_client>::iterator i, string& eol)
14797 {
14798 if((*i).edit_chan==1) {
14799 string disp=lang_get_string(1,(*i).lang,232)+eol;
14800 int ec=0;
14801 dcc_send_msg((*i).socket,disp,ec);
14802 vector<string>::iterator i1;
14803 for(i1=(*i).access_to_chan_defs.begin(); i1!=(*i).access_to_chan_defs.end(); i1++) {
14804 if(!(*i1).compare("*"))
14805 continue;
14806 disp=*i1+eol;
14807 dcc_send_msg((*i).socket,disp,ec);
14808 }
14809 disp=lang_get_string(1,(*i).lang,233)+eol;
14810 dcc_send_msg((*i).socket,disp,ec);
14811 (*i).edit_chan++;
14812 }
14813 if((*i).edit_chan==2) {
14814 string p=dcc_get_line((*i).in_buff);
14815 if(!p.compare(""))
14816 return;
14817
14818 if(!p.compare(".")) {
14819 (*i).edit_chan=0;
14820 return;
14821 }
14822
14823 bool got=false;
14824 vector<string>::iterator i1;
14825 for(i1=(*i).access_to_chan_defs.begin(); i1!=(*i).access_to_chan_defs.end(); i1++) {
14826 if(!p.compare(*i1)) {
14827 got=logic_partyline_get_channel_def(*i1,(*i).user_channel_def);
14828 break;
14829 }
14830 }
14831
14832 if(!got) {
14833 string disp=lang_get_string(1,(*i).lang,234)+eol;
14834 int ec=0;
14835 dcc_send_msg((*i).socket,disp,ec);
14836 (*i).edit_chan=1;
14837 } else
14838 (*i).edit_chan=10;
14839 }
14840
14841
14842 if((*i).edit_chan==10) {
14843 string disp;
14844 int ec=0;
14845
14846 disp=lang_get_string(1,(*i).lang,223)+eol;
14847 dcc_send_msg((*i).socket,disp,ec);
14848
14849 vector<string>::iterator i3;
14850 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
14851 disp=*i3+eol;
14852 dcc_send_msg((*i).socket,disp,ec);
14853 }
14854
14855 disp=(string)"----------------"+eol;
14856 dcc_send_msg((*i).socket,disp,ec);
14857
14858 disp=lang_get_string(1,(*i).lang,224)+eol;
14859 dcc_send_msg((*i).socket,disp,ec);
14860
14861 disp=lang_get_string(1,(*i).lang,225)+eol;
14862 dcc_send_msg((*i).socket,disp,ec);
14863
14864 (*i).edit_chan++;
14865 }
14866 if((*i).edit_chan==11) {
14867 if(!dcc_can_unassign(i,eol,(*i).user_channel_def.on_mode)) {
14868 int ec=0;
14869 string disp=lang_get_string(1,(*i).lang,592)+eol;
14870 dcc_send_msg((*i).socket,disp,ec);
14871 (*i).edit_chan++;
14872 return;
14873 }
14874
14875 string p=dcc_get_line((*i).in_buff);
14876 if(!p.compare(""))
14877 return;
14878 vector<string>::iterator i1;
14879 bool got=false;
14880 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
14881 if(!(*i1).compare(p))
14882 got=true;
14883 if(!p.compare("..")) {
14884 got=true;
14885 string disp=lang_get_string(1,(*i).lang,132)+eol;
14886 int ec=0;
14887 dcc_send_msg((*i).socket,disp,ec);
14888 (*i).user_channel_def.on_mode="";
14889 (*i).edit_chan++;
14890 } else
14891 if(!p.compare(".")) {
14892 got=true;
14893 string disp=lang_get_string(1,(*i).lang,57)+eol;
14894 int ec=0;
14895 dcc_send_msg((*i).socket,disp,ec);
14896 (*i).edit_chan++;
14897 } else {
14898 string disp;
14899 if(got)
14900 disp=lang_get_string(1,(*i).lang,57)+eol;
14901 else
14902 disp=lang_get_string(1,(*i).lang,58)+eol;
14903 int ec=0;
14904 dcc_send_msg((*i).socket,disp,ec);
14905 if(got)
14906 (*i).user_channel_def.on_mode=p;
14907 else {
14908 (*i).edit_chan--;
14909 return;
14910 }
14911 (*i).edit_chan++;
14912 }
14913 }
14914
14915 if((*i).edit_chan==12) {
14916 string disp;
14917 int ec=0;
14918
14919 disp=lang_get_string(1,(*i).lang,240)+eol;
14920 dcc_send_msg((*i).socket,disp,ec);
14921
14922 vector<string>::iterator i3;
14923 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
14924 disp=*i3+eol;
14925 dcc_send_msg((*i).socket,disp,ec);
14926 }
14927
14928 disp=(string)"----------------"+eol;
14929 dcc_send_msg((*i).socket,disp,ec);
14930
14931 disp=lang_get_string(1,(*i).lang,241)+eol;
14932 dcc_send_msg((*i).socket,disp,ec);
14933
14934 disp=lang_get_string(1,(*i).lang,225)+eol;
14935 dcc_send_msg((*i).socket,disp,ec);
14936
14937 (*i).edit_chan++;
14938 }
14939 if((*i).edit_chan==13) {
14940 if(!dcc_can_unassign(i,eol,(*i).user_channel_def.on_key)) {
14941 int ec=0;
14942 string disp=lang_get_string(1,(*i).lang,592)+eol;
14943 dcc_send_msg((*i).socket,disp,ec);
14944 (*i).edit_chan++;
14945 return;
14946 }
14947
14948 string p=dcc_get_line((*i).in_buff);
14949 if(!p.compare(""))
14950 return;
14951 vector<string>::iterator i1;
14952 bool got=false;
14953 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
14954 if(!(*i1).compare(p))
14955 got=true;
14956 if(!p.compare("..")) {
14957 got=true;
14958 string disp=lang_get_string(1,(*i).lang,132)+eol;
14959 int ec=0;
14960 dcc_send_msg((*i).socket,disp,ec);
14961 (*i).user_channel_def.on_key="";
14962 (*i).edit_chan++;
14963 } else
14964 if(!p.compare(".")) {
14965 got=true;
14966 string disp=lang_get_string(1,(*i).lang,57)+eol;
14967 int ec=0;
14968 dcc_send_msg((*i).socket,disp,ec);
14969 (*i).edit_chan++;
14970 } else {
14971 string disp;
14972 if(got)
14973 disp=lang_get_string(1,(*i).lang,57)+eol;
14974 else
14975 disp=lang_get_string(1,(*i).lang,58)+eol;
14976 int ec=0;
14977 dcc_send_msg((*i).socket,disp,ec);
14978 if(got)
14979 (*i).user_channel_def.on_key=p;
14980 else {
14981 (*i).edit_chan--;
14982 return;
14983 }
14984 (*i).edit_chan++;
14985 }
14986 }
14987
14988 if((*i).edit_chan==14) {
14989 string disp;
14990 int ec=0;
14991
14992 disp=lang_get_string(1,(*i).lang,242)+eol;
14993 dcc_send_msg((*i).socket,disp,ec);
14994
14995 vector<string>::iterator i3;
14996 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
14997 disp=*i3+eol;
14998 dcc_send_msg((*i).socket,disp,ec);
14999 }
15000
15001 disp=(string)"----------------"+eol;
15002 dcc_send_msg((*i).socket,disp,ec);
15003
15004 disp=lang_get_string(1,(*i).lang,243)+eol;
15005 dcc_send_msg((*i).socket,disp,ec);
15006
15007 disp=lang_get_string(1,(*i).lang,225)+eol;
15008 dcc_send_msg((*i).socket,disp,ec);
15009
15010 (*i).edit_chan++;
15011 }
15012 if((*i).edit_chan==15) {
15013 if(!dcc_can_unassign(i,eol,(*i).user_channel_def.on_limit)) {
15014 int ec=0;
15015 string disp=lang_get_string(1,(*i).lang,592)+eol;
15016 dcc_send_msg((*i).socket,disp,ec);
15017 (*i).edit_chan++;
15018 return;
15019 }
15020
15021 string p=dcc_get_line((*i).in_buff);
15022 if(!p.compare(""))
15023 return;
15024 vector<string>::iterator i1;
15025 bool got=false;
15026 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
15027 if(!(*i1).compare(p))
15028 got=true;
15029 if(!p.compare("..")) {
15030 got=true;
15031 string disp=lang_get_string(1,(*i).lang,132)+eol;
15032 int ec=0;
15033 dcc_send_msg((*i).socket,disp,ec);
15034 (*i).user_channel_def.on_limit="";
15035 (*i).edit_chan=200;
15036 } else
15037 if(!p.compare(".")) {
15038 got=true;
15039 string disp=lang_get_string(1,(*i).lang,57)+eol;
15040 int ec=0;
15041 dcc_send_msg((*i).socket,disp,ec);
15042 (*i).edit_chan++;
15043 } else {
15044 string disp;
15045 if(got)
15046 disp=lang_get_string(1,(*i).lang,57)+eol;
15047 else
15048 disp=lang_get_string(1,(*i).lang,58)+eol;
15049 int ec=0;
15050 dcc_send_msg((*i).socket,disp,ec);
15051 if(got)
15052 (*i).user_channel_def.on_limit=p;
15053 else {
15054 (*i).edit_chan--;
15055 return;
15056 }
15057 (*i).edit_chan++;
15058 }
15059 }
15060
15061 if((*i).edit_chan==16) {
15062 string disp;
15063 int ec=0;
15064
15065 disp=lang_get_string(1,(*i).lang,244)+eol;
15066 dcc_send_msg((*i).socket,disp,ec);
15067
15068 vector<string>::iterator i3;
15069 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
15070 disp=*i3+eol;
15071 dcc_send_msg((*i).socket,disp,ec);
15072 }
15073
15074 disp=(string)"----------------"+eol;
15075 dcc_send_msg((*i).socket,disp,ec);
15076
15077 disp=lang_get_string(1,(*i).lang,245)+eol;
15078 dcc_send_msg((*i).socket,disp,ec);
15079
15080 disp=lang_get_string(1,(*i).lang,225)+eol;
15081 dcc_send_msg((*i).socket,disp,ec);
15082
15083 (*i).edit_chan++;
15084 }
15085 if((*i).edit_chan==17) {
15086 if(!dcc_can_unassign(i,eol,(*i).user_channel_def.on_topic)) {
15087 int ec=0;
15088 string disp=lang_get_string(1,(*i).lang,592)+eol;
15089 dcc_send_msg((*i).socket,disp,ec);
15090 (*i).edit_chan=500;
15091 return;
15092 }
15093
15094 string p=dcc_get_line((*i).in_buff);
15095 if(!p.compare(""))
15096 return;
15097 vector<string>::iterator i1;
15098 bool got=false;
15099 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
15100 if(!(*i1).compare(p))
15101 got=true;
15102 if(!p.compare("..")) {
15103 got=true;
15104 string disp=lang_get_string(1,(*i).lang,132)+eol;
15105 int ec=0;
15106 dcc_send_msg((*i).socket,disp,ec);
15107 (*i).user_channel_def.on_topic="";
15108 (*i).edit_chan=500;
15109 } else
15110 if(!p.compare(".")) {
15111 got=true;
15112 string disp=lang_get_string(1,(*i).lang,57)+eol;
15113 int ec=0;
15114 dcc_send_msg((*i).socket,disp,ec);
15115 (*i).edit_chan=500;
15116 } else {
15117 string disp;
15118 if(got)
15119 disp=lang_get_string(1,(*i).lang,57)+eol;
15120 else
15121 disp=lang_get_string(1,(*i).lang,58)+eol;
15122 int ec=0;
15123 dcc_send_msg((*i).socket,disp,ec);
15124 if(got)
15125 (*i).user_channel_def.on_topic=p;
15126 else {
15127 (*i).edit_chan--;
15128 return;
15129 }
15130 (*i).edit_chan=500;
15131 }
15132 }
15133
15134
15135 if((*i).edit_chan==20) {
15136 string disp=lang_get_string(1,(*i).lang,226)+eol;
15137 int ec=0;
15138 dcc_send_msg((*i).socket,disp,ec);
15139 disp="";
15140 int i2=1;
15141 vector<s_dynamic_rule>::iterator i1;
15142 for(i1=(*i).user_channel_def.allow_dynamic.begin(); i1!=(*i).user_channel_def.allow_dynamic.end(); i1++, i2++) {
15143 char tmp[64];
15144 ltoa(i2,tmp,10);
15145 disp+=lang_get_string(1,(*i).lang,593);
15146 if(i2<10)
15147 disp+="0";
15148 if(i2<100)
15149 disp+="0";
15150 disp+=(string)tmp+": "+(*i1).group+";"+(*i1).plus_modes+";"+(*i1).minus_modes+eol;
15151 }
15152 dcc_send_msg((*i).socket,disp,ec);
15153 disp=lang_get_string(1,(*i).lang,227)+eol;
15154 dcc_send_msg((*i).socket,disp,ec);
15155 (*i).edit_chan++;
15156 }
15157 if((*i).edit_chan==21) {
15158 string p=dcc_get_line((*i).in_buff);
15159 if(!p.compare(""))
15160 return;
15161 bool got=false;
15162 if(!p.compare(".")) {
15163 got=true;
15164 (*i).edit_chan=600;
15165 return;
15166 }
15167 if(!p.compare(".add")) {
15168 got=true;
15169 string disp=lang_get_string(1,(*i).lang,211)+eol;
15170 int ec=0;
15171 dcc_send_msg((*i).socket,disp,ec);
15172
15173 vector<string>::iterator i1;
15174 for(i1=(*i).access_grant_groups.begin(); i1!=(*i).access_grant_groups.end(); i1++) {
15175 disp=(*i1)+eol;
15176 dcc_send_msg((*i).socket,disp,ec);
15177 }
15178
15179 (*i).user_channel_allow_dynamic.group="";
15180 (*i).user_channel_allow_dynamic.plus_modes="";
15181 (*i).user_channel_allow_dynamic.minus_modes="";
15182
15183 (*i).edit_chan=22;
15184 }
15185 string p1, p2;
15186 int pos=0;
15187 for(unsigned int i1=0; i1<p.length(); i1++) {
15188 if(p[i1]==0x20) {
15189 pos=1;
15190 continue;
15191 }
15192 if(pos==0)
15193 p1+=p[i1];
15194 if(pos==1)
15195 p2+=p[i1];
15196 }
15197 if(!p1.compare(".remove")) {
15198 got=true;
15199 int line=atol(p2.c_str());
15200
15201 int i2=1;
15202 vector<s_dynamic_rule>::iterator i1;
15203 for(i1=(*i).user_channel.allow_dynamic.begin(); i1!=(*i).user_channel.allow_dynamic.end(); i1++, i2++)
15204 if(i2==line) {
15205 bool access=false;
15206 map<string,string> vars;
15207 vector<string>::iterator i3;
15208 for(i3=(*i).access_grant_groups.begin(); i3!=(*i).access_grant_groups.end(); i3++)
15209 if(!(*i3).compare(logic_eval((*i1).group,vars))) {
15210 access=true;
15211 break;
15212 }
15213 if(access)
15214 (*i).user_channel.allow_dynamic.erase(i1);
15215 else {
15216 string disp=lang_get_string(1,(*i).lang,121)+eol;
15217 int ec=0;
15218 dcc_send_msg((*i).socket,disp,ec);
15219 }
15220 break;
15221 }
15222 (*i).edit_chan=20;
15223 }
15224 if(!got) {
15225 string disp=lang_get_string(1,(*i).lang,227)+eol;
15226 int ec=0;
15227 dcc_send_msg((*i).socket,disp,ec);
15228
15229 (*i).edit_chan=20;
15230 }
15231 }
15232 if((*i).edit_chan==22) {
15233 string p=dcc_get_line((*i).in_buff);
15234 if(!p.compare(""))
15235 return;
15236
15237 vector<string>::iterator i1;
15238 bool got=false;
15239 for(i1=(*i).access_grant_groups.begin(); i1!=(*i).access_grant_groups.end(); i1++)
15240 if(!(*i1).compare(p))
15241 got=true;
15242 string disp;
15243 if(got)
15244 disp=lang_get_string(1,(*i).lang,228)+eol;
15245 else
15246 disp=lang_get_string(1,(*i).lang,214)+eol;
15247 int ec=0;
15248 dcc_send_msg((*i).socket,disp,ec);
15249 p=(string)"\""+p+"\"";
15250 if(got)
15251 (*i).user_channel_allow_dynamic.group=p;
15252
15253 (*i).edit_chan++;
15254 }
15255 if((*i).edit_chan==23) {
15256 string p=dcc_get_line((*i).in_buff);
15257 if(!p.compare(""))
15258 return;
15259 if(!p.compare("."))
15260 p="";
15261 p=(string)"\""+p+"\"";
15262 (*i).user_channel_allow_dynamic.plus_modes=p;
15263
15264 string disp;
15265 int ec=0;
15266
15267 disp=lang_get_string(1,(*i).lang,238)+eol;
15268 dcc_send_msg((*i).socket,disp,ec);
15269 (*i).edit_chan++;
15270 }
15271 if((*i).edit_chan==24) {
15272 string p=dcc_get_line((*i).in_buff);
15273 if(!p.compare(""))
15274 return;
15275 if(!p.compare("."))
15276 p="";
15277 p=(string)"\""+p+"\"";
15278 (*i).user_channel_allow_dynamic.minus_modes=p;
15279
15280 (*i).user_channel_def.allow_dynamic.push_back((*i).user_channel_allow_dynamic);
15281
15282 (*i).edit_chan=20;
15283 }
15284
15285 if((*i).edit_chan==50) {
15286 string disp=lang_get_string(1,(*i).lang,229)+eol;
15287 int ec=0;
15288 dcc_send_msg((*i).socket,disp,ec);
15289
15290 (*i).edit_chan++;
15291 }
15292 if((*i).edit_chan==51) {
15293 string p=dcc_get_line((*i).in_buff);
15294 if(!p.compare(""))
15295 return;
15296
15297 if(p.compare("y") && p.compare("n") && p.compare("Y") && p.compare("N")) {
15298 string disp=lang_get_string(1,(*i).lang,229)+eol;
15299 int ec=0;
15300 dcc_send_msg((*i).socket,disp,ec);
15301 } else {
15302 if(!p.compare("n") || !p.compare("N")) {
15303 (*i).edit_chan=0;
15304 string disp=lang_get_string(1,(*i).lang,230)+eol;
15305 int ec=0;
15306 dcc_send_msg((*i).socket,disp,ec);
15307 } else {
15308 logic_partyline_remove_channel_def((*i).user_channel_def.channel_name);
15309 vector<s_group>::iterator i1;
15310 for(i1=(*i).user_channel_def.groups.begin(); i1!=(*i).user_channel_def.groups.end(); i1++)
15311 if((*i1).name.length()>0 && (*i1).name[0]!='\"')
15312 (*i1).name=(string)"\""+(*i1).name+"\"";
15313 (*i).user_channel_def.last_changed=time(NULL);
15314 logic_partyline_add_channel_def((*i).user_channel_def);
15315
15316 string disp=lang_get_string(1,(*i).lang,231)+eol;
15317 int ec=0;
15318 dcc_send_msg((*i).socket,disp,ec);
15319 }
15320 (*i).edit_chan=0;
15321 }
15322 }
15323
15324 if((*i).edit_chan==100) {
15325 string disp=lang_get_string(1,(*i).lang,236)+eol;
15326 int ec=0;
15327 dcc_send_msg((*i).socket,disp,ec);
15328 (*i).edit_chan++;
15329 }
15330 if((*i).edit_chan==101) {
15331 string p=dcc_get_line((*i).in_buff);
15332 if(!p.compare(""))
15333 return;
15334
15335 if(!p.compare(".")) {
15336 (*i).edit_chan=0;
15337 return;
15338 }
15339
15340 bool got=logic_partyline_get_channel_def(p,(*i).user_channel_def);
15341
15342 if(got) {
15343 string disp=lang_get_string(1,(*i).lang,237)+eol;
15344 int ec=0;
15345 dcc_send_msg((*i).socket,disp,ec);
15346 (*i).edit_chan=0;
15347 } else {
15348 (*i).user_channel_def.channel_name=p;
15349 (*i).user_channel_def.on_mode="";
15350 (*i).user_channel_def.on_key="";
15351 (*i).user_channel_def.on_limit="";
15352 (*i).user_channel_def.allow_dynamic.clear();
15353 (*i).user_channel_def.dynamic_plus_modes="";
15354 (*i).user_channel_def.dynamic_minus_modes="";
15355 (*i).user_channel_def.groups.clear();
15356
15357 (*i).edit_chan=10;
15358 return;
15359 }
15360 }
15361
15362 if((*i).edit_chan==200) {
15363 string disp=lang_get_string(1,(*i).lang,239)+eol;
15364 int ec=0;
15365 dcc_send_msg((*i).socket,disp,ec);
15366 disp="";
15367 int i2=1;
15368 vector<s_group>::iterator i1;
15369 for(i1=(*i).user_channel_def.groups.begin(); i1!=(*i).user_channel_def.groups.end(); i1++, i2++) {
15370 char tmp[64];
15371 ltoa(i2,tmp,10);
15372 disp+=lang_get_string(1,(*i).lang,593);
15373 if(i2<10)
15374 disp+="0";
15375 if(i2<100)
15376 disp+="0";
15377 bool access=false;
15378 vector<string>::iterator i3;
15379 map<string,string> vars;
15380 for(i3=(*i).access_grant_groups.begin(); i3!=(*i).access_grant_groups.end(); i3++) {
15381 if(!(*i3).compare(logic_eval((*i1).name,vars)) || !(*i3).compare("*")) {
15382 access=true;
15383 break;
15384 }
15385 }
15386 char tmp2[128];
15387 if(access)
15388 strcpy(tmp2,lang_get_string(1,(*i).lang,120).c_str());
15389 else
15390 strcpy(tmp2,lang_get_string(1,(*i).lang,121).c_str());
15391 disp+=(string)tmp+": "+(*i1).name+" = "+tmp2+eol;
15392 }
15393 dcc_send_msg((*i).socket,disp,ec);
15394 disp=lang_get_string(1,(*i).lang,122)+eol;
15395 dcc_send_msg((*i).socket,disp,ec);
15396 (*i).edit_chan++;
15397 }
15398 if((*i).edit_chan==201) {
15399 string p=dcc_get_line((*i).in_buff);
15400 if(!p.compare(""))
15401 return;
15402 bool got=false;
15403 if(!p.compare(".")) {
15404 got=true;
15405 (*i).edit_chan=20;
15406 }
15407 if(!p.compare(".add")) {
15408 got=true;
15409 string disp=lang_get_string(1,(*i).lang,124)+eol;
15410 int ec=0;
15411 dcc_send_msg((*i).socket,disp,ec);
15412
15413 disp="";
15414 vector<string>::iterator i3;
15415 for(i3=(*i).access_grant_groups.begin(); i3!=(*i).access_grant_groups.end(); i3++)
15416 disp+=*i3+eol;
15417 if((*i).access_grant_groups.begin()==(*i).access_grant_groups.end()) {
15418 disp=lang_get_string(1,(*i).lang,124)+eol;
15419 dcc_send_msg((*i).socket,disp,ec);
15420 (*i).edit_chan=200;
15421 } else {
15422 dcc_send_msg((*i).socket,disp,ec);
15423 disp=lang_get_string(1,(*i).lang,125)+eol;
15424 dcc_send_msg((*i).socket,disp,ec);
15425 (*i).edit_chan=202;
15426 }
15427 }
15428 string p1, p2;
15429 int pos=0;
15430 for(unsigned int i1=0; i1<p.length(); i1++) {
15431 if(p[i1]==0x20) {
15432 pos=1;
15433 continue;
15434 }
15435 if(pos==0)
15436 p1+=p[i1];
15437 if(pos==1)
15438 p2+=p[i1];
15439 }
15440 if(!p1.compare(".remove")) {
15441 got=true;
15442 int line=atol(p2.c_str());
15443
15444 int i2=1;
15445 map<string,string> vars;
15446 vector<s_group>::iterator i1;
15447 bool access=false;
15448 for(i1=(*i).user_channel_def.groups.begin(); i1!=(*i).user_channel_def.groups.end(); i1++, i2++) {
15449 vector<string>::iterator i3;
15450 for(i3=(*i).access_grant_groups.begin(); i3!=(*i).access_grant_groups.end(); i3++) {
15451 if((!(*i3).compare(logic_eval((*i1).name,vars)) || !(*i3).compare("*")) && i2==line) {
15452 access=true;
15453 (*i).user_channel_def.groups.erase(i1);
15454 break;
15455 }
15456 }
15457 if(access)
15458 break;
15459 }
15460 if(!access) {
15461 string disp=lang_get_string(1,(*i).lang,123)+eol;
15462 int ec=0;
15463 dcc_send_msg((*i).socket,disp,ec);
15464 }
15465 (*i).edit_chan=200;
15466 }
15467 if(!got) {
15468 string disp=lang_get_string(1,(*i).lang,122)+eol;
15469 int ec=0;
15470 dcc_send_msg((*i).socket,disp,ec);
15471 }
15472 }
15473 if((*i).edit_chan==202) {
15474 string p=dcc_get_line((*i).in_buff);
15475 if(!p.compare(""))
15476 return;
15477 vector<string>::iterator i3;
15478 bool access=false;
15479 for(i3=(*i).access_grant_groups.begin(); i3!=(*i).access_grant_groups.end(); i3++)
15480 if(!(*i3).compare(p) || !(*i3).compare("*")) {
15481 access=true;
15482 break;
15483 }
15484 if(p.compare("*"))
15485 p=(string)"\""+p+"\"";
15486 if(!access) {
15487 string disp=lang_get_string(1,(*i).lang,123)+eol;
15488 int ec=0;
15489 dcc_send_msg((*i).socket,disp,ec);
15490 } else {
15491 s_group g;
15492 g.name=p;
15493 (*i).user_channel_def.groups.push_back(g);
15494 }
15495 (*i).edit_chan=200;
15496 return;
15497 }
15498
15499
15500 if((*i).edit_chan==500) {
15501 string disp;
15502 int ec=0;
15503
15504 disp=lang_get_string(1,(*i).lang,447)+eol;
15505 dcc_send_msg((*i).socket,disp,ec);
15506
15507 vector<string>::iterator i3;
15508 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
15509 disp=*i3+eol;
15510 dcc_send_msg((*i).socket,disp,ec);
15511 }
15512
15513 disp=(string)"----------------"+eol;
15514 dcc_send_msg((*i).socket,disp,ec);
15515
15516 disp=lang_get_string(1,(*i).lang,448)+eol;
15517 dcc_send_msg((*i).socket,disp,ec);
15518
15519 disp=lang_get_string(1,(*i).lang,225)+eol;
15520 dcc_send_msg((*i).socket,disp,ec);
15521
15522 (*i).edit_chan++;
15523 }
15524 if((*i).edit_chan==501) {
15525 if(!dcc_can_unassign(i,eol,(*i).user_channel_def.on_ircop)) {
15526 int ec=0;
15527 string disp=lang_get_string(1,(*i).lang,592)+eol;
15528 dcc_send_msg((*i).socket,disp,ec);
15529 (*i).edit_chan++;
15530 return;
15531 }
15532
15533 string p=dcc_get_line((*i).in_buff);
15534 if(!p.compare(""))
15535 return;
15536 vector<string>::iterator i1;
15537 bool got=false;
15538 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
15539 if(!(*i1).compare(p))
15540 got=true;
15541 if(!p.compare("..")) {
15542 got=true;
15543 string disp=lang_get_string(1,(*i).lang,132)+eol;
15544 int ec=0;
15545 dcc_send_msg((*i).socket,disp,ec);
15546 (*i).user_channel_def.on_ircop="";
15547 (*i).edit_chan++;
15548 } else
15549 if(!p.compare(".")) {
15550 got=true;
15551 string disp=lang_get_string(1,(*i).lang,57)+eol;
15552 int ec=0;
15553 dcc_send_msg((*i).socket,disp,ec);
15554 (*i).edit_chan++;
15555 } else {
15556 string disp;
15557 if(got)
15558 disp=lang_get_string(1,(*i).lang,57)+eol;
15559 else
15560 disp=lang_get_string(1,(*i).lang,58)+eol;
15561 int ec=0;
15562 dcc_send_msg((*i).socket,disp,ec);
15563 if(got)
15564 (*i).user_channel_def.on_ircop=p;
15565 else {
15566 (*i).edit_chan--;
15567 return;
15568 }
15569 (*i).edit_chan++;
15570 }
15571 }
15572
15573
15574 if((*i).edit_chan==502) {
15575 string disp;
15576 int ec=0;
15577
15578 disp=lang_get_string(1,(*i).lang,575)+eol;
15579 dcc_send_msg((*i).socket,disp,ec);
15580
15581 vector<string>::iterator i3;
15582 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
15583 disp=*i3+eol;
15584 dcc_send_msg((*i).socket,disp,ec);
15585 }
15586
15587 disp=(string)"----------------"+eol;
15588 dcc_send_msg((*i).socket,disp,ec);
15589
15590 disp=lang_get_string(1,(*i).lang,576)+eol;
15591 dcc_send_msg((*i).socket,disp,ec);
15592
15593 disp=lang_get_string(1,(*i).lang,225)+eol;
15594 dcc_send_msg((*i).socket,disp,ec);
15595
15596 (*i).edit_chan++;
15597 }
15598 if((*i).edit_chan==503) {
15599 if(!dcc_can_unassign(i,eol,(*i).user_channel_def.on_privmsg)) {
15600 int ec=0;
15601 string disp=lang_get_string(1,(*i).lang,592)+eol;
15602 dcc_send_msg((*i).socket,disp,ec);
15603 (*i).edit_chan++;
15604 return;
15605 }
15606
15607 string p=dcc_get_line((*i).in_buff);
15608 if(!p.compare(""))
15609 return;
15610 vector<string>::iterator i1;
15611 bool got=false;
15612 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
15613 if(!(*i1).compare(p))
15614 got=true;
15615 if(!p.compare("..")) {
15616 got=true;
15617 string disp=lang_get_string(1,(*i).lang,132)+eol;
15618 int ec=0;
15619 dcc_send_msg((*i).socket,disp,ec);
15620 (*i).user_channel_def.on_privmsg="";
15621 (*i).edit_chan++;
15622 } else
15623 if(!p.compare(".")) {
15624 got=true;
15625 string disp=lang_get_string(1,(*i).lang,57)+eol;
15626 int ec=0;
15627 dcc_send_msg((*i).socket,disp,ec);
15628 (*i).edit_chan++;
15629 } else {
15630 string disp;
15631 if(got)
15632 disp=lang_get_string(1,(*i).lang,57)+eol;
15633 else
15634 disp=lang_get_string(1,(*i).lang,58)+eol;
15635 int ec=0;
15636 dcc_send_msg((*i).socket,disp,ec);
15637 if(got)
15638 (*i).user_channel_def.on_privmsg=p;
15639 else {
15640 (*i).edit_chan--;
15641 return;
15642 }
15643 (*i).edit_chan++;
15644 }
15645 }
15646
15647
15648 if((*i).edit_chan==504) {
15649 string disp;
15650 int ec=0;
15651
15652 disp=lang_get_string(1,(*i).lang,603)+eol;
15653 dcc_send_msg((*i).socket,disp,ec);
15654
15655 vector<string>::iterator i3;
15656 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
15657 disp=*i3+eol;
15658 dcc_send_msg((*i).socket,disp,ec);
15659 }
15660
15661 disp=(string)"----------------"+eol;
15662 dcc_send_msg((*i).socket,disp,ec);
15663
15664 disp=lang_get_string(1,(*i).lang,604)+eol;
15665 dcc_send_msg((*i).socket,disp,ec);
15666
15667 disp=lang_get_string(1,(*i).lang,225)+eol;
15668 dcc_send_msg((*i).socket,disp,ec);
15669
15670 (*i).edit_chan++;
15671 }
15672 if((*i).edit_chan==505) {
15673 if(!dcc_can_unassign(i,eol,(*i).user_channel_def.on_notice)) {
15674 int ec=0;
15675 string disp=lang_get_string(1,(*i).lang,592)+eol;
15676 dcc_send_msg((*i).socket,disp,ec);
15677 (*i).edit_chan++;
15678 return;
15679 }
15680
15681 string p=dcc_get_line((*i).in_buff);
15682 if(!p.compare(""))
15683 return;
15684 vector<string>::iterator i1;
15685 bool got=false;
15686 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
15687 if(!(*i1).compare(p))
15688 got=true;
15689 if(!p.compare("..")) {
15690 got=true;
15691 string disp=lang_get_string(1,(*i).lang,132)+eol;
15692 int ec=0;
15693 dcc_send_msg((*i).socket,disp,ec);
15694 (*i).user_channel_def.on_notice="";
15695 (*i).edit_chan++;
15696 } else
15697 if(!p.compare(".")) {
15698 got=true;
15699 string disp=lang_get_string(1,(*i).lang,57)+eol;
15700 int ec=0;
15701 dcc_send_msg((*i).socket,disp,ec);
15702 (*i).edit_chan++;
15703 } else {
15704 string disp;
15705 if(got)
15706 disp=lang_get_string(1,(*i).lang,57)+eol;
15707 else
15708 disp=lang_get_string(1,(*i).lang,58)+eol;
15709 int ec=0;
15710 dcc_send_msg((*i).socket,disp,ec);
15711 if(got)
15712 (*i).user_channel_def.on_notice=p;
15713 else {
15714 (*i).edit_chan--;
15715 return;
15716 }
15717 (*i).edit_chan++;
15718 }
15719 }
15720
15721
15722 if((*i).edit_chan==506) {
15723 string disp;
15724 int ec=0;
15725
15726 disp=lang_get_string(1,(*i).lang,577)+eol;
15727 dcc_send_msg((*i).socket,disp,ec);
15728
15729 vector<string>::iterator i3;
15730 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
15731 disp=*i3+eol;
15732 dcc_send_msg((*i).socket,disp,ec);
15733 }
15734
15735 disp=(string)"----------------"+eol;
15736 dcc_send_msg((*i).socket,disp,ec);
15737
15738 disp=lang_get_string(1,(*i).lang,578)+eol;
15739 dcc_send_msg((*i).socket,disp,ec);
15740
15741 disp=lang_get_string(1,(*i).lang,225)+eol;
15742 dcc_send_msg((*i).socket,disp,ec);
15743
15744 (*i).edit_chan++;
15745 }
15746 if((*i).edit_chan==507) {
15747 if(!dcc_can_unassign(i,eol,(*i).user_channel_def.on_part)) {
15748 int ec=0;
15749 string disp=lang_get_string(1,(*i).lang,592)+eol;
15750 dcc_send_msg((*i).socket,disp,ec);
15751 (*i).edit_chan++;
15752 return;
15753 }
15754
15755 string p=dcc_get_line((*i).in_buff);
15756 if(!p.compare(""))
15757 return;
15758 vector<string>::iterator i1;
15759 bool got=false;
15760 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
15761 if(!(*i1).compare(p))
15762 got=true;
15763 if(!p.compare("..")) {
15764 got=true;
15765 string disp=lang_get_string(1,(*i).lang,132)+eol;
15766 int ec=0;
15767 dcc_send_msg((*i).socket,disp,ec);
15768 (*i).user_channel_def.on_part="";
15769 (*i).edit_chan++;
15770 } else
15771 if(!p.compare(".")) {
15772 got=true;
15773 string disp=lang_get_string(1,(*i).lang,57)+eol;
15774 int ec=0;
15775 dcc_send_msg((*i).socket,disp,ec);
15776 (*i).edit_chan++;
15777 } else {
15778 string disp;
15779 if(got)
15780 disp=lang_get_string(1,(*i).lang,57)+eol;
15781 else
15782 disp=lang_get_string(1,(*i).lang,58)+eol;
15783 int ec=0;
15784 dcc_send_msg((*i).socket,disp,ec);
15785 if(got)
15786 (*i).user_channel_def.on_part=p;
15787 else {
15788 (*i).edit_chan--;
15789 return;
15790 }
15791 (*i).edit_chan++;
15792 }
15793 }
15794
15795
15796 if((*i).edit_chan==508) {
15797 string disp;
15798 int ec=0;
15799
15800 disp=lang_get_string(1,(*i).lang,608)+eol;
15801 dcc_send_msg((*i).socket,disp,ec);
15802
15803 vector<string>::iterator i3;
15804 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
15805 disp=*i3+eol;
15806 dcc_send_msg((*i).socket,disp,ec);
15807 }
15808
15809 disp=(string)"----------------"+eol;
15810 dcc_send_msg((*i).socket,disp,ec);
15811
15812 disp=lang_get_string(1,(*i).lang,609)+eol;
15813 dcc_send_msg((*i).socket,disp,ec);
15814
15815 disp=lang_get_string(1,(*i).lang,225)+eol;
15816 dcc_send_msg((*i).socket,disp,ec);
15817
15818 (*i).edit_chan++;
15819 }
15820 if((*i).edit_chan==509) {
15821 if(!dcc_can_unassign(i,eol,(*i).user_channel_def.on_ctcp)) {
15822 int ec=0;
15823 string disp=lang_get_string(1,(*i).lang,592)+eol;
15824 dcc_send_msg((*i).socket,disp,ec);
15825 (*i).edit_chan++;
15826 return;
15827 }
15828
15829 string p=dcc_get_line((*i).in_buff);
15830 if(!p.compare(""))
15831 return;
15832 vector<string>::iterator i1;
15833 bool got=false;
15834 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
15835 if(!(*i1).compare(p))
15836 got=true;
15837 if(!p.compare("..")) {
15838 got=true;
15839 string disp=lang_get_string(1,(*i).lang,132)+eol;
15840 int ec=0;
15841 dcc_send_msg((*i).socket,disp,ec);
15842 (*i).user_channel_def.on_ctcp="";
15843 (*i).edit_chan++;
15844 } else
15845 if(!p.compare(".")) {
15846 got=true;
15847 string disp=lang_get_string(1,(*i).lang,57)+eol;
15848 int ec=0;
15849 dcc_send_msg((*i).socket,disp,ec);
15850 (*i).edit_chan++;
15851 } else {
15852 string disp;
15853 if(got)
15854 disp=lang_get_string(1,(*i).lang,57)+eol;
15855 else
15856 disp=lang_get_string(1,(*i).lang,58)+eol;
15857 int ec=0;
15858 dcc_send_msg((*i).socket,disp,ec);
15859 if(got)
15860 (*i).user_channel_def.on_ctcp=p;
15861 else {
15862 (*i).edit_chan--;
15863 return;
15864 }
15865 (*i).edit_chan++;
15866 }
15867 }
15868
15869
15870 if((*i).edit_chan==510) {
15871 string disp;
15872 int ec=0;
15873
15874 disp=lang_get_string(1,(*i).lang,675)+eol;
15875 dcc_send_msg((*i).socket,disp,ec);
15876
15877 vector<string>::iterator i3;
15878 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
15879 disp=*i3+eol;
15880 dcc_send_msg((*i).socket,disp,ec);
15881 }
15882
15883 disp=(string)"----------------"+eol;
15884 dcc_send_msg((*i).socket,disp,ec);
15885
15886 disp=lang_get_string(1,(*i).lang,676)+eol;
15887 dcc_send_msg((*i).socket,disp,ec);
15888
15889 disp=lang_get_string(1,(*i).lang,225)+eol;
15890 dcc_send_msg((*i).socket,disp,ec);
15891
15892 (*i).edit_chan++;
15893 }
15894 if((*i).edit_chan==511) {
15895 if(!dcc_can_unassign(i,eol,(*i).user_channel_def.on_dynamic_ban)) {
15896 int ec=0;
15897 string disp=lang_get_string(1,(*i).lang,592)+eol;
15898 dcc_send_msg((*i).socket,disp,ec);
15899 (*i).edit_chan++;
15900 return;
15901 }
15902
15903 string p=dcc_get_line((*i).in_buff);
15904 if(!p.compare(""))
15905 return;
15906 vector<string>::iterator i1;
15907 bool got=false;
15908 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
15909 if(!(*i1).compare(p))
15910 got=true;
15911 if(!p.compare("..")) {
15912 got=true;
15913 string disp=lang_get_string(1,(*i).lang,132)+eol;
15914 int ec=0;
15915 dcc_send_msg((*i).socket,disp,ec);
15916 (*i).user_channel_def.on_dynamic_ban="";
15917 (*i).edit_chan++;
15918 } else
15919 if(!p.compare(".")) {
15920 got=true;
15921 string disp=lang_get_string(1,(*i).lang,57)+eol;
15922 int ec=0;
15923 dcc_send_msg((*i).socket,disp,ec);
15924 (*i).edit_chan++;
15925 } else {
15926 string disp;
15927 if(got)
15928 disp=lang_get_string(1,(*i).lang,57)+eol;
15929 else
15930 disp=lang_get_string(1,(*i).lang,58)+eol;
15931 int ec=0;
15932 dcc_send_msg((*i).socket,disp,ec);
15933 if(got)
15934 (*i).user_channel_def.on_dynamic_ban=p;
15935 else {
15936 (*i).edit_chan--;
15937 return;
15938 }
15939 (*i).edit_chan++;
15940 }
15941 }
15942
15943
15944 if((*i).edit_chan==512) {
15945 string disp;
15946 int ec=0;
15947
15948 disp=lang_get_string(1,(*i).lang,677)+eol;
15949 dcc_send_msg((*i).socket,disp,ec);
15950
15951 vector<string>::iterator i3;
15952 for(i3=(*i).access_usage_proc.begin(); i3!=(*i).access_usage_proc.end(); i3++) {
15953 disp=*i3+eol;
15954 dcc_send_msg((*i).socket,disp,ec);
15955 }
15956
15957 disp=(string)"----------------"+eol;
15958 dcc_send_msg((*i).socket,disp,ec);
15959
15960 disp=lang_get_string(1,(*i).lang,678)+eol;
15961 dcc_send_msg((*i).socket,disp,ec);
15962
15963 disp=lang_get_string(1,(*i).lang,225)+eol;
15964 dcc_send_msg((*i).socket,disp,ec);
15965
15966 (*i).edit_chan++;
15967 }
15968 if((*i).edit_chan==513) {
15969 if(!dcc_can_unassign(i,eol,(*i).user_channel_def.on_server_msg)) {
15970 int ec=0;
15971 string disp=lang_get_string(1,(*i).lang,592)+eol;
15972 dcc_send_msg((*i).socket,disp,ec);
15973 (*i).edit_chan++;
15974 return;
15975 }
15976
15977 string p=dcc_get_line((*i).in_buff);
15978 if(!p.compare(""))
15979 return;
15980 vector<string>::iterator i1;
15981 bool got=false;
15982 for(i1=(*i).access_usage_proc.begin(); i1!=(*i).access_usage_proc.end(); i1++)
15983 if(!(*i1).compare(p))
15984 got=true;
15985 if(!p.compare("..")) {
15986 got=true;
15987 string disp=lang_get_string(1,(*i).lang,132)+eol;
15988 int ec=0;
15989 dcc_send_msg((*i).socket,disp,ec);
15990 (*i).user_channel_def.on_server_msg="";
15991 (*i).edit_chan++;
15992 } else
15993 if(!p.compare(".")) {
15994 got=true;
15995 string disp=lang_get_string(1,(*i).lang,57)+eol;
15996 int ec=0;
15997 dcc_send_msg((*i).socket,disp,ec);
15998 (*i).edit_chan++;
15999 } else {
16000 string disp;
16001 if(got)
16002 disp=lang_get_string(1,(*i).lang,57)+eol;
16003 else
16004 disp=lang_get_string(1,(*i).lang,58)+eol;
16005 int ec=0;
16006 dcc_send_msg((*i).socket,disp,ec);
16007 if(got)
16008 (*i).user_channel_def.on_server_msg=p;
16009 else {
16010 (*i).edit_chan--;
16011 return;
16012 }
16013 (*i).edit_chan++;
16014 }
16015 }
16016
16017 if((*i).edit_chan==514) {
16018 (*i).edit_chan=200;
16019 return;
16020 }
16021
16022
16023 if((*i).edit_chan==600) {
16024 string disp=lang_get_string(1,(*i).lang,587)+eol;
16025 int ec=0;
16026 dcc_send_msg((*i).socket,disp,ec);
16027 disp="";
16028 int i2=1;
16029 vector<string>::iterator i1;
16030 for(i1=(*i).user_channel_def.dynbans_editors.begin(); i1!=(*i).user_channel_def.dynbans_editors.end(); i1++, i2++) {
16031 char tmp[64];
16032 ltoa(i2,tmp,10);
16033 disp+=lang_get_string(1,(*i).lang,593);
16034 if(i2<10)
16035 disp+="0";
16036 if(i2<100)
16037 disp+="0";
16038 disp+=(string)tmp+": "+(*i1);
16039 disp+=" (";
16040 vector<string>::iterator i3;
16041 bool access=false;
16042 map<string,string> vars;
16043 for(i3=(*i).access_grant_groups.begin(); i3!=(*i).access_grant_groups.end(); i3++)
16044 if(!(*i3).compare(logic_eval(*i1,vars))) {
16045 access=true;
16046 break;
16047 }
16048 disp+=access?lang_get_string(1,(*i).lang,120):lang_get_string(1,(*i).lang,121);
16049 disp+=")";
16050 disp+=eol;
16051 }
16052 dcc_send_msg((*i).socket,disp,ec);
16053 disp=lang_get_string(1,(*i).lang,588)+eol;
16054 dcc_send_msg((*i).socket,disp,ec);
16055 (*i).edit_chan++;
16056 return;
16057 }
16058 if((*i).edit_chan==601) {
16059 string p=dcc_get_line((*i).in_buff);
16060 if(!p.compare(""))
16061 return;
16062 bool got=false;
16063 if(!p.compare(".")) {
16064 got=true;
16065 (*i).edit_chan=50;
16066 }
16067 if(!p.compare(".add")) {
16068 got=true;
16069 string disp=lang_get_string(1,(*i).lang,211)+eol;
16070 int ec=0;
16071 dcc_send_msg((*i).socket,disp,ec);
16072
16073 vector<string>::iterator i1;
16074 for(i1=(*i).access_grant_groups.begin(); i1!=(*i).access_grant_groups.end(); i1++) {
16075 disp=(*i1)+eol;
16076 dcc_send_msg((*i).socket,disp,ec);
16077 }
16078
16079 (*i).edit_chan=602;
16080 return;
16081 }
16082 string p1, p2;
16083 int pos=0;
16084 for(unsigned int i1=0; i1<p.length(); i1++) {
16085 if(p[i1]==0x20) {
16086 pos=1;
16087 continue;
16088 }
16089 if(pos==0)
16090 p1+=p[i1];
16091 if(pos==1)
16092 p2+=p[i1];
16093 }
16094 if(!p1.compare(".remove")) {
16095 got=true;
16096 int line=atol(p2.c_str());
16097
16098 int i2=1;
16099 vector<string>::iterator i1;
16100 for(i1=(*i).user_channel_def.dynbans_editors.begin(); i1!=(*i).user_channel_def.dynbans_editors.end(); i1++, i2++)
16101 if(i2==line) {
16102 bool access=false;
16103 map<string,string> vars;
16104 vector<string>::iterator i3;
16105 for(i3=(*i).access_grant_groups.begin(); i3!=(*i).access_grant_groups.end(); i3++)
16106 if(!(*i3).compare(logic_eval(*i1,vars))) {
16107 access=true;
16108 break;
16109 }
16110 if(access)
16111 (*i).user_channel_def.dynbans_editors.erase(i1);
16112 else {
16113 string disp=lang_get_string(1,(*i).lang,121)+eol;
16114 int ec=0;
16115 dcc_send_msg((*i).socket,disp,ec);
16116 }
16117 break;
16118 }
16119 (*i).edit_chan=600;
16120 }
16121 if(!got) {
16122 string disp=lang_get_string(1,(*i).lang,588)+eol;
16123 int ec=0;
16124 dcc_send_msg((*i).socket,disp,ec);
16125 (*i).edit_chan=600;
16126 }
16127 }
16128 if((*i).edit_chan==602) {
16129 string p=dcc_get_line((*i).in_buff);
16130 if(!p.compare(""))
16131 return;
16132
16133 vector<string>::iterator i1;
16134 bool got=false;
16135 for(i1=(*i).access_grant_groups.begin(); i1!=(*i).access_grant_groups.end(); i1++)
16136 if(!(*i1).compare(p))
16137 got=true;
16138 string disp;
16139 if(got)
16140 disp=lang_get_string(1,(*i).lang,228)+eol;
16141 else
16142 disp=lang_get_string(1,(*i).lang,214)+eol;
16143 int ec=0;
16144 dcc_send_msg((*i).socket,disp,ec);
16145 p=(string)"\""+p+"\"";
16146 if(got)
16147 (*i).user_channel_def.dynbans_editors.push_back(p);
16148
16149 (*i).edit_chan=600;
16150 }
16151 }
16152
16153 extern void sleep(int ms);
16154
16155
16156
16157
16158
16159
16160
16161
16162 void dcc_loop_get_rights(vector<s_dcc_client>::iterator i)
16163 {
16164 (*i).chs.clear();
16165 logic_partyline_get_user((*i).as_in_logic,(*i).u,(*i).chs);
16166 logic_partyline_access(
16167 (*i).as_in_logic,
16168 (*i).access_to_users,
16169 (*i).access_to_groups,
16170 (*i).access_grant_groups,
16171 (*i).access_to_proc_groups,
16172 (*i).access_grant_proc_groups,
16173 (*i).access_grant_proc,
16174 (*i).access_to_channel,
16175 (*i).access_grant_channel,
16176 (*i).access_grant_partyline,
16177 (*i).access_to_procs,
16178 (*i).access_to_backup,
16179 (*i).access_grant_backup,
16180 (*i).access_to_rehash,
16181 (*i).access_grant_rehash,
16182 (*i).access_to_plususer,
16183 (*i).access_grant_plususer,
16184 (*i).access_to_plusproc,
16185 (*i).access_grant_plusproc,
16186 (*i).partyline_msg_flood,
16187 (*i).access_to_replication,
16188 (*i).access_grant_replication,
16189 (*i).access_to_chan_defs,
16190 (*i).access_to_restart,
16191 (*i).access_grant_restart,
16192 (*i).access_to_die,
16193 (*i).access_grant_die,
16194 (*i).access_to_filesystem,
16195 (*i).access_grant_filesystem,
16196 (*i).access_to_private,
16197 (*i).access_grant_private,
16198 (*i).access_to_can_send_all_users,
16199 (*i).access_grant_can_send_all_users,
16200 (*i).access_to_can_send_unknown_users,
16201 (*i).access_grant_can_send_unknown_users,
16202 (*i).access_usage_proc,
16203 (*i).access_usage_proc_groups,
16204 (*i).access_to_upgrade,
16205 (*i).access_grant_upgrade,
16206 (*i).access_to_apply,
16207 (*i).access_grant_apply
16208 );
16209 }
16210
16211
16212
16213
16214
16215
16216
16217 struct s_session {
16218 int num;
16219 vector<s_dcc_client*> c;
16220 };
16221
16222
16223
16224
16225
16226
16227
16228 void dcc_check_limit()
16229 {
16230 if(atol(conf_getvar("dcc_max_sessions_per_ip").c_str())==0)
16231 return;
16232
16233 map<string,s_session> sessions;
16234
16235 vector<s_dcc_client>::iterator i1;
16236 for(i1=dcc_clients.begin(); i1!=dcc_clients.end(); i1++) {
16237 if(!(*i1).replication_partner && (*i1).chat && !(*i1).remote.empty()) {
16238 pair<string,s_session> p;
16239 p.first=(*i1).remote;
16240 p.second.num=1;
16241 p.second.c.clear();
16242 p.second.c.push_back(&(*i1));
16243
16244 map<string,s_session>::iterator i2;
16245 bool got=false;
16246 for(i2=sessions.begin(); i2!=sessions.end(); i2++) {
16247 if(!(*i2).first.compare(p.first)) {
16248 got=true;
16249 (*i2).second.num++;
16250 break;
16251 }
16252 }
16253 if(!got)
16254 sessions.insert(p);
16255 }
16256 }
16257 map<string,s_session>::iterator i2;
16258 for(i2=sessions.begin(); i2!=sessions.end(); i2++) {
16259 if((*i2).second.num>atol(conf_getvar("dcc_max_sessions_per_ip").c_str())) {
16260 s_dcc_client* max_idle=NULL;
16261
16262 vector<s_dcc_client*>::iterator i3;
16263 for(i3=(*i2).second.c.begin(); i3!=(*i2).second.c.end(); i3++) {
16264 if(max_idle==NULL) {
16265 max_idle=*i3;
16266 continue;
16267 }
16268 if((*i3)->last_input<max_idle->last_input)
16269 max_idle=*i3;
16270 }
16271 if(max_idle==NULL)
16272 continue;
16273
16274 string lang=max_idle->lang;
16275 if(lang.empty())
16276 lang="en";
16277
16278 char dcc_eol[4]="\n\0";
16279 char telnet_eol[4]="\r\n\0";
16280 string eol=max_idle->telnet?telnet_eol:dcc_eol;
16281
16282 vector<s_dcc_client>::iterator i4;
16283 for(i4=dcc_clients.begin(); i4!=dcc_clients.end(); i4++)
16284 if((*i4).socket==max_idle->socket) {
16285 dcc_clients.erase(i4);
16286 break;
16287 }
16288
16289 if(dcc_killing_user_socket && max_idle->socket.handle==dcc_killing_user_socket->handle) {
16290 } else {
16291 string disp=lang_get_string(1,lang,620)+eol;
16292 int ec=0;
16293 dcc_send_msg(max_idle->socket,disp,ec);
16294 sock_close(max_idle->socket);
16295 }
16296 }
16297 }
16298 }
16299
16300
16301
16302
16303
16304
16305
16306
16307 void dcc_apply(string who)
16308 {
16309 vector<s_dcc_client>::iterator i;
16310 char dcc_eol[4]="\n\0";
16311 char telnet_eol[4]="\r\n\0";
16312 for(i=dcc_clients.begin(); i!=dcc_clients.end(); i++) {
16313 if((*i).got_passwd!=3)
16314 continue;
16315 dcc_loop_get_rights(i);
16316 if((*i).send)
16317 continue;
16318 if((*i).send_from_filesystem)
16319 continue;
16320 if((*i).replication_partner)
16321 continue;
16322 if((*i).ssl_connection)
16323 continue;
16324 if(!(*i).chat)
16325 continue;
16326 string eol=(*i).telnet?telnet_eol:dcc_eol;
16327 string disp=lang_subst(lang_get_string(1,(*i).lang,687),who)+eol;
16328 int ec=0;
16329 dcc_send_msg((*i).socket,disp,ec);
16330 }
16331 }
16332
16333
16334
16335
16336
16337
16338
16339 void dcc_loop()
16340 {
16341 if(dcc_want_to_upgrade && last_new_instance_join+NEW_INSTANCE_TIMEOUT_AFTER_LAST_JOIN<time(NULL)) {
16342 dcc_want_to_upgrade=false;
16343 dcc_want_to_die=true;
16344 }
16345
16346 {
16347 vector<s_dcc_client_to_resume>::iterator i1;
16348 again__:
16349 for(i1=dcc_to_resume.begin(); i1!=dcc_to_resume.end(); i1++) {
16350 if((*i1).start_time+10<time(NULL)) {
16351
16352
16353
16354 s_dcc_client_to_resume res=*i1;
16355 dcc_to_resume.erase(i1);
16356
16357 string ip_addr;
16358 if(!res.using_ipv6)
16359 ip_addr=res.ip_addr4;
16360 else
16361 ip_addr=res.ip_addr6;
16362 unsigned short port=res.port;
16363
16364 string dcc_bind_ip=conf_getvar("dcc_bind_ip");
16365 if(dcc_bind_ip.empty())
16366 dcc_bind_ip="0.0.0.0";
16367 string dcc_bind_ip6=conf_getvar("dcc_bind_ip6");
16368 if(dcc_bind_ip6.empty())
16369 dcc_bind_ip6="::";
16370
16371 int ec=0;
16372 s_socket s;
16373 if(!res.using_ipv6)
16374 s=sock_connect((char*)dcc_bind_ip.c_str(),(char*)ip_addr.c_str(),port,ec,true);
16375 else
16376 s=sock_connect((char*)dcc_bind_ip6.c_str(),(char*)ip_addr.c_str(),port,ec,true);
16377 if(s.cmp()==false || ec) {
16378 log_socket(ec,sock_error(ec),"while calling sock_connect in file " __FILE__ " in function " __FUNC__);
16379 goto again__;
16380 }
16381
16382 s_dcc_client c;
16383
16384 c.nick=(*i1).nick;
16385 c.ident=irc_get_ident((*i1).nick);
16386 c.host=irc_get_host((*i1).nick);
16387 c.fullname=irc_get_fullname((*i1).nick);
16388
16389 c.resume_pos=0;
16390
16391 c.chat=false;
16392 c.send=true;
16393 c.send_from_filesystem=false;
16394 c.socket=s;
16395
16396 c.server_socket.clear();
16397 c.telnet=false;
16398 c.got_passwd=0;
16399 c.new_user=0;
16400 c.edit_user=0;
16401 c.filesystem=0;
16402 c.as_in_logic=res.user_name;
16403 c.got_user_name=(c.as_in_logic.empty()?false:true);
16404
16405 c.dcc_send.size=res.file_size;
16406 c.dcc_send.original_name=res.file_name;
16407 c.dcc_send.is_file_server_proto=false;
16408
16409 dcc_clients.push_back(c);
16410 dcc_check_limit();
16411
16412 goto again__;
16413 }
16414 }
16415 }
16416
16417 vector<s_dcc_client>::iterator i;
16418 char dcc_eol[4]="\n\0";
16419 char telnet_eol[4]="\r\n\0";
16420 again:
16421 for(i=dcc_clients.begin(); i!=dcc_clients.end(); i++) {
16422 if((*i).replication_partner) {
16423 if(!(*i).telnet_botnet_called) {
16424 if((*i).telnet_buffer_pos) {
16425 unsigned int i1;
16426 for(i1=0; i1<(*i).telnet_buffer_pos; i1++)
16427 if((*i).telnet_buffer[i1]=='\r' || (*i).telnet_buffer[i1]=='\n')
16428 break;
16429 if((*i).telnet_buffer[i1]=='\r' || (*i).telnet_buffer[i1]=='\n')
16430 i1++;
16431 if((*i).telnet_buffer[i1]=='\r' || (*i).telnet_buffer[i1]=='\n')
16432 i1++;
16433 unsigned int begin=i1;
16434 (*i).telnet_buffer_pos-=begin;
16435
16436 botnet_received_data_from_telnet((*i).socket,(*i).as_in_logic,&(*i).telnet_buffer[begin],(*i).telnet_buffer_pos,(*i).ssl_connection?(*i).ssl:NULL,(*i).remote);
16437 (*i).telnet_buffer_pos=0;
16438 (*i).telnet_botnet_called=true;
16439 } else {
16440 botnet_received_data_from_telnet((*i).socket,(*i).as_in_logic,NULL,0,(*i).ssl_connection?(*i).ssl:NULL,(*i).remote);
16441 (*i).telnet_botnet_called=true;
16442 }
16443 if((*i).ssl_connection) {
16444 if(!ssl_server_accept((*i).ssl,&((*i).socket))) {
16445 continue;
16446 }
16447 }
16448 }
16449 if((*i).socket.cmp()==false) {
16450 if((*i).ssl_connection) {
16451 ssl_close((*i).ssl,&((*i).socket));
16452 }
16453 dcc_clients.erase(i);
16454 goto again;
16455 }
16456 continue;
16457 }
16458
16459 string eol=(*i).telnet?telnet_eol:dcc_eol;
16460 if((*i).chat) {
16461 if((*i).lang.empty())
16462 (*i).lang="en";
16463
16464 long dcc_always_want_nick=atol(conf_getvar("dcc_always_want_nick").c_str());
16465 if(dcc_always_want_nick && (*i).got_user_name) {
16466 (*i).got_user_name=false;
16467 (*i).supposed_to_be=(*i).as_in_logic;
16468 (*i).as_in_logic="";
16469
16470 string disp=lang_get_string(1,(*i).lang,167)+eol;
16471 int ec=0;
16472 size_t sent=sock_send((*i).socket,disp.c_str(),disp.length(),ec);
16473 stats_dcc_chat_bytes_sent(sent);
16474 }
16475 if(!dcc_always_want_nick)
16476 (*i).supposed_to_be=(*i).as_in_logic;
16477
16478 {
16479 int ec=0;
16480 char buff[5*1024+1];
16481 bool closed;
16482 int max_len=sizeof(buff)-1;
16483 if((*i).got_passwd<=1 && (*i).telnet) {
16484 max_len=1;
16485 if((*i).in_buff.length()>128) {
16486
16487 sock_close((*i).socket);
16488 dcc_clients.erase(i);
16489 goto again;
16490 }
16491 }
16492 size_t len=sock_read((*i).socket,buff,max_len,ec,closed);
16493 if(ec==0) {
16494 buff[len]=0;
16495 stats_dcc_chat_bytes_received(len);
16496 }
16497 if(closed || ec) {
16498 if((*i).partyline_channel.compare(""))
16499 botnet_partyline_leave_channel((*i).as_in_logic,(*i).partyline_channel);
16500 (*i).partyline_channel="";
16501 if(dcc_killing_user_socket && (*i).socket.handle==dcc_killing_user_socket->handle)
16502 dcc_killing_user_socket=NULL;
16503 sock_close((*i).socket);
16504 dcc_clients.erase(i);
16505 goto again;
16506 }
16507 if(len) {
16508 (*i).last_input=time(NULL);
16509 if((*i).got_passwd==1) {
16510 string disp;
16511 unsigned int i1;
16512 for(i1=0; i1<len; i1++)
16513 disp+="\x08";
16514 for(i1=0; i1<len; i1++)
16515 disp+=" ";
16516 for(i1=0; i1<len; i1++)
16517 disp+="\x08";
16518 int ec=0;
16519 if((*i).telnet)
16520 dcc_send_msg((*i).socket,disp,ec);
16521 }
16522 (*i).in_buff+=buff;
16523 (*i).telnet_buffer_pos=len;
16524 if((*i).telnet_buffer_pos>sizeof((*i).telnet_buffer))
16525 (*i).telnet_buffer_pos=sizeof((*i).telnet_buffer);
16526 memcpy((*i).telnet_buffer,buff,(*i).telnet_buffer_pos);
16527 }
16528 }
16529
16530 if((*i).as_in_logic.empty()) {
16531 string ln=dcc_get_line((*i).in_buff);
16532 if(!ln.empty() && match("### *",(char*)ln.c_str())) {
16533 (*i).as_in_logic=ln;
16534 (*i).got_passwd=0;
16535
16536 string pswd=dcc_get_password((*i).as_in_logic);
16537 if(pswd.empty()) {
16538
16539 if((*i).supposed_to_be.compare((*i).as_in_logic)) {
16540
16541 string disp=lang_get_string(1,"en",698)+eol;
16542 int ec=0;
16543 dcc_send_msg((*i).socket,disp,ec);
16544 sock_close((*i).socket);
16545 dcc_clients.erase(i);
16546 break;
16547 }
16548 }
16549 }
16550 }
16551 if((*i).got_passwd==0) {
16552 {
16553 int secs=atol(conf_getvar("lockout_duration").c_str());
16554 vector<s_user_to_lock_out>::iterator i1;
16555 lock_a:
16556 for(i1=dcc_users_to_lock_out.begin(); i1!=dcc_users_to_lock_out.end(); i1++)
16557 if((*i1).timestamp+secs<time(NULL)) {
16558 dcc_users_to_lock_out.erase(i1);
16559 goto lock_a;
16560 }
16561 int num=0;
16562 for(i1=dcc_users_to_lock_out.begin(); i1!=dcc_users_to_lock_out.end(); i1++)
16563 if(!(*i1).remote.compare((*i).remote))
16564 num++;
16565 int max=atol(conf_getvar("lockout_count").c_str());
16566 if(max!=0 && num>=max) {
16567 string disp=lang_get_string(1,"en",612)+eol;
16568 int ec=0;
16569 dcc_send_msg((*i).socket,disp,ec);
16570 sock_close((*i).socket);
16571 dcc_clients.erase(i);
16572 break;
16573 }
16574 }
16575
16576 (*i).new_user=0;
16577 (*i).edit_user=0;
16578 (*i).edit_proc=0;
16579 (*i).edit_chan=0;
16580 (*i).filesystem=0;
16581 (*i).edit_proc=0;
16582 (*i).edit_chan=0;
16583 (*i).filesystem=0;
16584 (*i).msg=0;
16585 (*i).private_edit=0;
16586 (*i).replication=0;
16587 (*i).terminator=0;
16588 (*i).language=0;
16589
16590 if(logic_is_replication_partner((*i).as_in_logic)) {
16591 (*i).chat=false;
16592 (*i).replication_partner=true;
16593 (*i).telnet_botnet_called=false;
16594 vector<s_ssl_bot>::iterator i1;
16595 for(i1=ssl_conf.ssl_bots.begin(); i1!=ssl_conf.ssl_bots.end(); i1++) {
16596 if(!(*i).as_in_logic.compare((*i1).botname)) {
16597 sock_cancel_caching((*i).socket);
16598 (*i).replication_partner=true;
16599 (*i).ssl_connection=true;
16600 char err_str[1024];
16601 size_t len;
16602 sock_set_blocking((*i).socket,true);
16603 do
16604 len=recv((*i).socket.handle,err_str,sizeof(err_str),0);
16605 while((signed)len>0);
16606
16607 int ec=0;
16608 bool closed=false;
16609 do
16610 len=sock_read((*i).socket,err_str,sizeof(err_str),ec,closed);
16611 while((signed)len>0);
16612
16613 if(ssl_server_connection((*i).ssl,&((*i).socket),err_str,(char*)ssl_conf.server_cert.c_str(),(char*)ssl_conf.server_key.c_str(),(char*)(*i1).cert.c_str())) {
16614 sock_close((*i).socket);
16615 dcc_clients.erase(i);
16616 goto again;
16617 }
16618 botnet_received_data_from_telnet((*i).socket,(*i).as_in_logic,(*i).telnet_buffer,0,(*i).ssl,(*i).remote);
16619 (*i).telnet_buffer_pos=0;
16620 (*i).telnet_botnet_called=true;
16621 char tmp=0x01;
16622 send((*i).socket.handle,&tmp,1,0);
16623 dcc_clients.erase(i);
16624
16625 sock_set_blocking((*i).socket,true);
16626
16627 goto again;
16628 }
16629 }
16630 continue;
16631 }
16632
16633 if((*i).as_in_logic.empty())
16634 continue;
16635
16636 string pswd=dcc_get_password((*i).as_in_logic);
16637 (*i).lang="en";
16638 string disp=lang_subst(lang_get_string(1,(*i).lang,1),conf_getvar("botname"))+eol+lang_subst(lang_get_string(1,(*i).lang,640),VERSION)+eol+lang_subst(lang_get_string(1,(*i).lang,2),conf_getvar("admin"))+eol;
16639 int ec=0;
16640 dcc_send_msg((*i).socket,disp,ec);
16641 if(!pswd.compare(""))
16642 disp=lang_get_string(1,(*i).lang,3)+eol;
16643 else
16644 disp=lang_get_string(1,(*i).lang,4)+eol;
16645 dcc_send_msg((*i).socket,disp,ec);
16646 (*i).got_passwd++;
16647 (*i).in_buff="";
16648 continue;
16649 }
16650 if((*i).got_passwd==1) {
16651 string pswd=dcc_get_password((*i).as_in_logic);
16652 string p=dcc_get_line((*i).in_buff);
16653 if(p.empty() || !match("### *",(char*)p.c_str()))
16654 continue;
16655 string disp=eol;
16656 int ec=0;
16657 dcc_send_msg((*i).socket,disp,ec);
16658
16659 if(!logic_access_to_partyline((*i).as_in_logic)) {
16660 s_user_to_lock_out u;
16661 u.timestamp=time(NULL);
16662 u.remote=(*i).remote;
16663 dcc_users_to_lock_out.push_back(u);
16664
16665 string disp=lang_get_string(1,(*i).lang,5)+eol;
16666 int ec=0;
16667 dcc_send_msg((*i).socket,disp,ec);
16668 sock_close((*i).socket);
16669 dcc_clients.erase(i);
16670 goto again;
16671 }
16672
16673 unsigned char signature[16];
16674
16675 MD5Context md5c;
16676 MD5Init(&md5c);
16677 MD5Update(&md5c,(unsigned char *)p.c_str(),(unsigned int)p.length());
16678 MD5Final(signature,&md5c);
16679
16680 char sig[128];
16681 sig[0]=0;
16682 for(int i1=0; i1<16; i1++) {
16683 char tmp[16];
16684 sprintf(tmp,"%02X",signature[i1]);
16685 strcat(sig,tmp);
16686 }
16687
16688 if(cmp_strings_case_insensitive(pswd,sig)!=0 && pswd.compare("")) {
16689 s_user_to_lock_out u;
16690 u.timestamp=time(NULL);
16691 u.remote=(*i).remote;
16692 dcc_users_to_lock_out.push_back(u);
16693
16694 string disp=lang_get_string(1,(*i).lang,5)+eol;
16695 int ec=0;
16696 dcc_send_msg((*i).socket,disp,ec);
16697 sock_close((*i).socket);
16698 dcc_clients.erase(i);
16699 break;
16700 }
16701
16702 if(!pswd.compare("")) {
16703
16704 if((*i).telnet) {
16705 string disp=lang_subst(lang_get_string(1,(*i).lang,689),conf_getvar("admin"))+eol;
16706 int ec=0;
16707 dcc_send_msg((*i).socket,disp,ec);
16708 sock_close((*i).socket);
16709 dcc_clients.erase(i);
16710 break;
16711 } else {
16712 if(dcc_want_to_upgrade) {
16713 string disp=lang_get_string(1,(*i).lang,642)+eol;
16714 int ec=0;
16715 dcc_send_msg((*i).socket,disp,ec);
16716 } else
16717 dcc_set_password((*i).as_in_logic,sig);
16718 }
16719 }
16720
16721 (*i).got_passwd++;
16722 }
16723 if((*i).got_passwd==2) {
16724 FILE* in=fopen("motd.txt","r");
16725 char ln[10240+1];
16726 while(in && !feof(in)) {
16727 if(fgets(ln,1024*10-1,in)==NULL)
16728 break;
16729 ln[10240]=0;
16730 if(ln[strlen(ln)-1]=='\r')
16731 ln[strlen(ln)-1]=0;
16732 if(ln[strlen(ln)-1]=='\n')
16733 ln[strlen(ln)-1]=0;
16734 if(ln[strlen(ln)-1]=='\r')
16735 ln[strlen(ln)-1]=0;
16736 if(ln[strlen(ln)-1]=='\n')
16737 ln[strlen(ln)-1]=0;
16738 string disp=(string)ln+eol;
16739 int ec=0;
16740 dcc_send_msg((*i).socket,disp,ec);
16741 }
16742 if(in)
16743 fclose(in);
16744 (*i).got_passwd++;
16745 dcc_loop_get_rights(i);
16746
16747 dcc_check_for_filesystem((*i).as_in_logic);
16748
16749
16750
16751
16752
16753
16754
16755
16756
16757
16758
16759
16760
16761
16762
16763
16764
16765
16766
16767
16768
16769 (*i).partyline_channel="";
16770 }
16771
16772 if((*i).got_passwd!=3)
16773 continue;
16774
16775 dcc_loop_new_user(i,eol);
16776
16777 dcc_loop_edit_user1(i,eol);
16778 dcc_loop_edit_user2(i,eol);
16779
16780 dcc_loop_edit_rproc(i,eol);
16781
16782 dcc_loop_edit_proc(i,eol);
16783
16784 dcc_loop_edit_chan(i,eol);
16785
16786 dcc_loop_filesystem(i,eol);
16787
16788 dcc_loop_msg(i,eol);
16789
16790 dcc_loop_private(i,eol);
16791
16792 dcc_loop_replication(i,eol);
16793
16794 dcc_loop_terminator(i,eol);
16795
16796 dcc_loop_language(i,eol);
16797
16798 dcc_loop_edit_dynbans(i,eol);
16799
16800 {
16801 int dcc_chat_ping_interval=atol(conf_getvar("dcc_chat_ping_interval").c_str());
16802 if(dcc_chat_ping_interval && sock_get_last_io((*i).socket)+dcc_chat_ping_interval<=time(NULL)) {
16803 time_t last_read=sock_get_last_io((*i).socket,'r');
16804
16805 string disp=lang_get_string(1,(*i).lang,611);
16806
16807 time_t diff=time(NULL)-last_read;
16808 time_t days=diff/(24*60*60);
16809 diff%=24*60*60;
16810 time_t hrs=diff/(60*60);
16811 diff%=60*60;
16812 time_t mins=diff/(60);
16813 diff%=60;
16814 time_t secs=diff;
16815
16816 string idle=lang_get_string(1,(*i).lang,695);
16817 char tmp[128];
16818 idle=lang_subst(idle,ltoa((long)days,tmp,10));
16819 idle=lang_subst(idle,ltoa((long)hrs,tmp,10));
16820 idle=lang_subst(idle,ltoa((long)mins,tmp,10));
16821 idle=lang_subst(idle,ltoa((long)secs,tmp,10));
16822
16823 disp+=" ";
16824 disp+=idle;
16825 disp+=eol;
16826
16827 {
16828 time_t now=time(NULL);
16829 char* t1=ctime(&now);
16830 char t2[128];
16831 strcpy(t2,t1);
16832 t2[strlen(t2)-1]=0;
16833 string ts="[";
16834 ts+=t2;
16835 ts+="] ";
16836 disp=ts+disp;
16837 }
16838
16839 int ec=0;
16840 dcc_send_msg((*i).socket,disp,ec);
16841 }
16842 }
16843
16844 if((*i).last_filesys_lookup==0 || (*i).last_filesys_lookup+30<time(NULL)) {
16845 time(&(*i).last_filesys_lookup);
16846 vector<s_dcc_notify> notify;
16847 filesys_dcc_check_for_notifies((*i).as_in_logic,(*i).u,(*i).chs,"",notify,true,(*i).lang,eol);
16848 if(!notify.empty()) {
16849 filesys_dcc_drop_notifies((*i).as_in_logic,false);
16850
16851 string files;
16852 string msgs;
16853 string incomplete_files;
16854
16855 vector<s_dcc_notify>::iterator i1;
16856 for(i1=notify.begin(); i1!=notify.end(); i1++) {
16857 if((*i1).unpublished) {
16858 if(!files.empty())
16859 files+=", ";
16860 files+="\"";
16861 files+=(*i1).name;
16862 files+="\"";
16863 }
16864 if((*i1).incomplete) {
16865 if(!incomplete_files.empty())
16866 incomplete_files+=", ";
16867 incomplete_files+="\"";
16868 incomplete_files+=(*i1).name;
16869 incomplete_files+="\"";
16870 }
16871 if((*i1).notify_owner || (*i1).notify_user || (*i1).secure_notify_owner || (*i1).secure_notify_user)
16872 msgs+=(*i1).message;
16873 }
16874
16875
16876
16877
16878
16879
16880
16881
16882
16883
16884
16885
16886 if(!msgs.empty()) {
16887 string disp=msgs+eol;
16888 int ec=0;
16889 dcc_send_msg((*i).socket,disp,ec);
16890 }
16891 }
16892 }
16893
16894 if((*i).new_user ||
16895 (*i).edit_user ||
16896 (*i).edit_proc ||
16897 (*i).edit_chan ||
16898 (*i).filesystem ||
16899 (*i).msg ||
16900 (*i).private_edit ||
16901 (*i).replication ||
16902 (*i).terminator ||
16903 (*i).language)
16904 continue;
16905
16906 string c=dcc_get_line((*i).in_buff);
16907 string cmd, param1, param2;
16908 int pos=0;
16909 for(unsigned int i1=0; i1<c.length(); i1++) {
16910 if((pos==0 || pos==1 || pos==2) && c[i1]==0x20) {
16911 pos++;
16912 continue;
16913 }
16914 if(pos==0)
16915 cmd+=c[i1];
16916 if(pos==1)
16917 param1+=c[i1];
16918 if(pos==2)
16919 param2+=c[i1];
16920 }
16921
16922 bool got_cmd=false;
16923
16924 if(!cmd.compare(".whois")) {
16925 got_cmd=true;
16926 if(!param1.compare("") || param2.compare("")) {
16927 string disp=lang_get_string(1,(*i).lang,8)+eol;
16928 int ec=0;
16929 dcc_send_msg((*i).socket,disp,ec);
16930 } else {
16931 string disp=lang_subst(lang_get_string(1,(*i).lang,6),param1)+eol;
16932 int ec=0;
16933 dcc_send_msg((*i).socket,disp,ec);
16934
16935 list<string> lines;
16936 int num=logic_partyline_whois((*i).lang,param1,lines);
16937 list<string>::iterator i1;
16938 for(i1=lines.begin(); i1!=lines.end(); i1++) {
16939 dcc_send_msg((*i).socket,*i1,ec);
16940 dcc_send_msg((*i).socket,eol,ec);
16941 }
16942
16943 char tmp[64];
16944 ltoa(num,tmp,10);
16945 disp=lang_subst(lang_get_string(1,(*i).lang,7),tmp)+eol;
16946 disp=lang_subst(disp,param1);
16947 dcc_send_msg((*i).socket,disp,ec);
16948 }
16949 }
16950 if(!cmd.compare(".+user")) {
16951 got_cmd=true;
16952 if((*i).access_to_plususer) {
16953 if(param1.compare("") || param2.compare("")) {
16954 string disp=lang_get_string(1,(*i).lang,29)+eol;
16955 int ec=0;
16956 dcc_send_msg((*i).socket,disp,ec);
16957 } else {
16958 string disp=lang_get_string(1,(*i).lang,32)+eol;
16959 int ec=0;
16960 dcc_send_msg((*i).socket,disp,ec);
16961 (*i).new_user=1;
16962 }
16963 } else {
16964 string disp=lang_get_string(1,(*i).lang,183)+eol;
16965 int ec=0;
16966 dcc_send_msg((*i).socket,disp,ec);
16967 }
16968 }
16969 if(!cmd.compare(".edituser")) {
16970 got_cmd=true;
16971 if(param1.compare("") || param2.compare("")) {
16972 string disp=lang_get_string(1,(*i).lang,87)+eol;
16973 int ec=0;
16974 dcc_send_msg((*i).socket,disp,ec);
16975 } else {
16976 string disp=lang_get_string(1,(*i).lang,88)+eol;
16977 int ec=0;
16978 dcc_send_msg((*i).socket,disp,ec);
16979
16980 vector<string>::iterator i1;
16981 for(i1=(*i).access_to_users.begin(); i1!=(*i).access_to_users.end(); i1++) {
16982 if(!(*i1).compare("*"))
16983 continue;
16984 disp=*i1+eol;
16985 dcc_send_msg((*i).socket,disp,ec);
16986 }
16987
16988 disp=lang_get_string(1,(*i).lang,89)+eol;
16989 dcc_send_msg((*i).socket,disp,ec);
16990
16991 (*i).edit_user=1;
16992 }
16993 }
16994 if(!cmd.compare(".+proc")) {
16995 got_cmd=true;
16996 if((*i).access_to_plusproc) {
16997 if(param1.compare("") || param2.compare("")) {
16998 string disp=lang_get_string(1,(*i).lang,377)+eol;
16999 int ec=0;
17000 dcc_send_msg((*i).socket,disp,ec);
17001 } else {
17002 (*i).edit_proc=1000;
17003 }
17004 } else {
17005 string disp=lang_get_string(1,(*i).lang,192)+eol;
17006 int ec=0;
17007 dcc_send_msg((*i).socket,disp,ec);
17008 }
17009 }
17010 if(!cmd.compare(".editproc")) {
17011 got_cmd=true;
17012 if(param1.compare("") || param2.compare("")) {
17013 string disp=lang_get_string(1,(*i).lang,134)+eol;
17014 int ec=0;
17015 dcc_send_msg((*i).socket,disp,ec);
17016 } else {
17017 string disp=lang_get_string(1,(*i).lang,135)+eol;
17018 int ec=0;
17019 dcc_send_msg((*i).socket,disp,ec);
17020
17021 vector<string>::iterator i1;
17022 for(i1=(*i).access_to_procs.begin(); i1!=(*i).access_to_procs.end(); i1++) {
17023 if(!(*i1).compare("*"))
17024 continue;
17025 disp=*i1+eol;
17026 dcc_send_msg((*i).socket,disp,ec);
17027 }
17028
17029 disp=lang_get_string(1,(*i).lang,136)+eol;
17030 dcc_send_msg((*i).socket,disp,ec);
17031
17032 (*i).edit_proc=1;
17033 }
17034 }
17035 if(!cmd.compare(".editchan")) {
17036 got_cmd=true;
17037 if(param1.compare("") || param2.compare("")) {
17038 string disp=lang_get_string(1,(*i).lang,220)+eol;
17039 int ec=0;
17040 dcc_send_msg((*i).socket,disp,ec);
17041 } else {
17042 (*i).edit_chan=1;
17043 }
17044 }
17045 if(!cmd.compare(".+chan")) {
17046 got_cmd=true;
17047 if(param1.compare("") || param2.compare("")) {
17048 string disp=lang_get_string(1,(*i).lang,235)+eol;
17049 int ec=0;
17050 dcc_send_msg((*i).socket,disp,ec);
17051 } else {
17052 (*i).edit_chan=100;
17053 }
17054 }
17055 if(!cmd.compare(".quit")) {
17056 got_cmd=true;
17057 if((*i).partyline_channel.compare(""))
17058 botnet_partyline_leave_channel((*i).as_in_logic,(*i).partyline_channel);
17059 (*i).partyline_channel="";
17060 string disp=lang_get_string(1,(*i).lang,71)+eol;
17061 int ec=0;
17062 dcc_send_msg((*i).socket,disp,ec);
17063 if(dcc_killing_user_socket && (*i).socket.handle==dcc_killing_user_socket->handle)
17064 dcc_killing_user_socket=NULL;
17065 sock_close((*i).socket);
17066 dcc_clients.erase(i);
17067 goto again;
17068 }
17069 if(!cmd.compare(".backup")) {
17070 got_cmd=true;
17071 if((*i).access_to_backup) {
17072 logic_partyline_backup((*i).as_in_logic);
17073 if(dcc_want_to_upgrade) {
17074 string disp=lang_get_string(1,(*i).lang,641)+eol;
17075 int ec=0;
17076 dcc_send_msg((*i).socket,disp,ec);
17077 } else {
17078 string disp=lang_get_string(1,(*i).lang,74)+eol;
17079 int ec=0;
17080 dcc_send_msg((*i).socket,disp,ec);
17081 }
17082 } else {
17083 string disp=lang_get_string(1,(*i).lang,188)+eol;
17084 int ec=0;
17085 dcc_send_msg((*i).socket,disp,ec);
17086 }
17087 }
17088 if(!cmd.compare(".rehash")) {
17089 got_cmd=true;
17090 if((*i).access_to_rehash) {
17091 string disp=lang_get_string(1,(*i).lang,348)+eol;
17092 int ec=0;
17093 dcc_send_msg((*i).socket,disp,ec);
17094 sock_flush_later((*i).socket);
17095 lang_rehash();
17096 conf_rehash();
17097 disp=logic_partyline_rehash((*i).lang,eol,(*i).as_in_logic);
17098 ec=0;
17099 dcc_send_msg((*i).socket,disp,ec);
17100 } else {
17101 string disp=lang_get_string(1,(*i).lang,347)+eol;
17102 int ec=0;
17103 dcc_send_msg((*i).socket,disp,ec);
17104 }
17105 }
17106 if(!cmd.compare(".apply")) {
17107 got_cmd=true;
17108 if((*i).access_to_apply) {
17109 irc_rehashed();
17110 dcc_apply((*i).as_in_logic);
17111
17112 logic_on_internal_event("@apply@",(*i).as_in_logic,"","","",PRIVATE_EVENT_SEVERITY_CODE_INFORMATIONAL,"","");
17113 } else {
17114 string disp=lang_get_string(1,(*i).lang,682)+eol;
17115 int ec=0;
17116 dcc_send_msg((*i).socket,disp,ec);
17117 }
17118 }
17119 if(!cmd.compare(".filesystem")) {
17120 got_cmd=true;
17121 if(param1.compare("") || param2.compare("")) {
17122 string disp=lang_get_string(1,(*i).lang,628)+eol;
17123 int ec=0;
17124 dcc_send_msg((*i).socket,disp,ec);
17125 } else {
17126 if((*i).access_to_filesystem) {
17127 (*i).filesystem=1;
17128 } else {
17129 string disp=lang_get_string(1,(*i).lang,275)+eol;
17130 int ec=0;
17131 dcc_send_msg((*i).socket,disp,ec);
17132 }
17133 }
17134 }
17135 if(!cmd.compare(".upgrade")) {
17136 got_cmd=true;
17137 if(!param1.compare("") || param2.compare("")) {
17138 string disp=lang_get_string(1,(*i).lang,629)+eol;
17139 int ec=0;
17140 dcc_send_msg((*i).socket,disp,ec);
17141 } else {
17142 if((*i).access_to_upgrade) {
17143 bool ok=true;
17144 for(unsigned int i1=0; i1<param1.length(); i1++) {
17145 bool ok2=false;
17146 if(param1[i1]>='a' && param1[i1]<='z')
17147 ok2=true;
17148 if(param1[i1]>='A' && param1[i1]<='Z')
17149 ok2=true;
17150 if(param1[i1]>='0' && param1[i1]<='9')
17151 ok2=true;
17152 if(param1[i1]=='.' || param1[i1]=='_' || param1[i1]=='-')
17153 ok2=true;
17154 if(!ok2) {
17155 ok=false;
17156 break;
17157 }
17158 }
17159 if(ok)
17160 dcc_upgrade(i,eol,param1);
17161 else {
17162 string disp=lang_get_string(1,(*i).lang,665)+eol;
17163 int ec=0;
17164 dcc_send_msg((*i).socket,disp,ec);
17165 }
17166 } else {
17167 string disp=lang_get_string(1,(*i).lang,627)+eol;
17168 int ec=0;
17169 dcc_send_msg((*i).socket,disp,ec);
17170 }
17171 }
17172 }
17173 if(!cmd.compare(".msg")) {
17174 got_cmd=true;
17175 (*i).msg=1;
17176 }
17177 if(!cmd.compare(".rproc")) {
17178 got_cmd=true;
17179 if(param1.compare("") || param2.compare("")) {
17180 string disp=lang_get_string(1,(*i).lang,614)+eol;
17181 int ec=0;
17182 dcc_send_msg((*i).socket,disp,ec);
17183 } else {
17184 string disp=lang_get_string(1,(*i).lang,135)+eol;
17185 int ec=0;
17186 dcc_send_msg((*i).socket,disp,ec);
17187
17188 vector<string>::iterator i1;
17189 for(i1=(*i).access_to_procs.begin(); i1!=(*i).access_to_procs.end(); i1++) {
17190 if(!(*i1).compare("*"))
17191 continue;
17192 disp=*i1+eol;
17193 dcc_send_msg((*i).socket,disp,ec);
17194 }
17195
17196 disp=lang_get_string(1,(*i).lang,616)+eol;
17197 dcc_send_msg((*i).socket,disp,ec);
17198
17199 (*i).edit_rproc=1;
17200 }
17201 }
17202 if(!cmd.compare(".getfile")) {
17203 got_cmd=true;
17204 if((*i).access_to_filesystem) {
17205 int dcc_group=atol(param2.c_str());
17206 int res=dcc_send_file(true,param1,irc_get_nick((*i).as_in_logic),dcc_group);
17207 string disp;
17208 switch(res) {
17209 case DCC_NO_SUCH_FILE:
17210 disp=lang_get_string(1,"en",334);
17211 break;
17212 case DCC_ACCESS_DENIED:
17213 disp=lang_get_string(1,"en",335);
17214 break;
17215 case DCC_IO_ERROR:
17216 disp=lang_get_string(1,"en",336);
17217 break;
17218 }
17219 if(!disp.empty()) {
17220 disp+=eol;
17221 int ec=0;
17222 dcc_send_msg((*i).socket,disp,ec);
17223 }
17224 } else {
17225 string disp=lang_get_string(1,(*i).lang,275)+eol;
17226 int ec=0;
17227 dcc_send_msg((*i).socket,disp,ec);
17228 }
17229 }
17230 if(!cmd.compare(".partyline")) {
17231 got_cmd=true;
17232 if(param2.compare("")) {
17233 string disp=lang_get_string(1,(*i).lang,203)+eol;
17234 int ec=0;
17235 dcc_send_msg((*i).socket,disp,ec);
17236 } else {
17237 string chan=param1;
17238 if(!chan.compare(""))
17239 chan="partyline";
17240 if(chan.compare((*i).partyline_channel)) {
17241 if((*i).partyline_channel.compare(""))
17242 botnet_partyline_leave_channel((*i).as_in_logic,(*i).partyline_channel);
17243 (*i).partyline_channel=chan;
17244 string users=botnet_partyline_join_channel((*i).as_in_logic,(*i).partyline_channel);
17245 users=lang_get_string(1,(*i).lang,206)+" "+users+eol;
17246 int ec=0;
17247 dcc_send_msg((*i).socket,users,ec);
17248 }
17249 }
17250 }
17251 if(!cmd.compare(".leave")) {
17252 got_cmd=true;
17253 if(param1.compare("") || param2.compare("")) {
17254 string disp=lang_get_string(1,(*i).lang,204)+eol;
17255 int ec=0;
17256 dcc_send_msg((*i).socket,disp,ec);
17257 } else {
17258 if((*i).partyline_channel.compare("")) {
17259 botnet_partyline_leave_channel((*i).as_in_logic,(*i).partyline_channel);
17260 (*i).partyline_channel="";
17261 } else {
17262 string disp=lang_get_string(1,(*i).lang,205)+eol;
17263 int ec=0;
17264 dcc_send_msg((*i).socket,disp,ec);
17265 }
17266 }
17267 }
17268 if(!cmd.compare(".restart")) {
17269 got_cmd=true;
17270 if(param1.compare("") || param2.compare("")) {
17271 string disp=lang_get_string(1,(*i).lang,270)+eol;
17272 int ec=0;
17273 dcc_send_msg((*i).socket,disp,ec);
17274 } else {
17275 if((*i).access_to_restart) {
17276 dcc_killing_user_eol=eol;
17277 dcc_killing_user_socket=&((*i).socket);
17278
17279 char* tmp=new char[(*i).as_in_logic.length()+128];
17280 sprintf(tmp,"%s%s","RESTART by ",(*i).as_in_logic.c_str());
17281 log_bot(tmp);
17282
17283 logic_on_internal_event("@restart@",(*i).as_in_logic,"","","",PRIVATE_EVENT_SEVERITY_CODE_INFORMATIONAL,"","");
17284
17285 string disp=(string)tmp;
17286 disp+=eol;
17287 int ec=0;
17288 dcc_send_msg((*i).socket,disp,ec);
17289 delete[] tmp;
17290 tmp=NULL;
17291
17292 dcc_who_is_killing=(*i).as_in_logic;
17293 dcc_killing_user_lang=(*i).lang;
17294 dcc_want_to_restart=true;
17295
17296 log_free_locks();
17297
17298 logic_partyline_backup((*i).as_in_logic);
17299 } else {
17300 string disp=lang_get_string(1,(*i).lang,272)+eol;
17301 int ec=0;
17302 dcc_send_msg((*i).socket,disp,ec);
17303 }
17304 }
17305 }
17306 if(!cmd.compare(".die")) {
17307 got_cmd=true;
17308 if(param1.compare("") || param2.compare("")) {
17309 string disp=lang_get_string(1,(*i).lang,271)+eol;
17310 int ec=0;
17311 dcc_send_msg((*i).socket,disp,ec);
17312 } else {
17313 if((*i).access_to_die) {
17314 dcc_killing_user_eol=eol;
17315 dcc_killing_user_socket=&((*i).socket);
17316
17317 char* tmp=new char[(*i).as_in_logic.length()+128];
17318 sprintf(tmp,"%s%s","DIE by ",(*i).as_in_logic.c_str());
17319 log_bot(tmp);
17320
17321 logic_on_internal_event("@die@",(*i).as_in_logic,"","","",PRIVATE_EVENT_SEVERITY_CODE_INFORMATIONAL,"","");
17322
17323 string disp=(string)tmp;
17324 disp+=eol;
17325 int ec=0;
17326 dcc_send_msg((*i).socket,disp,ec);
17327 delete[] tmp;
17328 tmp=NULL;
17329
17330 dcc_who_is_killing=(*i).as_in_logic;
17331 dcc_killing_user_lang=(*i).lang;
17332 dcc_want_to_die=true;
17333
17334 logic_partyline_backup((*i).as_in_logic);
17335 } else {
17336 string disp=lang_get_string(1,(*i).lang,273)+eol;
17337 int ec=0;
17338 dcc_send_msg((*i).socket,disp,ec);
17339 }
17340 }
17341 }
17342 if(!cmd.compare(".help")) {
17343 got_cmd=true;
17344 if(param1.compare("") || param2.compare("")) {
17345 string disp=lang_get_string(1,(*i).lang,372)+eol;
17346 int ec=0;
17347 dcc_send_msg((*i).socket,disp,ec);
17348 } else {
17349 string disp;
17350 for(int ii=354; ii<=371; ii++)
17351 disp+=lang_get_string(1,(*i).lang,ii)+eol;
17352 disp+=lang_get_string(1,(*i).lang,396)+eol;
17353 disp+=lang_get_string(1,(*i).lang,410)+eol;
17354 disp+=lang_get_string(1,(*i).lang,418)+eol;
17355 disp+=lang_get_string(1,(*i).lang,454)+eol;
17356 disp+=lang_get_string(1,(*i).lang,453)+eol;
17357 disp+=lang_get_string(1,(*i).lang,535)+eol;
17358 disp+=lang_get_string(1,(*i).lang,566)+eol;
17359 disp+=lang_get_string(1,(*i).lang,571)+eol;
17360 disp+=lang_get_string(1,(*i).lang,579)+eol;
17361 disp+=lang_get_string(1,(*i).lang,615)+eol;
17362 disp+=lang_get_string(1,(*i).lang,636)+eol;
17363 disp+=lang_get_string(1,(*i).lang,643)+eol;
17364 disp+=lang_get_string(1,(*i).lang,645)+eol;
17365 disp+=lang_get_string(1,(*i).lang,679)+eol;
17366 int ec=0;
17367 dcc_send_msg((*i).socket,disp,ec);
17368 }
17369 }
17370 if(!cmd.compare(".showbots")) {
17371 got_cmd=true;
17372 if(param1.compare("") || param2.compare("")) {
17373 string disp=lang_get_string(1,(*i).lang,644)+eol;
17374 int ec=0;
17375 dcc_send_msg((*i).socket,disp,ec);
17376 } else {
17377 string disp=botnet_showbots((*i).lang,eol);
17378 int ec=0;
17379 dcc_send_msg((*i).socket,disp,ec);
17380 }
17381 }
17382 if(!cmd.compare(".broadcastping")) {
17383 got_cmd=true;
17384 if(param1.compare("") || param2.compare("")) {
17385 string disp=lang_get_string(1,(*i).lang,646)+eol;
17386 int ec=0;
17387 dcc_send_msg((*i).socket,disp,ec);
17388 } else {
17389 time_t now;
17390 time(&now);
17391
17392 string c="\x01" "BROADCAST_PING\x01 ";
17393 char tmp[128];
17394 c+=ltoa((long)now,tmp,10);
17395 c+=" ";
17396 c+=(*i).as_in_logic;
17397
17398
17399 vector<s_flood_history>::iterator i4;
17400 l_flood:
17401 for(i4=(*i).msg_flood_hist.begin(); i4!=(*i).msg_flood_hist.end(); i4++)
17402 if(now-(*i4).time>(*i).partyline_msg_flood.seconds) {
17403 (*i).msg_flood_hist.erase(i4);
17404 goto l_flood;
17405 }
17406
17407 s_flood_history entry;
17408 entry.time=now;
17409 entry.bytes=c.length();
17410 entry.msg=c;
17411
17412 (*i).msg_flood_hist.push_back(entry);
17413 unsigned int entries=0;
17414 for(i4=(*i).msg_flood_hist.begin(); i4!=(*i).msg_flood_hist.end(); i4++)
17415 entries++;
17416 if((*i).partyline_msg_flood.lines!=0 && entries>=(*i).partyline_msg_flood.lines) {
17417 char tmp[64];
17418 ltoa((long)(*i).partyline_msg_flood.seconds,tmp,10);
17419 string disp=lang_subst(lang_get_string(1,(*i).lang,207),tmp)+eol;
17420 int ec=0;
17421 dcc_send_msg((*i).socket,disp,ec);
17422 } else {
17423 string disp=lang_get_string(1,(*i).lang,647);
17424 disp+=" ";
17425 disp+=ctime(&now);
17426 if(disp.length() && disp[disp.length()-1]=='\n')
17427 disp.erase(disp.length()-1,1);
17428 if(disp.length() && disp[disp.length()-1]=='\r')
17429 disp.erase(disp.length()-1,1);
17430 if(disp.length() && disp[disp.length()-1]=='\n')
17431 disp.erase(disp.length()-1,1);
17432 if(disp.length() && disp[disp.length()-1]=='\r')
17433 disp.erase(disp.length()-1,1);
17434 disp+=eol;
17435 int ec=0;
17436 dcc_send_msg((*i).socket,disp,ec);
17437 botnet_partyline_message((*i).as_in_logic,"",c);
17438 }
17439 }
17440 }
17441 if(!cmd.compare(".execute")) {
17442 got_cmd=true;
17443 if(param1.empty() || c.find(" ",0)==string::npos) {
17444 string disp=lang_get_string(1,(*i).lang,653)+eol;
17445 int ec=0;
17446 dcc_send_msg((*i).socket,disp,ec);
17447 } else {
17448 string proc=c;
17449 proc.erase(0,proc.find(" ",0)+1);
17450 if(dcc_can_unassign(i,eol,proc)) {
17451 map<string,string> vars;
17452 logic_execute(proc,vars);
17453 } else {
17454 string disp=lang_get_string(1,(*i).lang,654)+eol;
17455 int ec=0;
17456 dcc_send_msg((*i).socket,disp,ec);
17457 }
17458 }
17459 }
17460 if(!cmd.compare(".replication")) {
17461 got_cmd=true;
17462 if(param1.compare("") || param2.compare("")) {
17463 string disp=lang_get_string(1,(*i).lang,419)+eol;
17464 int ec=0;
17465 dcc_send_msg((*i).socket,disp,ec);
17466 } else {
17467 if((*i).access_to_replication) {
17468 (*i).replication=1;
17469 } else {
17470 string disp=lang_get_string(1,(*i).lang,420)+eol;
17471 int ec=0;
17472 dcc_send_msg((*i).socket,disp,ec);
17473 }
17474 }
17475 }
17476 if(!cmd.compare(".chpass")) {
17477 got_cmd=true;
17478 if(!param1.compare("") || !param2.compare("")) {
17479 string disp=lang_get_string(1,(*i).lang,637)+eol;
17480 int ec=0;
17481 dcc_send_msg((*i).socket,disp,ec);
17482 } else {
17483 unsigned char signature[16];
17484
17485 MD5Context md5c;
17486 MD5Init(&md5c);
17487 MD5Update(&md5c,(unsigned char *)param2.c_str(),(unsigned int)param2.length());
17488 MD5Final(signature,&md5c);
17489
17490 char sig[128];
17491 sig[0]=0;
17492 for(int i1=0; i1<16; i1++) {
17493 char tmp[16];
17494 sprintf(tmp,"%02X",signature[i1]);
17495 strcat(sig,tmp);
17496 }
17497
17498 bool got=false;
17499 if((*i).as_in_logic.compare(param1)) {
17500 vector<string>::iterator i1;
17501 for(i1=(*i).access_to_users.begin(); i1!=(*i).access_to_users.end(); i1++) {
17502 if(!(*i1).compare(param1)) {
17503 got=true;
17504 if(dcc_want_to_upgrade) {
17505 string disp=lang_get_string(1,(*i).lang,642)+eol;
17506 int ec=0;
17507 dcc_send_msg((*i).socket,disp,ec);
17508 } else
17509 dcc_set_password(param1,sig);
17510 break;
17511 }
17512 }
17513 } else {
17514 got=true;
17515 if(dcc_want_to_upgrade) {
17516 string disp=lang_get_string(1,(*i).lang,642)+eol;
17517 int ec=0;
17518 dcc_send_msg((*i).socket,disp,ec);
17519 } else
17520 dcc_set_password(param1,sig);
17521 }
17522 if(!got) {
17523 string disp=lang_get_string(1,(*i).lang,638)+eol;
17524 int ec=0;
17525 dcc_send_msg((*i).socket,disp,ec);
17526 } else {
17527 string disp=lang_get_string(1,(*i).lang,639)+eol;
17528 int ec=0;
17529 dcc_send_msg((*i).socket,disp,ec);
17530 }
17531 }
17532 }
17533 if(!cmd.compare(".terminator")) {
17534 got_cmd=true;
17535 if(param1.compare("") || param2.compare("")) {
17536 string disp=lang_get_string(1,(*i).lang,455)+eol;
17537 int ec=0;
17538 dcc_send_msg((*i).socket,disp,ec);
17539 } else {
17540 (*i).terminator=1;
17541 }
17542 }
17543 if(!cmd.compare(".+group")) {
17544 got_cmd=true;
17545 if(!param1.compare("") || param2.compare("")) {
17546 string disp=lang_get_string(1,(*i).lang,397)+eol;
17547 int ec=0;
17548 dcc_send_msg((*i).socket,disp,ec);
17549 } else {
17550 vector<s_group>::iterator i1;
17551 bool got=false;
17552 map<string,string> vars;
17553 for(i1=r_all_groups.begin(); i1!=r_all_groups.end(); i1++) {
17554 if(!logic_eval((*i1).name,vars).compare(param1)) {
17555 got=true;
17556 string disp=lang_get_string(1,(*i).lang,398)+eol;
17557 int ec=0;
17558 dcc_send_msg((*i).socket,disp,ec);
17559 break;
17560 }
17561 }
17562 if(!got) {
17563 s_group g;
17564 g.name=param1;
17565 g.name="\""+g.name+"\"";
17566 r_all_groups.push_back(g);
17567 string disp=lang_get_string(1,(*i).lang,399)+eol;
17568 int ec=0;
17569 dcc_send_msg((*i).socket,disp,ec);
17570 }
17571 }
17572 }
17573 if(!cmd.compare(".private")) {
17574 got_cmd=true;
17575 if(param1.compare("") || param2.compare("")) {
17576 string disp=lang_get_string(1,(*i).lang,411)+eol;
17577 int ec=0;
17578 dcc_send_msg((*i).socket,disp,ec);
17579 } else {
17580 if(!(*i).access_to_private) {
17581 string disp=lang_get_string(1,(*i).lang,412)+eol;
17582 int ec=0;
17583 dcc_send_msg((*i).socket,disp,ec);
17584 } else {
17585 (*i).private_edit=1;
17586 }
17587 }
17588 }
17589 if(!cmd.compare(".lang")) {
17590 got_cmd=true;
17591 if(param1.compare("") || param2.compare("")) {
17592 string disp=lang_get_string(1,(*i).lang,450)+eol;
17593 int ec=0;
17594 dcc_send_msg((*i).socket,disp,ec);
17595 } else {
17596 (*i).language=1;
17597 }
17598 }
17599 if(!cmd.compare(".stat")) {
17600 got_cmd=true;
17601 if(param1.compare("") || param2.compare("")) {
17602 string disp=lang_get_string(1,(*i).lang,534)+eol;
17603 int ec=0;
17604 dcc_send_msg((*i).socket,disp,ec);
17605 } else {
17606 list<string> lines;
17607 stats_display(lines,(*i).lang);
17608 list<string>::iterator i1;
17609 string disp;
17610 for(i1=lines.begin(); i1!=lines.end(); i1++) {
17611 disp+=*i1;
17612 disp+=eol;
17613 }
17614 disp+=eol;
17615 vector<s_online_channel>::iterator i2;
17616 for(i2=irc_channels.begin(); i2!=irc_channels.end(); i2++) {
17617 disp+=lang_subst(lang_subst(lang_get_string(1,(*i).lang,539),irc_get_mode((*i2).name,irc_nick)),(*i2).name)+eol;
17618 vector<s_online_user>::iterator i3;
17619 for(i3=(*i2).users.begin(); i3!=(*i2).users.end(); i3++) {
17620 disp+=" ";
17621 disp+=lang_subst(lang_get_string(1,(*i).lang,540),(*i3).mode);
17622 disp+=(*i3).nick;
17623 disp+=" = ";
17624 if((*i3).got_whois)
17625 disp+=(*i3).in_logic_as;
17626 else
17627 disp+=lang_get_string(1,(*i).lang,557);
17628 disp+=eol;
17629
17630
17631 s_user u;
17632 vector<s_channel> chs;
17633 logic_partyline_get_user((*i3).in_logic_as,u,chs);
17634 vector<s_channel>::iterator i4;
17635 for(i4=chs.begin(); i4!=chs.end(); i4++)
17636 if(!cmp_strings_case_insensitive((*i4).channel_name,(*i2).name)) {
17637 if(!(*i4).dynamic_plus_modes.empty()) {
17638 disp+=" ";
17639 disp+=lang_get_string(1,(*i).lang,550);
17640 disp+=(*i4).dynamic_plus_modes;
17641 disp+=eol;
17642 }
17643 if(!(*i4).dynamic_minus_modes.empty()) {
17644 disp+=" ";
17645 disp+=lang_get_string(1,(*i).lang,551);
17646 disp+=(*i4).dynamic_minus_modes;
17647 disp+=eol;
17648 }
17649 break;
17650 }
17651 }
17652 }
17653 int ec=0;
17654 dcc_send_msg((*i).socket,disp,ec);
17655 }
17656 }
17657 if(!cmd.compare(".part")) {
17658 got_cmd=true;
17659 if(!param1.compare("")) {
17660 string disp=lang_get_string(1,(*i).lang,567)+eol;
17661 int ec=0;
17662 dcc_send_msg((*i).socket,disp,ec);
17663 } else {
17664 vector<string>::iterator i1;
17665 bool got=false;
17666 for(i1=(*i).access_to_channel.begin(); i1!=(*i).access_to_channel.end(); i1++)
17667 if(!cmp_strings_case_insensitive(param1,*i1)) {
17668 got=true;
17669 break;
17670 }
17671 if(!got) {
17672 string disp=lang_get_string(1,(*i).lang,568)+eol;
17673 int ec=0;
17674 dcc_send_msg((*i).socket,disp,ec);
17675 } else {
17676 got=false;
17677 vector<s_online_channel>::iterator i1;
17678 for(i1=irc_channels.begin(); i1!=irc_channels.end(); i1++)
17679 if(!cmp_strings_case_insensitive(param1,(*i1).name)) {
17680 got=true;
17681 irc_channels.erase(i1);
17682 string reason=param2;
17683 if(reason.compare(""))
17684 reason+=(string)" - ";
17685 reason+=(*i).as_in_logic;
17686 irc_part(param1.c_str(),reason.c_str());
17687 break;
17688 }
17689 string disp;
17690 if(!got) {
17691 disp=lang_get_string(1,(*i).lang,569)+eol;
17692 } else {
17693 disp=lang_get_string(1,(*i).lang,570)+eol;
17694 }
17695 int ec=0;
17696 dcc_send_msg((*i).socket,disp,ec);
17697 }
17698 }
17699 }
17700 if(!cmd.compare(".join")) {
17701 got_cmd=true;
17702 if(!param1.compare("")) {
17703 string disp=lang_get_string(1,(*i).lang,572)+eol;
17704 int ec=0;
17705 dcc_send_msg((*i).socket,disp,ec);
17706 } else {
17707 vector<string>::iterator i1;
17708 bool got=false;
17709 for(i1=(*i).access_to_channel.begin(); i1!=(*i).access_to_channel.end(); i1++)
17710 if(!cmp_strings_case_insensitive(param1,*i1)) {
17711 got=true;
17712 break;
17713 }
17714 if(!got) {
17715 string disp=lang_get_string(1,(*i).lang,568)+eol;
17716 int ec=0;
17717 dcc_send_msg((*i).socket,disp,ec);
17718 } else {
17719 got=false;
17720 vector<s_online_channel>::iterator i1;
17721 for(i1=irc_channels.begin(); i1!=irc_channels.end(); i1++)
17722 if(!cmp_strings_case_insensitive(param1,(*i1).name)) {
17723 got=true;
17724 break;
17725 }
17726 string disp;
17727 if(!got) {
17728 irc_join(param1.c_str(),param2.c_str());
17729 disp=lang_get_string(1,(*i).lang,574)+eol;
17730 } else {
17731 disp=lang_get_string(1,(*i).lang,573)+eol;
17732 }
17733 int ec=0;
17734 dcc_send_msg((*i).socket,disp,ec);
17735 }
17736 }
17737 }
17738 if(!cmd.compare(".dynbans")) {
17739 got_cmd=true;
17740 if(!param1.compare("") || !param2.empty()) {
17741 string disp=lang_get_string(1,(*i).lang,580)+eol;
17742 int ec=0;
17743 dcc_send_msg((*i).socket,disp,ec);
17744 } else {
17745 (*i).dynbans_channel=param1;
17746 (*i).dynbans=1;
17747
17748 }
17749 }
17750 if(!got_cmd && c.length()>0 && (c[0]=='.' || !(*i).partyline_channel.compare(""))) {
17751 string disp=lang_get_string(1,(*i).lang,449)+eol;
17752 int ec=0;
17753 dcc_send_msg((*i).socket,disp,ec);
17754 }
17755 if(c.length()>0 && c[0]!='.' && (*i).partyline_channel.compare("") && (*i).new_user==0 && (*i).edit_user==0 && (*i).edit_proc==0 && ((*i).chat || (*i).telnet) && !(*i).replication_partner && (*i).got_passwd==3) {
17756 time_t now;
17757 time(&now);
17758
17759 vector<s_flood_history>::iterator i4;
17760 l_flood2:
17761 for(i4=(*i).msg_flood_hist.begin(); i4!=(*i).msg_flood_hist.end(); i4++)
17762 if(now-(*i4).time>(*i).partyline_msg_flood.seconds) {
17763 (*i).msg_flood_hist.erase(i4);
17764 goto l_flood2;
17765 }
17766
17767 s_flood_history entry;
17768 entry.time=now;
17769 entry.bytes=c.length();
17770 entry.msg=c;
17771
17772 (*i).msg_flood_hist.push_back(entry);
17773 unsigned int entries=0;
17774 for(i4=(*i).msg_flood_hist.begin(); i4!=(*i).msg_flood_hist.end(); i4++)
17775 entries++;
17776 if((*i).partyline_msg_flood.lines!=0 && entries>=(*i).partyline_msg_flood.lines) {
17777 char tmp[64];
17778 ltoa((long)(*i).partyline_msg_flood.seconds,tmp,10);
17779 string disp=lang_subst(lang_get_string(1,(*i).lang,207),tmp)+eol;
17780 int ec=0;
17781 dcc_send_msg((*i).socket,disp,ec);
17782 } else {
17783
17784 if(c.length() && c[0]<0x20)
17785 c=(string)" "+c;
17786
17787 if(!c.empty())
17788 botnet_partyline_message((*i).as_in_logic,(*i).partyline_channel,c);
17789 }
17790 }
17791 }
17792 if((*i).send) {
17793 int ec=0;
17794 char buff[1024*10];
17795 bool closed=false;
17796 size_t len=0;
17797 if((*i).dcc_send.f || (*i).dcc_send.is_file_server_proto) {
17798 len=sock_read((*i).socket,buff,sizeof(buff),ec,closed);
17799 stats_dcc_send_bytes_received(len);
17800 }
17801
17802 bool timeout=false;
17803 if((*i).dcc_send.last_packet==0)
17804 time(&(*i).dcc_send.last_packet);
17805 if((*i).dcc_send.last_packet+atol(conf_getvar("dcc_send_timeout").c_str())<time(NULL))
17806 timeout=true;
17807 if(closed || ec || timeout) {
17808 sock_close((*i).socket);
17809 dcc_clients.erase(i);
17810 goto again;
17811 }
17812
17813 if((*i).dcc_send.is_file_server_proto && len>0) {
17814 (*i).dcc_send.is_file_server_proto=false;
17815
17816 string msg;
17817 size_t i1;
17818 for(i1=0; i1<sizeof(buff) && i1<len && buff[i1]!=0 && buff[i1]!='\n' && buff[i1]!='\r'; i1++)
17819 msg+=buff[i1];
17820 string code, nick, size, name;
17821 int pos=0;
17822 for(i1=0; i1<msg.length(); i1++) {
17823 if(msg[i1]==0x20 && pos!=3) {
17824 pos++;
17825 continue;
17826 }
17827 if(pos==0)
17828 code+=msg[i1];
17829 if(pos==1)
17830 nick+=msg[i1];
17831 if(pos==2)
17832 size+=msg[i1];
17833 if(pos==3)
17834 name+=msg[i1];
17835 }
17836 string user_name=logic_find_user(nick,irc_get_ident(nick),irc_get_host(nick),irc_get_fullname(nick),irc_is_ircop(nick));
17837 if(code.compare("120") || !logic_access_to_filesystem(user_name)) {
17838 sock_close((*i).socket);
17839 dcc_clients.erase(i);
17840 goto again;
17841 }
17842 (*i).dcc_send.original_name=name;
17843 (*i).dcc_send.size=atol(size.c_str());
17844 if(filesys_check_add_file_raw(name,user_name)!=0) {
17845 sock_close((*i).socket);
17846 dcc_clients.erase(i);
17847 goto again;
17848 }
17849 string resp="121 ";
17850 resp+=irc_nick;
17851 resp+=" 0\n";
17852 int ec=0;
17853 dcc_send_msg((*i).socket,resp,ec);
17854 continue;
17855 }
17856 if((*i).dcc_send.is_file_server_proto && len==0)
17857 continue;
17858 if(closed || ec || timeout || ((*i).dcc_send.received+(*i).resume_pos)==(*i).dcc_send.size) {
17859 sock_close((*i).socket);
17860 if(ec)
17861 log_socket(ec,sock_error(ec),"while calling sock_read in file " __FILE__ " in function " __FUNC__);
17862
17863 if((*i).dcc_send.f!=NULL) {
17864 fclose((*i).dcc_send.f);
17865 (*i).dcc_send.f=NULL;
17866
17867 if(((*i).dcc_send.received+(*i).resume_pos)!=(*i).dcc_send.size) {
17868 string fn=(*i).dcc_send.tmp_file_name;
17869 while(fn.find("/",0)!=string::npos)
17870 fn.erase(0,fn.find("/",0)+1);
17871 while(fn.find("\\",0)!=string::npos)
17872 fn.erase(0,fn.find("\\",0)+1);
17873
17874 filesys_add_file_raw(fn,(*i).dcc_send.original_name,(*i).as_in_logic,false,(*i).resume_pos!=0);
17875 logic_filesys_got_new((*i).as_in_logic,(*i).nick,(*i).ident,(*i).host,fn);
17876 } else {
17877 string fn=(*i).dcc_send.tmp_file_name;
17878 while(fn.find("/",0)!=string::npos)
17879 fn.erase(0,fn.find("/",0)+1);
17880 while(fn.find("\\",0)!=string::npos)
17881 fn.erase(0,fn.find("\\",0)+1);
17882
17883 filesys_add_file_raw(fn,(*i).dcc_send.original_name,(*i).as_in_logic,true,(*i).resume_pos!=0);
17884 logic_filesys_got_new((*i).as_in_logic,(*i).nick,(*i).ident,(*i).host,fn);
17885 }
17886 }
17887
17888 dcc_clients.erase(i);
17889 goto again;
17890 }
17891 (*i).dcc_send.received+=len;
17892 if((*i).dcc_send.f==NULL && (*i).resume_pos==0) {
17893 char fn[1024];
17894 time_t now=time(NULL);
17895 sprintf(fn,"%s",ctime(&now));
17896 for(unsigned int i1=0; i1<strlen(fn); i1++) {
17897 bool ok=false;
17898 if(fn[i1]>='a' && fn[i1]<='z')
17899 ok=true;
17900 if(fn[i1]>='A' && fn[i1]<='Z')
17901 ok=true;
17902 if(fn[i1]>='0' && fn[i1]<='9')
17903 ok=true;
17904 if(!ok)
17905 fn[i1]='_';
17906 }
17907 string new_fn="." FILE_SLASH "filesystem" FILE_SLASH;
17908 new_fn+=fn;
17909 new_fn+="_";
17910 new_fn+=(*i).as_in_logic;
17911 new_fn+=".dat";
17912 strcpy((*i).dcc_send.tmp_file_name,new_fn.c_str());
17913 (*i).dcc_send.f=fopen((*i).dcc_send.tmp_file_name,"wb");
17914 if(!(*i).dcc_send.f) {
17915 sock_close((*i).socket);
17916 dcc_clients.erase(i);
17917 goto again;
17918 }
17919 } else
17920 if((*i).dcc_send.f==NULL && (*i).resume_pos!=0) {
17921 string internal;
17922 filesys_dcc_get_resume_info((*i).as_in_logic,(*i).dcc_send.original_name,internal);
17923 if(internal.empty()) {
17924
17925 string err="Internal error while trying to DCC RESUME (receive file): function filesys_dcc_get_resume_info() returned an emty string as internal name of file. Closing DCC SEND connection. in file " __FILE__ " in function " __FUNC__;
17926 log_debug(err.c_str());
17927 sock_close((*i).socket);
17928 dcc_clients.erase(i);
17929 goto again;
17930 }
17931 string new_fn="." FILE_SLASH "filesystem" FILE_SLASH;
17932 new_fn+=internal;
17933 strcpy((*i).dcc_send.tmp_file_name,new_fn.c_str());
17934 (*i).dcc_send.f=fopen((*i).dcc_send.tmp_file_name,"ab");
17935 if(!(*i).dcc_send.f) {
17936 sock_close((*i).socket);
17937 dcc_clients.erase(i);
17938 goto again;
17939 }
17940 fseek((*i).dcc_send.f,(long)(*i).resume_pos,SEEK_SET);
17941 } else {
17942 time_t now=time(NULL);
17943 if(len)
17944 (*i).dcc_send.last_packet=now;
17945 if(len)
17946 (*i).dcc_send.response_sent=false;
17947 size_t in_queue=sock_get_receive_size((*i).socket);
17948 if((in_queue==0 && len==0 && (*i).dcc_send.received%512==0 && !(*i).dcc_send.response_sent) || ((*i).dcc_send.received+(*i).resume_pos)==(*i).dcc_send.size) {
17949 (*i).dcc_send.response_sent=true;
17950 size_t s=(*i).dcc_send.received+(*i).resume_pos;
17951
17952 char tmp[4];
17953 memcpy(tmp,&s,4);
17954
17955 #if !defined(HIGHFIRST)
17956
17957 char x;
17958
17959 x=tmp[0];
17960 tmp[0]=tmp[3];
17961 tmp[3]=x;
17962
17963 x=tmp[1];
17964 tmp[1]=tmp[2];
17965 tmp[2]=x;
17966 #endif
17967 size_t sent=sock_send((*i).socket,tmp,4,ec);
17968 stats_dcc_send_bytes_sent(sent);
17969 }
17970 if(((*i).dcc_send.received+(*i).resume_pos)==(*i).dcc_send.size) {
17971 if(len)
17972 fwrite(buff,1,len,(*i).dcc_send.f);
17973
17974 fclose((*i).dcc_send.f);
17975 (*i).dcc_send.f=NULL;
17976
17977 string fn=(*i).dcc_send.tmp_file_name;
17978 while(fn.find("/",0)!=string::npos)
17979 fn.erase(0,fn.find("/",0)+1);
17980 while(fn.find("\\",0)!=string::npos)
17981 fn.erase(0,fn.find("\\",0)+1);
17982
17983 filesys_add_file_raw(fn,(*i).dcc_send.original_name,(*i).as_in_logic,true,(*i).resume_pos!=0);
17984 logic_filesys_got_new((*i).as_in_logic,(*i).nick,(*i).ident,(*i).host,fn);
17985
17986 sock_close((*i).socket);
17987 dcc_clients.erase(i);
17988 goto again;
17989 }
17990 }
17991 if(len)
17992 fwrite(buff,1,len,(*i).dcc_send.f);
17993 }
17994
17995 if((*i).send_from_filesystem) {
17996 if((*i).dcc_send.f==NULL) {
17997 (*i).dcc_send.f=fopen((*i).send_file.file_name.c_str(),"rb");
17998 if((*i).dcc_send.f==NULL) {
17999 string str="in file " __FILE__ " in function " __FUNC__ " occurred error: ";
18000 str+="cannot open filesystem file to send. Filename: ";
18001 str+=(*i).send_file.file_name;
18002 log_debug(str.c_str());
18003
18004 sock_close((*i).socket);
18005 dcc_clients.erase(i);
18006 goto again;
18007 }
18008 if((*i).resume_pos!=0) {
18009 fseek((*i).dcc_send.f,(long)(*i).resume_pos,SEEK_SET);
18010 (*i).dcc_send.response_sent=true;
18011 }
18012 }
18013
18014 send_next:
18015 if((*i).dcc_send.response_sent || ftell((*i).dcc_send.f)==0) {
18016 (*i).dcc_send.response_sent=false;
18017 int ec=0;
18018 char buff[1024];
18019 size_t len=fread(buff,1,1024,(*i).dcc_send.f);
18020 size_t sent=sock_send((*i).socket,buff,len,ec);
18021 stats_dcc_send_bytes_sent(sent);
18022 (*i).dcc_send.received+=len;
18023 if(len)
18024 time(&(*i).dcc_send.last_packet);
18025 if(ec) {
18026 sock_close((*i).socket);
18027 log_socket(ec,sock_error(ec),"while calling sock_send in file " __FILE__ " in function " __FUNC__);
18028 if((*i).dcc_send.f)
18029 fclose((*i).dcc_send.f);
18030 (*i).dcc_send.f=NULL;
18031 dcc_clients.erase(i);
18032 goto again;
18033 }
18034 } else {
18035 int ec=0;
18036 char tmp[4];
18037 bool closed=false;
18038 size_t len=sock_read((*i).socket,tmp,sizeof(tmp),ec,closed);
18039 if(len) {
18040 time(&(*i).dcc_send.last_packet);
18041 stats_dcc_send_bytes_received(len);
18042 }
18043 if(ec || closed) {
18044 sock_close((*i).socket);
18045 log_socket(ec,sock_error(ec),"while calling sock_read in file " __FILE__ " in function " __FUNC__);
18046 if((*i).dcc_send.f)
18047 fclose((*i).dcc_send.f);
18048 (*i).dcc_send.f=NULL;
18049 dcc_clients.erase(i);
18050 goto again;
18051 }
18052 if(len==4) {
18053 #if !defined(HIGHFIRST)
18054
18055 char x;
18056
18057 x=tmp[0];
18058 tmp[0]=tmp[3];
18059 tmp[3]=x;
18060
18061 x=tmp[1];
18062 tmp[1]=tmp[2];
18063 tmp[2]=x;
18064 #endif
18065
18066 unsigned int pos;
18067 memcpy(&pos,tmp,4);
18068
18069 if(pos!=ftell((*i).dcc_send.f)) {
18070 sock_close((*i).socket);
18071 if((*i).dcc_send.f)
18072 fclose((*i).dcc_send.f);
18073 (*i).dcc_send.f=NULL;
18074 dcc_clients.erase(i);
18075 goto again;
18076 }
18077
18078 if(pos==(*i).send_file.size) {
18079 filesys_set_file_was_read((*i).as_in_logic,(*i).send_file.public_name);
18080 sock_close((*i).socket);
18081 if((*i).dcc_send.f)
18082 fclose((*i).dcc_send.f);
18083 (*i).dcc_send.f=NULL;
18084 dcc_clients.erase(i);
18085 goto again;
18086 }
18087
18088 (*i).dcc_send.response_sent=true;
18089 goto send_next;
18090 }
18091 }
18092 if((*i).dcc_send.last_packet==0)
18093 time(&(*i).dcc_send.last_packet);
18094 if((*i).dcc_send.last_packet+atol(conf_getvar("dcc_send_timeout").c_str())<time(NULL)) {
18095
18096 if((*i).dcc_send.f!=NULL)
18097 fclose((*i).dcc_send.f);
18098 filesys_set_file_was_read((*i).as_in_logic,(*i).send_file.public_name);
18099 sock_close((*i).socket);
18100 if((*i).dcc_send.f)
18101 fclose((*i).dcc_send.f);
18102 (*i).dcc_send.f=NULL;
18103 dcc_clients.erase(i);
18104 goto again;
18105 }
18106 }
18107 }
18108
18109 vector<s_dcc_server>::iterator i2;
18110 for(i2=dcc_servers.begin(); i2!=dcc_servers.end(); i2++) {
18111 if((*i2).socket.cmp()) {
18112 s_socket s;
18113 if(!(*i2).using_ipv6)
18114 s=sock_accept((*i2).socket);
18115 else
18116 s=sock_accept6((*i2).socket);
18117 if(s.cmp()) {
18118 if(!(*i2).server_type.compare("chat"))
18119 stats_dcc_chat_new_connection();
18120 if(!(*i2).server_type.compare("send"))
18121 stats_dcc_send_new_connection();
18122 if((*i2).server_type.empty())
18123 stats_dcc_chat_new_connection();
18124
18125 sock_async(s);
18126
18127 int ec=0;
18128 in_addr addr;
18129 #ifdef _WIN32
18130 addr.S_un.S_addr=(unsigned long)-1;
18131 #else
18132 addr.s_addr=(unsigned long)-1;
18133 #endif
18134 in_addr6_ addr6;
18135 memset(&addr6,0,sizeof(addr6));
18136 ec=0;
18137 if(!(*i2).using_ipv6)
18138 addr=sock_get_remote_addr(s,ec);
18139 else
18140 inet_pton(AF_INET6,s.host,&addr6);
18141 if(!ec) {
18142 bool awaiting_send=false;
18143 {
18144 vector<s_dcc_send_file>::iterator i;
18145 for(i=dcc_awaiting_send.begin(); i!=dcc_awaiting_send.end(); i++) {
18146 if(!(*i).using_ipv6) {
18147 #ifdef _WIN32
18148 if(addr.S_un.S_un_b.s_b1==(*i).remote_ip.S_un.S_un_b.s_b1 && addr.S_un.S_un_b.s_b2==(*i).remote_ip.S_un.S_un_b.s_b2 && addr.S_un.S_un_b.s_b3==(*i).remote_ip.S_un.S_un_b.s_b3 && addr.S_un.S_un_b.s_b4==(*i).remote_ip.S_un.S_un_b.s_b4) {
18149 #else
18150 if(((char*)&addr.s_addr)[0]==((char*)&(*i).remote_ip.s_addr)[0] && ((char*)&addr.s_addr)[1]==((char*)&(*i).remote_ip.s_addr)[1] && ((char*)&addr.s_addr)[2]==((char*)&(*i).remote_ip.s_addr)[2] && ((char*)&addr.s_addr)[3]==((char*)&(*i).remote_ip.s_addr)[3]) {
18151 #endif
18152 awaiting_send=true;
18153 break;
18154 }
18155 } else {
18156 bool equal=true;
18157 for(unsigned i1=0; i1<sizeof((*i).remote_ip6); i1++) {
18158 if(((unsigned char*)&(*i).remote_ip6)[i1]!=((unsigned char*)&addr6)[i1]) {
18159 equal=false;
18160 break;
18161 }
18162 }
18163 if(equal) {
18164 awaiting_send=true;
18165 break;
18166 }
18167 }
18168 }
18169 }
18170
18171 bool got=false;
18172 if(!awaiting_send) {
18173 vector<s_dcc_awaiting_user>::iterator i;
18174 if(!(*i2).using_ipv6) {
18175 #ifdef _WIN32
18176 if(addr.S_un.S_un_b.s_b1==127 && addr.S_un.S_un_b.s_b2==0 && addr.S_un.S_un_b.s_b3==0 && addr.S_un.S_un_b.s_b4==1) {
18177 #else
18178 if(((char*)&addr.s_addr)[0]==127 && ((char*)&addr.s_addr)[1]==0 && ((char*)&addr.s_addr)[2]==0 && ((char*)&addr.s_addr)[3]==1) {
18179 #endif
18180 s_dcc_awaiting_user user;
18181
18182 user.nick="";
18183 user.ident="";
18184 user.host="127.0.0.1";
18185 user.fullname="";
18186
18187 user.using_ipv6=false;
18188 user.addr4=addr;
18189 time(&user.start_time);
18190 strcpy(user.user_name_as_in_logic,conf_getvar("127.0.0.1_dcc_user").c_str());
18191 dcc_awaiting_users.push_back(user);
18192 }
18193 } else {
18194 if(addr6.bytes[0]==0 && addr6.bytes[1]==0 && addr6.bytes[2]==0 && addr6.bytes[3]==0 &&
18195 addr6.bytes[4]==0 && addr6.bytes[5]==0 && addr6.bytes[6]==0 && addr6.bytes[7]==0 &&
18196 addr6.bytes[8]==0 && addr6.bytes[9]==0 && addr6.bytes[10]==0 && addr6.bytes[11]==0 &&
18197 addr6.bytes[12]==0 && addr6.bytes[13]==0 && addr6.bytes[14]==0 && addr6.bytes[15]==1) {
18198 s_dcc_awaiting_user user;
18199
18200 user.nick="";
18201 user.ident="";
18202 user.host="::1";
18203 user.fullname="";
18204
18205 user.using_ipv6=true;
18206 #ifdef _WIN32
18207 user.addr4.S_un.S_addr=(unsigned long)-1;
18208 #else
18209 user.addr4.s_addr=(unsigned long)-1;
18210 #endif
18211 memcpy(&user.addr6,&addr6,sizeof(user.addr6));
18212 time(&user.start_time);
18213 strcpy(user.user_name_as_in_logic,conf_getvar("127.0.0.1_dcc_user").c_str());
18214 dcc_awaiting_users.push_back(user);
18215 }
18216 }
18217 l1:
18218 for(i=dcc_awaiting_users.begin(); i!=dcc_awaiting_users.end(); i++) {
18219 time_t now;
18220 time(&now);
18221 if((*i).start_time+20<=now) {
18222 dcc_awaiting_users.erase(i);
18223 goto l1;
18224 }
18225 if(!(*i).using_ipv6 && !(*i2).using_ipv6) {
18226 #ifdef _WIN32
18227 if((*i).addr4.S_un.S_addr==addr.S_un.S_addr) {
18228 #else
18229 if((*i).addr4.s_addr==addr.s_addr) {
18230 #endif
18231 s_dcc_client c;
18232 c.server_socket=(*i2).socket;
18233
18234 char tmp[256];
18235 #ifdef _WIN32
18236 inet_ntop(AF_INET,&(addr.S_un.S_addr),tmp,sizeof(tmp)-1);
18237 #else
18238 inet_ntop(AF_INET,&(addr.s_addr),tmp,sizeof(tmp)-1);
18239 #endif
18240 c.remote=tmp;
18241
18242 c.nick=(*i).nick;
18243 c.ident=irc_get_ident((*i).nick);
18244 c.host=irc_get_host((*i).nick);
18245 c.fullname=irc_get_fullname((*i).nick);
18246
18247 c.chat=true;
18248 c.send=false;
18249 c.telnet=false;
18250 c.send_from_filesystem=false;
18251 c.socket=s;
18252 c.got_passwd=0;
18253 c.new_user=0;
18254 c.edit_user=0;
18255 c.filesystem=0;
18256 c.as_in_logic=(*i).user_name_as_in_logic;
18257 c.got_user_name=(c.as_in_logic.empty()?false:true);
18258 if(!(*i2).server_type.empty()) {
18259 if(!(*i2).server_type.compare("chat")) {
18260 string gr="101 ";
18261 gr+=irc_nick;
18262 gr+="\n";
18263 int ec=0;
18264 size_t sent=sock_send(c.socket,gr.c_str(),gr.length(),ec);
18265 stats_dcc_chat_bytes_sent(sent);
18266 }
18267 if(!(*i2).server_type.compare("send")) {
18268 c.dcc_send.is_file_server_proto=true;
18269 c.chat=false;
18270 c.send=true;
18271 }
18272 }
18273 dcc_clients.push_back(c);
18274 dcc_check_limit();
18275 got=true;
18276 dcc_awaiting_users.erase(i);
18277 goto l1;
18278 }
18279 } else if((*i).using_ipv6 && (*i2).using_ipv6) {
18280 if((*i).addr6.bytes[0]==addr6.bytes[0] && (*i).addr6.bytes[1]==addr6.bytes[1] &&
18281 (*i).addr6.bytes[2]==addr6.bytes[2] && (*i).addr6.bytes[3]==addr6.bytes[3] &&
18282 (*i).addr6.bytes[4]==addr6.bytes[4] && (*i).addr6.bytes[5]==addr6.bytes[5] &&
18283 (*i).addr6.bytes[6]==addr6.bytes[6] && (*i).addr6.bytes[7]==addr6.bytes[7] &&
18284 (*i).addr6.bytes[8]==addr6.bytes[8] && (*i).addr6.bytes[9]==addr6.bytes[9] &&
18285 (*i).addr6.bytes[10]==addr6.bytes[10] &&(*i).addr6.bytes[11]==addr6.bytes[11] &&
18286 (*i).addr6.bytes[12]==addr6.bytes[12] &&(*i).addr6.bytes[13]==addr6.bytes[13] &&
18287 (*i).addr6.bytes[14]==addr6.bytes[14] &&(*i).addr6.bytes[15]==addr6.bytes[15]) {
18288 s_dcc_client c;
18289 c.server_socket=(*i2).socket;
18290
18291 char tmp[256];
18292 inet_ntop(AF_INET6,&addr6,tmp,sizeof(tmp)-1);
18293 c.remote=tmp;
18294
18295 c.chat=true;
18296 c.send=false;
18297 c.telnet=false;
18298 c.send_from_filesystem=false;
18299 c.socket=s;
18300 c.got_passwd=0;
18301 c.new_user=0;
18302 c.edit_user=0;
18303 c.filesystem=0;
18304 c.as_in_logic=(*i).user_name_as_in_logic;
18305 c.got_user_name=(c.as_in_logic.empty()?false:true);
18306 if(!(*i2).server_type.empty()) {
18307 if(!(*i2).server_type.compare("chat")) {
18308 string gr="101 ";
18309 gr+=irc_nick;
18310 gr+="\n";
18311 int ec=0;
18312 size_t sent=sock_send(c.socket,gr.c_str(),gr.length(),ec);
18313 stats_dcc_chat_bytes_sent(sent);
18314 }
18315 if(!(*i2).server_type.compare("send")) {
18316 c.dcc_send.is_file_server_proto=true;
18317 c.chat=false;
18318 c.send=true;
18319 }
18320 }
18321 dcc_clients.push_back(c);
18322 dcc_check_limit();
18323 got=true;
18324 dcc_awaiting_users.erase(i);
18325 goto l1;
18326 }
18327 }
18328 }
18329 } else {
18330 got=false;
18331 }
18332 if(!got) {
18333 vector<s_dcc_send_file>::iterator i;
18334 got=false;
18335 l2:
18336 for(i=dcc_awaiting_send.begin(); i!=dcc_awaiting_send.end(); i++) {
18337 time_t now;
18338 time(&now);
18339 if((*i).start_time+20<=now) {
18340 dcc_awaiting_send.erase(i);
18341 goto l2;
18342 }
18343 if(!(*i).using_ipv6 && !(*i2).using_ipv6) {
18344 #ifdef _WIN32
18345 if((*i).remote_ip.S_un.S_addr==addr.S_un.S_addr) {
18346 #else
18347 if((*i).remote_ip.s_addr==addr.s_addr) {
18348 #endif
18349 s_dcc_client c;
18350 c.server_socket=(*i2).socket;
18351
18352 char tmp[256];
18353 #ifdef _WIN32
18354 inet_ntop(AF_INET,&(addr.S_un.S_addr),tmp,sizeof(tmp)-1);
18355 #else
18356 inet_ntop(AF_INET,&(addr.s_addr),tmp,sizeof(tmp)-1);
18357 #endif
18358 c.remote=tmp;
18359
18360 c.chat=false;
18361 c.send=false;
18362 c.telnet=false;
18363 c.send_file=*i;
18364 c.send_from_filesystem=true;
18365 c.socket=s;
18366 c.got_passwd=0;
18367 c.new_user=0;
18368 c.edit_user=0;
18369 c.filesystem=0;
18370 c.as_in_logic=(*i).user_name_as_in_logic;
18371 c.got_user_name=(c.as_in_logic.empty()?false:true);
18372 c.resume_pos=(*i).resume_pos;
18373 dcc_clients.push_back(c);
18374 dcc_check_limit();
18375 got=true;
18376 dcc_awaiting_send.erase(i);
18377 goto l2;
18378 }
18379 } else if((*i).using_ipv6 && (*i2).using_ipv6) {
18380 if((*i).remote_ip6.bytes[0]==addr6.bytes[0] && (*i).remote_ip6.bytes[1]==addr6.bytes[1] &&
18381 (*i).remote_ip6.bytes[2]==addr6.bytes[2] && (*i).remote_ip6.bytes[3]==addr6.bytes[3] &&
18382 (*i).remote_ip6.bytes[4]==addr6.bytes[4] && (*i).remote_ip6.bytes[5]==addr6.bytes[5] &&
18383 (*i).remote_ip6.bytes[6]==addr6.bytes[6] && (*i).remote_ip6.bytes[7]==addr6.bytes[7] &&
18384 (*i).remote_ip6.bytes[8]==addr6.bytes[8] && (*i).remote_ip6.bytes[9]==addr6.bytes[9] &&
18385 (*i).remote_ip6.bytes[10]==addr6.bytes[10] &&(*i).remote_ip6.bytes[11]==addr6.bytes[11] &&
18386 (*i).remote_ip6.bytes[12]==addr6.bytes[12] &&(*i).remote_ip6.bytes[13]==addr6.bytes[13] &&
18387 (*i).remote_ip6.bytes[14]==addr6.bytes[14] &&(*i).remote_ip6.bytes[15]==addr6.bytes[15]) {
18388 s_dcc_client c;
18389 c.server_socket=(*i2).socket;
18390
18391 char tmp[256];
18392 inet_ntop(AF_INET6,&addr6,tmp,sizeof(tmp)-1);
18393 c.remote=tmp;
18394
18395 c.chat=false;
18396 c.send=false;
18397 c.telnet=false;
18398 c.send_file=*i;
18399 c.send_from_filesystem=true;
18400 c.socket=s;
18401 c.got_passwd=0;
18402 c.new_user=0;
18403 c.edit_user=0;
18404 c.filesystem=0;
18405 c.as_in_logic=(*i).user_name_as_in_logic;
18406 c.got_user_name=(c.as_in_logic.empty()?false:true);
18407 c.resume_pos=(*i).resume_pos;
18408 dcc_clients.push_back(c);
18409 dcc_check_limit();
18410 got=true;
18411 dcc_awaiting_send.erase(i);
18412 goto l2;
18413 }
18414 }
18415 }
18416 }
18417 if(!got)
18418 sock_close(s);
18419 }
18420 }
18421 }
18422 }
18423
18424 vector<s_telnet_server>::iterator i3;
18425 for(i3=telnet_servers.begin(); i3!=telnet_servers.end(); i3++) {
18426 if((*i3).socket.cmp()) {
18427 s_socket s;
18428 s.clear();
18429 if((*i3).telnet_addr!=-1)
18430 s=sock_accept((*i3).socket);
18431 else
18432 s=sock_accept6((*i3).socket);
18433 if(s.cmp()) {
18434 stats_dcc_chat_new_connection();
18435
18436 sock_async(s);
18437
18438 int ec=0;
18439
18440 s_dcc_client c;
18441 c.server_socket=(*i3).socket;
18442
18443 {
18444 int ec=0;
18445 in_addr addr;
18446 #ifdef _WIN32
18447 addr.S_un.S_addr=(unsigned long)-1;
18448 #else
18449 addr.s_addr=(unsigned long)-1;
18450 #endif
18451 in_addr6_ addr6;
18452 memset(&addr6,0,sizeof(addr6));
18453 ec=0;
18454 if((*i3).telnet_addr!=-1)
18455 addr=sock_get_remote_addr(s,ec);
18456 else
18457 inet_pton(AF_INET6,s.host,&addr6);
18458
18459 char tmp[256];
18460 #ifdef _WIN32
18461 inet_ntop(AF_INET,&(addr.S_un.S_addr),tmp,sizeof(tmp)-1);
18462 #else
18463 inet_ntop(AF_INET,&(addr.s_addr),tmp,sizeof(tmp)-1);
18464 #endif
18465 c.remote=tmp;
18466 }
18467
18468 c.chat=true;
18469 c.send=false;
18470 c.telnet=true;
18471 c.send_from_filesystem=false;
18472 c.socket=s;
18473 c.got_passwd=0;
18474 c.new_user=0;
18475 c.edit_user=0;
18476 c.filesystem=0;
18477 c.as_in_logic="";
18478 c.got_user_name=false;
18479 c.replication_partner=false;
18480
18481 c.lang="en";
18482 string disp=lang_get_string(1,c.lang,167)+"\r\n";
18483 size_t sent=sock_send(c.socket,disp.c_str(),disp.length(),ec);
18484 stats_dcc_chat_bytes_sent(sent);
18485
18486 dcc_clients.push_back(c);
18487 dcc_check_limit();
18488 }
18489 }
18490 }
18491 }
18492
18493
18494
18495
18496
18497
18498
18499
18500
18501 void dcc_partyline_message(string channel, string message)
18502 {
18503 vector<s_dcc_client>::iterator i;
18504 for(i=dcc_clients.begin(); i!=dcc_clients.end(); i++) {
18505 if(!(*i).replication_partner && ((*i).chat || (*i).telnet) && (*i).got_passwd==3 && !(*i).partyline_channel.compare(channel)) {
18506 string m=message;
18507 if((*i).telnet)
18508 m+="\r\n";
18509 else
18510 m+="\n";
18511 int ec=0;
18512 size_t sent=sock_send((*i).socket,m.c_str(),m.length(),ec);
18513 stats_dcc_chat_bytes_sent(sent);
18514 }
18515 }
18516 }
18517
18518
18519
18520
18521
18522
18523
18524
18525
18526
18527 void dcc_user_pong(string time_, string user, string origin_bot)
18528 {
18529 vector<s_dcc_client>::iterator i;
18530 for(i=dcc_clients.begin(); i!=dcc_clients.end(); i++) {
18531 if(!(*i).replication_partner && ((*i).chat || (*i).telnet) && (*i).got_passwd==3 && !(*i).as_in_logic.compare(user)) {
18532 string eol;
18533 if((*i).telnet)
18534 eol+="\r\n";
18535 else
18536 eol+="\n";
18537
18538 string disp=lang_subst(lang_get_string(1,(*i).lang,648),origin_bot)+eol;
18539 time_t now=time(NULL);
18540 time_t origin=atol(time_.c_str());
18541 char tmp[128];
18542 ltoa((long)now-origin,tmp,10);
18543 disp=lang_subst(disp,tmp);
18544 int ec=0;
18545 dcc_send_msg((*i).socket,disp,ec);
18546 }
18547 }
18548 }
18549
18550
18551
18552
18553
18554
18555
18556
18557
18558
18559
18560
18561 void dcc_user_pong(string user, string origin_bot, string name, string number, string comment)
18562 {
18563 vector<s_dcc_client>::iterator i;
18564 for(i=dcc_clients.begin(); i!=dcc_clients.end(); i++) {
18565 if(!(*i).replication_partner && ((*i).chat || (*i).telnet) && (*i).got_passwd==3 && !(*i).as_in_logic.compare(user)) {
18566 string eol;
18567 if((*i).telnet)
18568 eol+="\r\n";
18569 else
18570 eol+="\n";
18571
18572 string disp=lang_get_string(1,(*i).lang,692);
18573 disp=lang_subst(disp,origin_bot);
18574 disp=lang_subst(disp,name);
18575 disp=lang_subst(disp,number);
18576 disp=lang_subst(disp,comment);
18577 disp+=eol;
18578 int ec=0;
18579 dcc_send_msg((*i).socket,disp,ec);
18580 }
18581 }
18582 }
18583
18584
18585
18586
18587
18588
18589
18590
18591
18592
18593
18594
18595 void dcc_make_server(int ipv, int group, const char* bind_ip, unsigned short bind_port, string server_type)
18596 {
18597 if(ipv==4) {
18598 if(strlen(bind_ip)>32)
18599 return;
18600
18601 unsigned long ip;
18602 unsigned char* i=(unsigned char*)&ip;
18603 i++;
18604 i++;
18605 i++;
18606 char tmp[64];
18607 unsigned int i1;
18608 int i2=0;
18609 for(i1=0; i1<strlen(bind_ip); i1++) {
18610 if(bind_ip[i1]=='.')
18611 break;
18612 tmp[i2++]=bind_ip[i1];
18613 }
18614 i1++;
18615 tmp[i2]=0;
18616 *i=(unsigned char)atol(tmp);
18617 i--;
18618
18619 i2=0;
18620 for(; i1<strlen(bind_ip); i1++) {
18621 if(bind_ip[i1]=='.')
18622 break;
18623 tmp[i2++]=bind_ip[i1];
18624 }
18625 i1++;
18626 tmp[i2]=0;
18627 *i=(unsigned char)atol(tmp);
18628 i--;
18629
18630 i2=0;
18631 for(; i1<strlen(bind_ip); i1++) {
18632 if(bind_ip[i1]=='.')
18633 break;
18634 tmp[i2++]=bind_ip[i1];
18635 }
18636 i1++;
18637 tmp[i2]=0;
18638 *i=(unsigned char)atol(tmp);
18639 i--;
18640
18641 i2=0;
18642 for(; i1<strlen(bind_ip); i1++) {
18643 if(bind_ip[i1]=='.')
18644 break;
18645 tmp[i2++]=bind_ip[i1];
18646 }
18647 i1++;
18648 tmp[i2]=0;
18649 *i=(unsigned char)atol(tmp);
18650
18651 int ec=0;
18652
18653 #ifdef _WIN32
18654 in_addr l;
18655 l.S_un.S_addr=ip;
18656 #else
18657 in_addr l;
18658 l.s_addr=ip;
18659 #endif
18660
18661 #if !defined(HIGHFIRST)
18662 # ifdef _WIN32
18663 char ch;
18664 ch=l.S_un.S_un_b.s_b1;
18665 l.S_un.S_un_b.s_b1=l.S_un.S_un_b.s_b4;
18666 l.S_un.S_un_b.s_b4=ch;
18667 ch=l.S_un.S_un_b.s_b2;
18668 l.S_un.S_un_b.s_b2=l.S_un.S_un_b.s_b3;
18669 l.S_un.S_un_b.s_b3=ch;
18670 # else
18671 char ch;
18672 ch=((char*)&l.s_addr)[0];
18673 ((char*)&l.s_addr)[0]=((char*)&l.s_addr)[3];
18674 ((char*)&l.s_addr)[3]=ch;
18675 ch=((char*)&l.s_addr)[1];
18676 ((char*)&l.s_addr)[1]=((char*)&l.s_addr)[2];
18677 ((char*)&l.s_addr)[2]=ch;
18678 # endif
18679 #endif
18680
18681 s_socket dcc_server=sock_bind(l,bind_port,ec);
18682
18683 if(dcc_server.cmp()==false) {
18684 log_socket(ec,sock_error(ec),"while calling sock_bind in file " __FILE__ " in function " __FUNC__);
18685 return;
18686 }
18687
18688 s_dcc_server s;
18689 s.group=group;
18690 s.using_ipv6=false;
18691 #ifdef _WIN32
18692 s.dcc_addr=l.S_un.S_addr;
18693 #else
18694 s.dcc_addr=l.s_addr;
18695 #endif
18696 s.port=bind_port;
18697 s.bind_ip=bind_ip;
18698 s.socket=dcc_server;
18699 if(server_type.find("\"",0)!=string::npos)
18700 server_type.erase(0,1);
18701 if(server_type.find("\"",0)!=string::npos)
18702 server_type.erase(server_type.find("\"",0),1);
18703 s.server_type=server_type;
18704
18705 dcc_servers.push_back(s);
18706 }
18707 if(ipv==6) {
18708 int ec=0;
18709 s_socket dcc_server=sock_bind6((char*)bind_ip,bind_port,ec);
18710
18711 if(dcc_server.cmp()==false) {
18712 log_socket(ec,sock_error(ec),"while calling sock_bind6 in file " __FILE__ " in function " __FUNC__);
18713 return;
18714 }
18715
18716 s_dcc_server s;
18717 s.group=group;
18718 s.using_ipv6=true;
18719 s.dcc_addr=-1;
18720 inet_pton(AF_INET6,(char*)bind_ip,&s.dcc_addr6);
18721 s.port=bind_port;
18722 s.bind_ip=bind_ip;
18723 s.socket=dcc_server;
18724 if(server_type.find("\"",0)!=string::npos)
18725 server_type.erase(0,1);
18726 if(server_type.find("\"",0)!=string::npos)
18727 server_type.erase(server_type.find("\"",0),1);
18728 s.server_type=server_type;
18729
18730 dcc_servers.push_back(s);
18731 }
18732 }
18733
18734
18735
18736
18737
18738
18739
18740
18741
18742
18743 void dcc_make_telnet_server(int ipv, const char* bind_ip, unsigned short bind_port)
18744 {
18745 if(ipv==4) {
18746 if(strlen(bind_ip)>32)
18747 return;
18748
18749 unsigned long ip;
18750 unsigned char* i=(unsigned char*)&ip;
18751 i++;
18752 i++;
18753 i++;
18754 char tmp[64];
18755 unsigned int i1;
18756 int i2=0;
18757 for(i1=0; i1<strlen(bind_ip); i1++) {
18758 if(bind_ip[i1]=='.')
18759 break;
18760 tmp[i2++]=bind_ip[i1];
18761 }
18762 i1++;
18763 tmp[i2]=0;
18764 *i=(unsigned char)atol(tmp);
18765 i--;
18766
18767 i2=0;
18768 for(; i1<strlen(bind_ip); i1++) {
18769 if(bind_ip[i1]=='.')
18770 break;
18771 tmp[i2++]=bind_ip[i1];
18772 }
18773 i1++;
18774 tmp[i2]=0;
18775 *i=(unsigned char)atol(tmp);
18776 i--;
18777
18778 i2=0;
18779 for(; i1<strlen(bind_ip); i1++) {
18780 if(bind_ip[i1]=='.')
18781 break;
18782 tmp[i2++]=bind_ip[i1];
18783 }
18784 i1++;
18785 tmp[i2]=0;
18786 *i=(unsigned char)atol(tmp);
18787 i--;
18788
18789 i2=0;
18790 for(; i1<strlen(bind_ip); i1++) {
18791 if(bind_ip[i1]=='.')
18792 break;
18793 tmp[i2++]=bind_ip[i1];
18794 }
18795 i1++;
18796 tmp[i2]=0;
18797 *i=(unsigned char)atol(tmp);
18798
18799 int ec=0;
18800
18801 #ifdef _WIN32
18802 in_addr l;
18803 l.S_un.S_addr=ip;
18804 char ch;
18805 ch=l.S_un.S_un_b.s_b1;
18806 l.S_un.S_un_b.s_b1=l.S_un.S_un_b.s_b4;
18807 l.S_un.S_un_b.s_b4=ch;
18808 ch=l.S_un.S_un_b.s_b2;
18809 l.S_un.S_un_b.s_b2=l.S_un.S_un_b.s_b3;
18810 l.S_un.S_un_b.s_b3=ch;
18811 #else
18812 in_addr l;
18813 l.s_addr=ip;
18814 char ch;
18815 ch=((char*)&l.s_addr)[0];
18816 ((char*)&l.s_addr)[0]=((char*)&l.s_addr)[3];
18817 ((char*)&l.s_addr)[3]=ch;
18818 ch=((char*)&l.s_addr)[1];
18819 ((char*)&l.s_addr)[1]=((char*)&l.s_addr)[2];
18820 ((char*)&l.s_addr)[2]=ch;
18821 #endif
18822 s_socket telnet_server=sock_bind(l,bind_port,ec);
18823
18824 if(telnet_server.cmp()==false) {
18825 log_socket(ec,sock_error(ec),"while calling sock_bind in file " __FILE__ " in function " __FUNC__);
18826 return;
18827 }
18828
18829 s_telnet_server s;
18830 #ifdef _WIN32
18831 s.telnet_addr=l.S_un.S_addr;
18832 #else
18833 s.telnet_addr=l.s_addr;
18834 #endif
18835 s.port=bind_port;
18836 s.bind_ip=bind_ip;
18837 s.socket=telnet_server;
18838
18839 telnet_servers.push_back(s);
18840 }
18841 if(ipv==6) {
18842 int ec=0;
18843 s_socket telnet_server=sock_bind6((char*)bind_ip,bind_port,ec);
18844
18845 if(telnet_server.cmp()==false) {
18846 log_socket(ec,sock_error(ec),"while calling sock_bind6 in file " __FILE__ " in function " __FUNC__);
18847 return;
18848 }
18849
18850 s_telnet_server s;
18851 s.telnet_addr=-1;
18852 s.port=bind_port;
18853 s.bind_ip=bind_ip;
18854 s.socket=telnet_server;
18855
18856 telnet_servers.push_back(s);
18857 }
18858 }
18859
18860
18861
18862
18863
18864
18865
18866
18867
18868
18869 string dcc_get_string(string msg, int& dcc_group)
18870 {
18871 if(msg.length()>=3 && msg[0]=='d' && msg[1]=='c' && msg[2]=='c') {
18872 string group;
18873 for(unsigned int i1=3; i1<msg.length(); i1++)
18874 group+=msg[i1];
18875 if(!group.compare(""))
18876 group="0";
18877 dcc_group=atol(group.c_str());
18878 vector<s_dcc_server>::iterator i2;
18879 for(i2=dcc_servers.begin(); i2!=dcc_servers.end(); i2++) {
18880 if((*i2).group==dcc_group)
18881 break;
18882 }
18883 if(i2==dcc_servers.end())
18884 return "";
18885
18886 unsigned int ip_=0;
18887 if(!(*i2).using_ipv6) {
18888 {
18889 char tmp[4];
18890 memcpy(tmp,&(*i2).dcc_addr,4);
18891
18892 #if !defined(HIGHFIRST)
18893
18894 char x;
18895
18896 x=tmp[0];
18897 tmp[0]=tmp[3];
18898 tmp[3]=x;
18899
18900 x=tmp[1];
18901 tmp[1]=tmp[2];
18902 tmp[2]=x;
18903 #endif
18904
18905 memcpy(&ip_,tmp,4);
18906 }
18907 }
18908
18909 string res="DCC CHAT chat ";
18910 char tmp[64];
18911 if(!(*i2).using_ipv6) {
18912 sprintf(tmp,"%u",ip_);
18913 res+=tmp;
18914 } else {
18915 string ip6=(*i2).bind_ip;
18916 if(ip6.find("%",0)!=string::npos)
18917 ip6.erase(ip6.find("%",0),ip6.length()-ip6.find("%",0));
18918 res+=ip6;
18919 }
18920 res+=" ";
18921 ltoa((*i2).port,tmp,10);
18922 res+=tmp;
18923
18924 return res;
18925 }
18926 return "";
18927 }
18928
18929
18930
18931
18932
18933
18934
18935
18936
18937
18938
18939 void dcc_notify(string user, int reason, string incomplete_file)
18940 {
18941 char dcc_eol[4]="\n\0";
18942 char telnet_eol[4]="\r\n\0";
18943
18944 bool got=false;
18945
18946 vector<s_dcc_client>::iterator i;
18947 for(i=dcc_clients.begin(); i!=dcc_clients.end(); i++) {
18948 if((*i).got_passwd!=3)
18949 continue;
18950 if(!(*i).chat)
18951 continue;
18952 if((*i).as_in_logic.compare(user))
18953 continue;
18954 string eol=(*i).telnet?telnet_eol:dcc_eol;
18955
18956 got=true;
18957
18958 string disp;
18959 switch(reason) {
18960 case FILESYS_NOT_PUBLISHED:
18961 disp=lang_get_string(1,(*i).lang,274)+eol;
18962 break;
18963 case FILESYS_GOT_FILE:
18964 dcc_check_for_filesystem((*i).as_in_logic);
18965 break;
18966 case FILESYS_GOT_INCOMPLETE:
18967 disp=lang_get_string(1,(*i).lang,400)+eol;
18968 disp+=incomplete_file;
18969 disp+=eol;
18970 break;
18971 }
18972
18973 if(!disp.empty()) {
18974 int ec=0;
18975 dcc_send_msg((*i).socket,disp,ec);
18976 }
18977 }
18978
18979 if(!got && reason==FILESYS_NOT_PUBLISHED) {
18980 string nick=irc_get_nick(user);
18981 if(nick.empty())
18982 return;
18983
18984 string inv="PRIVMSG ";
18985 inv+=nick;
18986 inv+=" :";
18987
18988 int dcc_group=0;
18989
18990 unsigned long dcc_addr=0;
18991 unsigned short dcc_port=0;
18992 vector<s_dcc_server>::iterator i1;
18993 for(i1=dcc_servers.begin(); i1!=dcc_servers.end(); i1++) {
18994 if((*i1).group==dcc_group) {
18995 dcc_addr=(*i1).dcc_addr;
18996 dcc_port=(*i1).port;
18997 break;
18998 }
18999 }
19000
19001 if(dcc_addr && dcc_port) {
19002 irc_await_dcc_chat(nick,user,dcc_group);
19003
19004 unsigned int ip_=0;
19005 {
19006 char tmp[4];
19007 memcpy(tmp,&dcc_addr,4);
19008
19009 #if !defined(HIGHFIRST)
19010
19011 char x;
19012
19013 x=tmp[0];
19014 tmp[0]=tmp[3];
19015 tmp[3]=x;
19016
19017 x=tmp[1];
19018 tmp[1]=tmp[2];
19019 tmp[2]=x;
19020 #endif
19021
19022 memcpy(&ip_,tmp,4);
19023 }
19024
19025 string res="DCC CHAT chat ";
19026 char tmp[64];
19027 sprintf(tmp,"%u",ip_);
19028 res+=tmp;
19029 res+=" ";
19030 ltoa(dcc_port,tmp,10);
19031 res+=tmp;
19032
19033 inv+="\x01";
19034 inv+=res;
19035 inv+="\x01";
19036
19037 irc_put(inv,LOW_PRIORITY);
19038 }
19039 }
19040 if(!got && reason==FILESYS_GOT_INCOMPLETE) {
19041 string nick=irc_get_nick(user);
19042 if(nick.empty())
19043 return;
19044
19045 string lang="en";
19046
19047 string msg="PRIVMSG ";
19048 msg+=nick;
19049 msg+=" :";
19050 msg+=lang_get_string(1,lang,400);
19051 irc_put(msg,LOW_PRIORITY);
19052
19053 msg="PRIVMSG ";
19054 msg+=nick;
19055 msg+=" :";
19056 msg+=incomplete_file;
19057 irc_put(msg,LOW_PRIORITY);
19058 }
19059 }
19060
19061
19062
19063
19064
19065
19066
19067
19068
19069
19070 string dcc_put_multiple_lines(string msg, string eol)
19071 {
19072 string result;
19073
19074 string m;
19075 for(unsigned int i1=0; i1<msg.length(); i1++) {
19076 if(msg[i1]=='\\') {
19077 if(!(i1+1<msg.length() && msg[i1+1]=='n'))
19078 m+=msg[i1];
19079 } else
19080 m+=msg[i1];
19081 if(i1==msg.length()-1 || (i1+1<msg.length() && msg[i1]=='\\' && msg[i1+1]=='n')) {
19082 if((i1+1<msg.length() && msg[i1]=='\\' && msg[i1+1]=='n'))
19083 i1++;
19084
19085 if(!m.empty()) {
19086
19087 result+=m;
19088 result+=eol;
19089 }
19090 m="";
19091 }
19092 }
19093 result=(string)"***"+eol+result+"***"+eol;
19094 return result;
19095 }
19096
19097
19098
19099
19100
19101
19102
19103
19104 void dcc_check_for_filesystem(string user_name)
19105 {
19106 char dcc_eol[4]="\n\0";
19107 char telnet_eol[4]="\r\n\0";
19108
19109 bool got=false;
19110
19111 vector<s_dcc_client>::iterator i;
19112 for(i=dcc_clients.begin(); i!=dcc_clients.end(); i++) {
19113 if((*i).got_passwd!=3)
19114 continue;
19115 if(!(*i).chat)
19116 continue;
19117 if((*i).as_in_logic.compare(user_name))
19118 continue;
19119 string eol=(*i).telnet?telnet_eol:dcc_eol;
19120
19121 got=true;
19122
19123 string disp;
19124 {
19125 vector<s_dcc_notify> notifies;
19126 filesys_dcc_check_for_notifies((*i).as_in_logic,(*i).u,(*i).chs,"",notifies,true,(*i).lang,eol);
19127 filesys_dcc_drop_notifies((*i).as_in_logic,false);
19128 vector<s_dcc_notify>::iterator i1;
19129 bool unpublished=false;
19130
19131 string incomplete_files;
19132 for(i1=notifies.begin(); i1!=notifies.end(); i1++) {
19133 if(!unpublished && (*i1).unpublished) {
19134 string msg=lang_get_string(1,(*i).lang,274);
19135 disp+=dcc_put_multiple_lines(msg,eol);
19136 unpublished=true;
19137 }
19138 if((*i1).incomplete) {
19139 if(!incomplete_files.empty())
19140 incomplete_files+=", ";
19141 incomplete_files+="\"";
19142 incomplete_files+=(*i1).name;
19143 incomplete_files+="\"";
19144 }
19145 if((*i1).notify_owner || (*i1).notify_user || (*i1).secure_notify_owner || (*i1).secure_notify_user) {
19146 string msg=(*i1).message;
19147 disp+=dcc_put_multiple_lines(msg,eol);
19148 }
19149 }
19150 if(!incomplete_files.empty()) {
19151 disp+=dcc_put_multiple_lines(lang_get_string(1,(*i).lang,402),eol);
19152 disp+=dcc_put_multiple_lines(incomplete_files,eol);
19153 }
19154 }
19155
19156 if(!disp.empty()) {
19157 int ec=0;
19158 dcc_send_msg((*i).socket,disp,ec);
19159 }
19160 }
19161 }
19162
19163
19164
19165
19166
19167
19168
19169
19170 void dcc_rehashed(string who)
19171 {
19172 vector<s_dcc_client>::iterator i;
19173 char dcc_eol[4]="\n\0";
19174 char telnet_eol[4]="\r\n\0";
19175 for(i=dcc_clients.begin(); i!=dcc_clients.end(); i++) {
19176 if((*i).got_passwd!=3)
19177 continue;
19178 dcc_loop_get_rights(i);
19179 if((*i).send)
19180 continue;
19181 if((*i).send_from_filesystem)
19182 continue;
19183 if((*i).replication_partner)
19184 continue;
19185 if((*i).ssl_connection)
19186 continue;
19187 if(!(*i).chat)
19188 continue;
19189 string eol=(*i).telnet?telnet_eol:dcc_eol;
19190 string disp=lang_subst(lang_get_string(1,(*i).lang,610),who)+eol;
19191 int ec=0;
19192 dcc_send_msg((*i).socket,disp,ec);
19193 }
19194 }
19195
19196
19197
19198
19199
19200
19201
19202
19203 void dcc_broadcast(string msg)
19204 {
19205 vector<s_dcc_client>::iterator i;
19206 char dcc_eol[4]="\n\0";
19207 char telnet_eol[4]="\r\n\0";
19208 for(i=dcc_clients.begin(); i!=dcc_clients.end(); i++) {
19209 if((*i).got_passwd!=3)
19210 continue;
19211 if((*i).send)
19212 continue;
19213 if((*i).send_from_filesystem)
19214 continue;
19215 if((*i).replication_partner)
19216 continue;
19217 if((*i).ssl_connection)
19218 continue;
19219 if(!(*i).chat)
19220 continue;
19221 string eol=(*i).telnet?telnet_eol:dcc_eol;
19222 string disp=msg+eol;
19223 int ec=0;
19224 dcc_send_msg((*i).socket,disp,ec);
19225 sock_send_cache();
19226 sock_flush_later((*i).socket);
19227 }
19228 }
19229
19230
19231
19232
19233
19234
19235
19236
19237
19238
19239
19240 void dcc_broadcast(string user_mask, string msg, string sender, string bot_mask)
19241 {
19242 vector<s_dcc_client>::iterator i;
19243 char dcc_eol[4]="\n\0";
19244 char telnet_eol[4]="\r\n\0";
19245 for(i=dcc_clients.begin(); i!=dcc_clients.end(); i++) {
19246 if((*i).got_passwd!=3)
19247 continue;
19248 if((*i).send)
19249 continue;
19250 if((*i).send_from_filesystem)
19251 continue;
19252 if((*i).replication_partner)
19253 continue;
19254 if((*i).ssl_connection)
19255 continue;
19256 if(!(*i).chat)
19257 continue;
19258 if(match((char*)user_mask.c_str(),(char*)(*i).as_in_logic.c_str()))
19259 continue;
19260 string eol=(*i).telnet?telnet_eol:dcc_eol;
19261
19262
19263 string message;
19264 message=lang_get_string(1,(*i).lang,693);
19265
19266 time_t now=time(NULL);
19267 char* t1=ctime(&now);
19268 char t2[128];
19269 strcpy(t2,t1);
19270 t2[strlen(t2)-1]=0;
19271
19272 message=lang_subst(message,t2);
19273
19274 if(sender.empty())
19275 sender=lang_get_string(1,(*i).lang,694);
19276
19277 message=lang_subst(message,sender);
19278
19279 string to=user_mask;
19280 if(!bot_mask.empty())
19281 to+=(string)"@"+bot_mask;
19282 message=lang_subst(message,to);
19283
19284 message=lang_subst(message,msg);
19285
19286 string disp=message+eol;
19287 int ec=0;
19288 dcc_send_msg((*i).socket,disp,ec);
19289 sock_send_cache();
19290 sock_flush_later((*i).socket);
19291 }
19292 }
19293
19294
19295
19296
19297
19298
19299
19300 void dcc_flush_all()
19301 {
19302 sock_send_cache();
19303 vector<s_dcc_client>::iterator i;
19304 for(i=dcc_clients.begin(); i!=dcc_clients.end(); i++)
19305 sock_flush_later((*i).socket);
19306 }
19307
19308
19309
19310
19311
19312
19313
19314 void dcc_close_all()
19315 {
19316 vector<s_dcc_client>::iterator i;
19317 for(i=dcc_clients.begin(); i!=dcc_clients.end(); i++)
19318 sock_close((*i).socket);
19319 }
19320