x2serv-cvs Mailing List for X2 IRC Channel and Oper Services (Page 14)
Brought to you by:
sirvulcan
You can subscribe to this list here.
2001 |
Jan
(33) |
Feb
(14) |
Mar
(26) |
Apr
(19) |
May
(28) |
Jun
(5) |
Jul
(6) |
Aug
(5) |
Sep
(6) |
Oct
(1) |
Nov
(21) |
Dec
(3) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2002 |
Jan
(3) |
Feb
(14) |
Mar
|
Apr
(2) |
May
(1) |
Jun
(1) |
Jul
|
Aug
|
Sep
(2) |
Oct
|
Nov
|
Dec
|
2003 |
Jan
(1) |
Feb
(4) |
Mar
|
Apr
|
May
(4) |
Jun
(6) |
Jul
|
Aug
|
Sep
|
Oct
(7) |
Nov
|
Dec
|
2004 |
Jan
|
Feb
|
Mar
(7) |
Apr
|
May
|
Jun
(19) |
Jul
(5) |
Aug
(16) |
Sep
(4) |
Oct
(10) |
Nov
(7) |
Dec
(6) |
2005 |
Jan
(4) |
Feb
(5) |
Mar
(24) |
Apr
(6) |
May
(17) |
Jun
(11) |
Jul
(2) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Richard P. <lys...@us...> - 2001-01-23 14:20:09
|
Update of /cvsroot/x2serv/x2/source In directory usw-pr-cvs1:/tmp/cvs-serv16492/source Modified Files: chan.c commands.c config.h main.c Log Message: Updated these files for the new set/xset functions Index: chan.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/chan.c,v retrieving revision 1.67 retrieving revision 1.68 diff -C2 -r1.67 -r1.68 *** chan.c 2001/01/22 07:24:33 1.67 --- chan.c 2001/01/23 14:20:24 1.68 *************** *** 28,32 **** char globsign; - extern set_list set_commands[NUMOFCHANSETTINGS]; void SetTopics(int period) --- 28,31 ---- Index: commands.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/commands.c,v retrieving revision 1.126 retrieving revision 1.127 diff -C2 -r1.126 -r1.127 *** commands.c 2001/01/22 13:33:12 1.126 --- commands.c 2001/01/23 14:20:24 1.127 *************** *** 164,169 **** { "K", c_kick, REGED, OP, T, F, F, T }, { "DEOP", c_deop, REGED, OP, T, F, F, T }, ! { "SET", c_set, REGED, OP, T, T, F, T }, ! { "XSET", c_xset, NONE, 0, 0, 0, T, T }, { "GLOBAL", c_global, NONE, 0, 0, 0, T, T }, { "UNVISITED", c_unvisited, NONE, 0, 0, 0, T, T }, --- 164,169 ---- { "K", c_kick, REGED, OP, T, F, F, T }, { "DEOP", c_deop, REGED, OP, T, F, F, T }, ! { "SET", c_set, REGED, 0, T, T, F, T }, ! { "XSET", c_xset, NONE, 0, 0, 0, F, T }, { "GLOBAL", c_global, NONE, 0, 0, 0, T, T }, { "UNVISITED", c_unvisited, NONE, 0, 0, 0, T, T }, *************** *** 378,517 **** } - set_list set_commands[NUMOFCHANSETTINGS+1] = - /* Command min max def description set0 set1 set2 set3 set4 set5 */ - { - { - /* #define TOPICFREQ 0 */ - "TOPICFREQ", TOPICFREQ, 1,0, 4, 1, "How frequently X2 sets the channel topic to its default.", - "The Topic is refreshed: ", - {"Never.", - "Once a day.", - "Twice a day.", - "Every 4 hours.", - "Every hour.", - ""} - } - , - { - /* #define STRICTOP 1 */ - "STRICTOP", STRICTOP, 1,0, 2, 0, "Does X2 allow non-users to be opped by others?", - "Unknown users can be opped by: ", - {"Anyone.", - "Only OPs, MANAGERs, and (CO)OWNERs.", - "Only MANAGERs and (CO)OWNERs.", - "", "", ""} - } - , - { - "AUTOOP", AUTOOP, 1,0, 3, 2, "Who does X2 autoop?", - "X2 will Auto-op: ", - {"Nobody", - "Only MANAGERs and (CO)OWNERs.", - "OPs, MANAGERs, and (CO)OWNERs.", - "Everyone.", - "", ""} - } - , - { - "PROTECT", PROTECT, 1,0, 4, 0, "Who does X2 protect from whom?", - "X2 will protect: ", - {"No one from anyone.", - "users from anyone of lower rank.", - "users from anyone of equal or lower rank.", - "Only MANAGERs, and (CO)OWNERs from everyone.", - "Only (CO)OWNERS from everyone.", - ""} - } - , - { - "ENFMODES", ENFMODES, 1,0, 2, 0, "Should X2 force the default modes?", - "Default modes can be overridden by: ", - {"Everyone.", - "Only OPs, MANAGERs, and (CO)OWNERs.", - "Only MANAGERs and (CO)OWNERs.", - "", "", ""} - } - , - { - "PASSMODE", PASSMODE, 1,0, 1, 0, "Should X2 give ops to passworded users who are not verified?", - "Users who have set a password, but have NOT authenticated: ", - {"are NOT opped.", - "are given ops anyway.", - "", "", "", ""} - } - , - { - "BANTIMEOUT", BANTIMEOUT, 1, 0, 5, 0, "Should X2 remove old bans?", - "Bans are removed: ", - {"Never.", - "After 10 minutes.", - "After 2 hours.", - "After 4 hours.", - "After 24 hours.", - "After one week."} - } - , - { - "VOICE", VOICE, 1, 0, 2, 1, "Should X2 give voice?", - "Mode +v (voice) given to: ", - {"Noone.", - "Peons.", - "Everyone.", - "", - "", - ""} - } - , - { - "USERINFO", USERINFO, 1, 0, 1, 1, "Show userinfo lines?", - "Show userinfo lines when users join?: ", - {"No", - "Yes", - "", - "", - "", - ""} - } - , - { - "INCHAN", INCHAN, 1, 0, 1, 1, "Does X2 enter the channel?", - "Should X2 go into the channel?: ", - {"No", - "Yes", - "", - "", - "", - ""} - } - , - { /* Option not used anymore */ - "SUSPENDED", UNUSED, 0, 0, 1, 0, "Is it suspended?", - "Has the channel been suspended by CService Admin?: ", - {"No", - "Yes", - "", - "", - "", - ""} - } - , - { - "NODELETE", NODELETE, 0, 0, 1, 0, "Is it exempted from deletion?", - "Exempt from unvisited deletion rules?: ", - { "No", - "Yes", - "", - "", - "", - ""} - } - , - { - NULL, 0, 0, 0, 0, 0, NULL, - "", - {"", "", "", "", "", ""} - } - }; - /* Begin command descriptions */ --- 378,381 ---- *************** *** 1532,1535 **** --- 1396,1400 ---- strcpy(hptr->Pass, CryptPass); send_to_user(uptr, "Your password in channel %s has been changed.", cptr->Name); + WriteChanOpFile(cptr); return(TRUE); } *************** *** 1547,1550 **** --- 1412,1416 ---- SetInfo(cptr, hptr, rest); send_to_user(uptr, "Your info-line has been changed to: %s", rest); + WriteChanOpFile(cptr); return(TRUE); } *************** *** 2433,2436 **** --- 2299,2303 ---- send_to_user(uptr, " Channel Name : \002%s\002 ", cptr->Name); send_to_user(uptr, " Created : \002%s\002 by \002%s\002", timestring, cptr->Reggedby); + if (!strcmp(cptr->Topic, "*")) send_to_user(uptr, " No default topic."); *************** *** 2456,2464 **** send_to_user(uptr, " Num Of Lamers : %3d", LamerNumber); send_to_user(uptr, " "); - for (k = 0; set_commands[k].name != NULL; k++) - { - if (k != UNUSED) - send_to_user(uptr, " \002%s\002%s", set_commands[k].pre, set_commands[k].settings[cptr->settings[set_commands[k].index]]); - } if (OwnerNumber > 0) { --- 2323,2326 ---- *************** *** 2498,3031 **** } - /* TODO : Split this into a very basic function which calls - * perhapse s_name() functions for set paramiters. - */ int c_set(C_PARAM) { ! char *option, *param; ! int i, j, value, curset; ! char ModeString[LINEBUFFSIZE]; ! int ChangedINCHAN = 0; ! ! option = strtok(rest, " "); ! param = strtok(NULL, "\n"); ! ! if (!option) ! { ! send_to_user(uptr, "=----------- %s Settings -------------=", cptr->Name); ! send_to_user(uptr, " \002Topic \002: %s", cptr->Topic); ! send_to_user(uptr, " \002Modes \002: %s", GetModeString(ModeString, cptr->PlusModes, cptr->MinModes, cptr->Key, cptr->Limit)); ! send_to_user(uptr, " \002URL \002: %s", cptr->URL); ! if(IsChanOwner(hptr) || IsOper(uptr)) ! { ! send_to_user(uptr, " \002E-MAIL \002: %s", cptr->Email); ! if(IsOper(uptr)) ! send_to_user(uptr, "NOTE: E-mail is for official IRC Op use ONLY! Do not give it out!"); ! else { ! send_to_user(uptr, "NOTE: E-mail is visible to IRC Ops and Owners only;"); ! send_to_user(uptr, "It is used for verification of identity and contacting you."); ! } ! } ! send_to_user(uptr, "\002Description \002: %s", cptr->Description); ! for (i = 0; set_commands[i].name != NULL; i++) ! { ! if (i != UNUSED) ! { ! if(set_commands[i].user) /* If its not an IRCOP only command */ ! send_to_user(uptr, "\002%10s\002 : %d %s%s", set_commands[i].name, ! cptr->settings[set_commands[i].index], set_commands[i].pre, ! set_commands[i].settings[cptr->settings[set_commands[i].index]]); ! } ! } ! send_to_user(uptr, "=- The following are set by IRCOPS only -="); ! for (i = 0; set_commands[i].name != NULL; i++) ! { ! if (i != UNUSED) ! { ! if(!set_commands[i].user) /* If it IS an IRCOP only command */ ! send_to_user(uptr, "%10s : %d \002%s\002%s", set_commands[i].name, ! cptr->settings[set_commands[i].index], set_commands[i].pre, ! set_commands[i].settings[cptr->settings[set_commands[i].index]]); ! } ! } ! ! send_to_user(uptr, "=----------------- End ------------------="); ! return(TRUE); ! } ! if(!strcasecmp(option, "URL")) ! { ! if(!param) ! send_to_user(uptr, "\002URL\002: %s", cptr->URL); ! else ! { ! free(cptr->URL); ! if((cptr->URL = (char *) malloc(strlen(param) + 1))) ! { ! safecopy(cptr->URL, param, MAXURLLEN); ! send_to_user(uptr, "\002URL set to\002: %s", cptr->URL); ! } ! else ! { ! send_to_user(uptr, "\002Error allocating memory for new URL!\002"); ! return(FALSE); ! } ! WriteChanOpFile(cptr); ! } ! return(TRUE); ! } ! if(!strcasecmp(option, "DESCRIPTION")) ! { ! if(!param) ! send_to_user(uptr, "\002Description\002: %s", cptr->Description); ! else ! { ! free(cptr->Description); ! if((cptr->Description = (char *) malloc(strlen(param) + 1))) ! { ! safecopy(cptr->Description, param, MAXDESCLEN); ! send_to_user(uptr, "\002Description set to\002: %s", cptr->Description); ! } ! else ! { ! send_to_user(uptr, "\002Error allocating memory for new description!\002"); ! return(FALSE); ! } ! WriteChanOpFile(cptr); ! } ! return(TRUE); ! } ! if (!strcasecmp(option, "TOPIC")) ! { ! if (!param) ! send_to_user(uptr, "\002Topic\002: %s", cptr->Topic); ! else ! { ! free(cptr->Topic); ! if(strlen(param)>MAXTOPICLEN) ! param[MAXTOPICLEN] = '\0'; ! if((cptr->Topic = (char *) malloc(strlen(param) + 10))) ! { ! safecopy(cptr->Topic, param, MAXTOPICLEN); ! send_to_user(uptr, "\002Default topic set to\002: %s", cptr->Topic); ! } ! else ! { ! send_to_user(uptr, "\002Error allocating memory for new topic!"); ! return(FALSE); ! } ! } ! WriteChanOpFile(cptr); ! return(TRUE); ! } ! if (!strcasecmp(option, "EMAIL")) ! { ! if (!param) ! { ! if(IsChanOwner(hptr) || IsOper(uptr)) ! send_to_user(uptr, "\002E-mail\002: %s", cptr->Email); ! else ! send_to_user(uptr, "\002E-mail\002: [visible to owner and IRC Operators only]"); ! } ! else ! { ! free(cptr->Email); ! if(strlen(param)>MAXEMAILLEN) ! param[MAXEMAILLEN] = '\0'; ! if((cptr->Email = (char *) malloc(strlen(param) + 10))) ! { ! safecopy(cptr->Email, param, MAXEMAILLEN); ! send_to_user(uptr, "\002Owner e-mail set to\002: %s", cptr->Email); ! } ! else ! { ! send_to_user(uptr, "\002Error allocating memory for new e-mail!"); ! return(FALSE); ! } ! } ! WriteChanOpFile(cptr); ! return(TRUE); ! } ! else if (!strcasecmp(option, "MODES") || !strcasecmp(option, "MODE")) ! { ! int n; ! if(param) ! for(n=strlen(param)-1;n>=0;n--) ! { ! if(isblank(param[n])) ! param[n] = '\0'; ! else ! break; ! } ! if (!param || !*param) ! { ! send_to_user(uptr, "\002Mode: %s", ! GetModeString(ModeString, cptr->PlusModes, ! cptr->MinModes, cptr->Key, cptr->Limit)); ! } ! else ! { ! if (userleveloper(uptr, hptr) < MA) ! { ! send_to_user(uptr, "\002You must be set at access level OWNER or MANAGER to set permanent modes.\002"); ! return(FALSE); ! } ! ConvertModeString(param, &cptr->PlusModes, &cptr->MinModes, &cptr->Key, &cptr->Limit); ! if(cptr->settings[INCHAN]) ! { ! send_chanmode(cptr, "-k %s", cptr->CurrentKey); ! send_chanmode(cptr, "%s", GetModeString(ModeString, cptr->PlusModes, cptr->MinModes, ! cptr->Key, cptr->Limit)); ! } ! send_to_user(uptr, "\002Default mode set to: %s", ! ModeString); ! if (cptr->Key) ! safecopy(cptr->CurrentKey, cptr->Key, MAXCHANKEY); ! else ! strcpy(cptr->CurrentKey, ""); ! ! } ! WriteChanOpFile(cptr); ! return(TRUE); ! } ! if (param) ! { ! if (sscanf(param, "%d", &value) != 1) ! { ! send_to_user(uptr, "\002Error: Parameter must be a number.\002"); ! return(FALSE); ! } ! } ! for (i = 0; set_commands[i].name != NULL; i++) ! { ! if (i == UNUSED) ! continue; ! ! if (!strcasecmp(option, set_commands[i].name)) ! { ! if (!param) /* No parameter. */ ! { ! curset = cptr->settings[set_commands[i].index]; ! send_to_user(uptr, "=-----------------------------="); ! send_to_user(uptr, "\002%s\002: %s\002", set_commands[i].name, set_commands[i].pre); ! send_to_user(uptr, "=---- * indicates current ----="); ! for (j = 0; j < 6; j++) ! { ! if (set_commands[i].settings[j][0] == 0) ! break; ! if (j == curset) ! send_to_user(uptr, " %d: [*] %s", j, set_commands[i].settings[j]); ! else ! send_to_user(uptr, " %d: [ ] %s", j, set_commands[i].settings[j]); ! } ! send_to_user(uptr, "=------------ End ------------="); ! return(TRUE); ! } ! else if (userleveloper(uptr, hptr) < MA && !IsGodOper(uptr)) ! { ! send_to_user(uptr, "\002You must be set to access level OWNER or MANAGER to change settings.\002"); ! return(FALSE); ! } ! if (!set_commands[i].user && !IsGodOper(uptr)) ! { ! send_to_user(uptr, "\002%s can only be modified by the Channel Service administrators.\002", set_commands[i].name); ! return(FALSE); ! } ! if ((value < set_commands[i].min) || (value > set_commands[i].max)) ! { ! send_to_user(uptr, "\002Error: %s must be in the range %d-%d.", set_commands[i].name, ! set_commands[i].min, set_commands[i].max); ! return(FALSE); ! } ! if(!strcasecmp(option, "INCHAN")) ! { ! if(cptr->Suspended) ! { ! send_to_user(uptr, "Channel %s has been suspended by the Channel Service Admins.", cptr->Name); ! send_to_user(uptr, "E-mail cse...@af... for more information."); ! return(FALSE); ! } ! ChangedINCHAN = TRUE; ! } ! if(value == cptr->settings[set_commands[i].index]) ! { ! send_to_user(uptr, "%s already set to %d", option, value); ! return(FALSE); ! } ! cptr->settings[set_commands[i].index] = value; ! WriteChanOpFile(cptr); ! send_to_user(uptr, "\002%s\002 set to %d. \"\002%s\002%s\"", set_commands[i].name, ! value, set_commands[i].pre, set_commands[i].settings[value]); ! /* if(!strcasecmp(option, "SUSPENDED")) ! { ! ChangedINCHAN = TRUE; ! if(cptr->settings[SUSPENDED] == 1) ! { ! send_to_user(uptr, "Channel %s marked as suspended.", cptr->Name); ! cptr->settings[INCHAN] = 0; ! } ! else ! { ! send_to_user(uptr, "Suspension cleared for channel %s", cptr->Name); ! cptr->settings[INCHAN] = 1; ! } ! } */ ! if(ChangedINCHAN) ! { ! if(cptr->settings[INCHAN] == 0) /* Leave the channel */ ! { ! send_to_user(uptr, "Leaving disabled channel %s. \002/msg %s %s set INCHAN 1\002 to re-enable.", ! cptr->Name, IrcNick, cptr->Name); ! send_part(cptr, "Disabled by %s.", uptr->Nick); ! } ! else /* Join the channel */ ! { ! if(cptr->Suspended) ! { ! send_to_user(uptr, "This channel has been suspeneded by the Channel Service administrators."); ! send_to_user(uptr, "E-mail cse...@af... for more information."); ! return(FALSE); ! } ! send_to_user(uptr, "Rejoining channel %s.", cptr->Name); ! send_join(cptr); ! send_opchan(cptr); ! send_chanmode(cptr, "%s", GetModeString(ModeString, cptr->PlusModes, ! cptr->MinModes, cptr->Key, cptr->Limit)); ! ! if (strcmp(cptr->Topic, "*") && cptr->settings[TOPICFREQ]) ! send_topic(cptr, cptr->Topic); ! } ! } /* INCHAN */ ! return(TRUE); ! } ! } ! send_to_user(uptr, "\002Unknown setting [\002%s\002].\002", option); ! return(FALSE); } - /* TODO : Same as above-- make this a small parent function that calls perhapse x_function - * or something. - */ int c_xset(C_PARAM) { ! char *UpCaseOpt; ! char *Option, *Value; ! int Val; ! ! /* gota break up rest like parse used to do.. */ ! Option = strtok(rest, " "); ! Value = strtok(NULL, "\0"); ! rest = Value; ! ! if (!Option) ! { ! send_to_user(uptr, "\002XSET <option> <value>\002"); ! send_to_user(uptr, "\002Option Function\002"); ! send_to_user(uptr, "\002-------------------------------\002"); ! send_to_user(uptr, "\002MAXCLONES \002How many clones until I take action?"); ! send_to_user(uptr, "\002CLONERES \002What action must I take? 0 = nothing, 1 = warn, 2 = kill, 3 = GLINE *!*user@*host"); ! send_to_user(uptr, "\002GATECHECK \002Check for wingates? 0 = no, 1 = warn, 2 = GLINE"); ! send_to_user(uptr, "\002PINGOUTCONNECT \002Have X2 send a CONNECT when a server pings out."); ! send_to_user(uptr, "\002AUTOROUTING \002Should X2 try to force routing to the currenly loaded route.dat?"); ! send_to_user(uptr, "\002AUTOCONNECT \002Should X2 try to connect to a server, or wait for a connection (1 or 0 respectively)?"); ! send_to_user(uptr, "\002DEBUG \002What debugging information should be displayed? 0 = all, 60=none"); ! send_to_user(uptr, "\002DBTARGET \002Where should debugging information go? \002DO NOT ABUSE THIS!\002"); ! send_to_user(uptr, "\002-------------------------------\002"); ! return(FALSE); ! } ! if (!Value) ! { ! send_to_user(uptr, "\002Set %s to what?\002", Option); ! if (!strcasecmp(Option, "ENFORCE")) ! send_to_user(uptr, "\0020 = disabled, 1 = enabled.\002"); ! if (!strcasecmp(Option, "GATECHECK")) ! send_to_user(uptr, "\0020 = no action, 1 = warn IRC Ops, 2 = GLINE.\002"); ! if (!strcasecmp(Option, "CLONERES")) ! send_to_user(uptr, "\0020 = no action, 1 = warn IRC Ops, 2 = kill\002"); ! return(FALSE); ! } ! /* ok now to continue with xset.. */ ! ! UpCaseOpt = UpCase(Option); ! if (!strcmp(UpCaseOpt, "AUTOROUTING")) ! { ! if ((strlen(Value) > 1) || (!isdigit(Value[0]))) ! { ! send_to_user(uptr, "\002Error:\002 Value must be a single-digit number."); ! free(UpCaseOpt); ! return(FALSE); ! } ! Val = atoi(Value); ! if ((Val != 0) && (Val != 1)) ! { ! send_to_user(uptr, "\002Error:\002 Value must be either 0 or 1."); ! free(UpCaseOpt); ! return(FALSE); ! } ! if (AUTOROUTING == Val) ! { ! send_to_user(uptr, "AUTOROUTING is already set to %d.", AUTOROUTING); ! free(UpCaseOpt); ! return(FALSE); ! } ! AUTOROUTING = Val; ! send_wallops("AUTOROUTING %s by %s.", GetSetting(AUTOROUTING), uptr->Nick); ! } ! else if (!strcmp(UpCaseOpt, "PINGOUTCONNECT")) ! { ! if ((strlen(Value) > 1) || (!isdigit(Value[0]))) ! { ! send_to_user(uptr, "\002Error:\002 Value must be a single-digit number."); ! free(UpCaseOpt); ! return(FALSE); ! } ! Val = atoi(Value); ! if ((Val != 0) && (Val != 1)) ! { ! send_to_user(uptr, "\002Error:\002 Value must be either 0 or 1."); ! free(UpCaseOpt); ! return(FALSE); ! } ! if (PINGOUTCONNECT == Val) ! { ! send_to_user(uptr, "PINGOUTCONNECT is already set to %d.", PINGOUTCONNECT); ! free(UpCaseOpt); ! return(FALSE); ! } ! PINGOUTCONNECT = Val; ! send_wallops("PINGOUTCONNECT %s by %s.", GetSetting(PINGOUTCONNECT), uptr); ! } ! else if (!strcmp(UpCaseOpt, "GATECHECK")) ! { ! if ((strlen(Value) > 1) || (!isdigit(Value[0]))) ! { ! send_to_user(uptr, "\002Error:\002 Value must be a single-digit number."); ! free(UpCaseOpt); ! return(FALSE); ! } ! Val = atoi(Value); ! if ((Val < 0) || (Val > 2)) ! { ! send_to_user(uptr, "\002Error:\002 Value must be one of the following: 0 (no check), 1 (warn IRC Ops) or 2 (GLINE)."); ! free(UpCaseOpt); ! return(FALSE); ! } ! if (GATECHECK == Val) ! { ! send_to_user(uptr, "GATECHECK is already set to %d.", GATECHECK); ! free(UpCaseOpt); ! return(FALSE); ! } ! GATECHECK = Val; ! send_wallops("GATECHECK set to %d by %s.", GATECHECK, uptr->Nick); ! } ! else if (!strcmp(UpCaseOpt, "AUTOCONNECT")) ! { ! if ((strlen(Value) > 1) || (!isdigit(Value[0]))) ! { ! send_to_user(uptr, "\002Error:\002 Value must be a single-digit number."); ! free(UpCaseOpt); ! return(FALSE); ! } ! Val = atoi(Value); ! if ((Val != 0) && (Val != 1)) ! { ! send_to_user(uptr, "\002Error:\002 Value must be either 0 or 1."); ! free(UpCaseOpt); ! return(FALSE); ! } ! if (AUTOCONNECT == Val) ! { ! send_to_user(uptr, "AUTOCONNECT is already set to %d.", AUTOCONNECT); ! free(UpCaseOpt); ! return(FALSE); ! } ! AUTOCONNECT = Val; ! send_wallops("AUTOCONNECT %s by %s.", GetSetting(AUTOCONNECT), uptr->Nick); ! } ! else if (!strcmp(UpCaseOpt, "MAXCLONES")) ! { ! if ((strlen(Value) > 1) || (!isdigit(Value[0]))) ! { ! send_to_user(uptr, "\002Error:\002 Value must be a single-digit number."); ! free(UpCaseOpt); ! return(FALSE); ! } ! Val = atoi(Value); ! if (MAXCLONES == Val) ! { ! send_to_user(uptr, "MAXCLONES is already set to %d", MAXCLONES); ! free(UpCaseOpt); ! return(FALSE); ! } ! MAXCLONES = Val; ! send_wallops("MAXCLONES set to %d by %s.", MAXCLONES, uptr->Nick); ! } ! else if (!strcmp(UpCaseOpt, "CLONERES")) ! { ! if ((strlen(Value) > 1) || (!isdigit(Value[0]))) ! { ! send_to_user(uptr, "\002Error:\002 Value must be a single-digit number."); ! free(UpCaseOpt); ! return(FALSE); ! } ! Val = atoi(Value); ! if (Val > 3) ! { ! send_to_user(uptr, "\002Error:\002 Value must be in the range 0-3."); ! free(UpCaseOpt); ! return(FALSE); ! } ! if (CLONERES == Val) ! { ! send_to_user(uptr, "CLONERES is already set to %d.", CLONERES); ! free(UpCaseOpt); ! return(FALSE); ! } ! CLONERES = Val; ! send_wallops("CLONERES set to %s by %s.", GetCloneResMet(CLONERES), uptr->Nick); ! } ! else if (!strcmp(UpCaseOpt, "DEBUG")) ! { ! if (!(Value && *Value)) ! { ! free(UpCaseOpt); ! return(FALSE); ! } ! Val = atoi(Value); ! if ((Val < 0) || (Val > 99)) ! { ! send_to_user(uptr, "\002Error:\002 Value must be in the range 0-99."); ! free(UpCaseOpt); ! return(FALSE); ! } ! DEBUG = Val; ! send_wallops("DEBUG set to %d by %s.", DEBUG, uptr->Nick); ! free(UpCaseOpt); ! return(TRUE); ! } ! else if (!strcasecmp(UpCaseOpt, "DBTARGET")) ! { ! if (Value && *Value && (strcasecmp("NULL", Value))) ! { ! safecopy(DBTARGET, Value, MAXNICKLEN); ! send_wallops("DEBUG TARGET set to %s by %s.", DBTARGET, uptr->Nick); ! free(UpCaseOpt); ! return(TRUE); ! } ! else ! { ! strcpy(DBTARGET, ""); ! send_wallops("Debugging disabled by %s.", uptr->Nick); ! free(UpCaseOpt); ! return(TRUE); ! } ! } ! else ! { ! send_to_user(uptr, "Unknown setting '%s'.", Option); ! return(FALSE); ! } ! free(UpCaseOpt); ! return(TRUE); } --- 2360,2371 ---- } int c_set(C_PARAM) { ! return(do_set(C_PARAM_CALL)); } int c_xset(C_PARAM) { ! return(do_xset(C_PARAM_CALL)); } Index: config.h =================================================================== RCS file: /cvsroot/x2serv/x2/source/config.h,v retrieving revision 1.49 retrieving revision 1.50 diff -C2 -r1.49 -r1.50 *** config.h 2001/01/22 13:33:12 1.49 --- config.h 2001/01/23 14:20:24 1.50 *************** *** 277,293 **** #define Reg1 register - typedef struct set_listType - { - char *name; - int index; - int user; /* Is it a user modifyable thing? */ - int min; - int max; - int def; - char *description; - char *pre; - char settings[6][150]; - } set_list; - typedef enum { --- 277,280 ---- *************** *** 438,448 **** #define PROTECT 3 #define ENFMODES 4 ! #define PASSMODE 5 #define BANTIMEOUT 6 #define VOICE 7 #define USERINFO 8 #define INCHAN 9 ! /*#define SUSPENDED 10 I can't just take an option out */ ! #define UNUSED 10 /* so I've renamed it to UNUSED -Lysergine */ #define NODELETE 11 --- 425,434 ---- #define PROTECT 3 #define ENFMODES 4 ! /*#define PASSMODE 5 unused option have name "" */ #define BANTIMEOUT 6 #define VOICE 7 #define USERINFO 8 #define INCHAN 9 ! /*#define SUSPENDED 10 */ #define NODELETE 11 *************** *** 450,453 **** --- 436,453 ---- * this INCLUDES the 0th setting. (0-11 would be 12) */ #define NUMOFCHANSETTINGS 12 + + typedef struct set_listType + { + char *name; + int index; + int level; + int user; /* Is it a user modifyable thing? */ + int num; + int def; + char *description; + char *pre; + char settings[6][45]; + } set_list; + extern set_list set_commands[NUMOFCHANSETTINGS+1]; /* This is all we know about a NICK on IRC */ Index: main.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/main.c,v retrieving revision 1.46 retrieving revision 1.47 diff -C2 -r1.46 -r1.47 *** main.c 2001/01/22 07:24:33 1.46 --- main.c 2001/01/23 14:20:25 1.47 *************** *** 82,86 **** UpLinkList *CurUpLink; UpLinkList *UpLinks = NULL; - extern set_list set_commands[NUMOFCHANSETTINGS]; extern int REMOTE_AUTHENTICATED; --- 82,85 ---- *************** *** 463,471 **** /* If the suspended flag is used, convert it to the new system */ /* This is temporary code, to be removed after all files are converted */ ! if (settings[UNUSED]) { Suspended = malloc(strlen("Unknown reason") + 1); strcpy(Suspended, "Unknown reason"); ! settings[UNUSED] = 0; } continue; --- 462,470 ---- /* If the suspended flag is used, convert it to the new system */ /* This is temporary code, to be removed after all files are converted */ ! if (settings[10]) { Suspended = malloc(strlen("Unknown reason") + 1); strcpy(Suspended, "Unknown reason"); ! settings[10] = 0; } continue; |
From: Richard P. <lys...@us...> - 2001-01-23 14:16:11
|
Update of /cvsroot/x2serv/x2/source In directory usw-pr-cvs1:/tmp/cvs-serv15519 Added Files: set.h set.c Log Message: the new files for the set and xset commands --- NEW FILE --- int s_url(UserListType uptr, ChannelListType cptr, char *param); int s_description(UserListType uptr, ChannelListType cptr, char *param); int s_topic(UserListType uptr, ChannelListType cptr, char *param); int s_email(UserListType uptr, ChannelListType cptr, char *param); int s_mode(UserListType uptr, ChannelListType cptr, char *param); int xs_pingoutconnect(UserListType uptr, char *param); int xs_autorouting(UserListType uptr, char *param); int xs_autoconnect(UserListType uptr, char *param); int xs_gatecheck(UserListType uptr, char *param); int xs_maxclones(UserListType uptr, char *param); int xs_cloneres(UserListType uptr, char *param); int xs_debug(UserListType uptr, char *param); int xs_dbtarget(UserListType uptr, char *param); int do_set(C_PARAM); int do_xset(C_PARAM); --- NEW FILE --- #include "config.h" #include "commands.h" #include "set.h" set_list set_commands[NUMOFCHANSETTINGS+1] = /* Command index level user num default description short set0 set1 set2 set3 set4 set5 */ { { "TOPICFREQ", TOPICFREQ, CO, 1, 4, 1, "How frequently X2 sets the channel topic to its default.", "The Topic is refreshed: ", {"Never.", "Once a day.", "Twice a day.", "Every 4 hours.", "Every hour.", ""} } , { "STRICTOP", STRICTOP, MA, 1, 2, 0, "Does X2 allow non-users to be opped by others?", "Unknown users can be opped by: ", {"Anyone.", "Only OPs, MANAGERs, and (CO)OWNERs.", "Only MANAGERs and (CO)OWNERs.", "", "", ""} } , { "AUTOOP", AUTOOP, MA, 1, 3, 2, "Who does X2 autoop?", "X2 will Auto-op: ", {"Nobody", "Only MANAGERs and (CO)OWNERs.", "OPs, MANAGERs, and (CO)OWNERs.", "Everyone.", "", ""} } , { "PROTECT", PROTECT, CO, 1, 4, 0, "Who does X2 protect from whom?", "X2 will protect: ", {"No one from anyone.", "users from anyone of lower rank.", "users from anyone of equal or lower rank.", "Only MANAGERs, and (CO)OWNERs from everyone.", "Only (CO)OWNERS from everyone.", ""} } , { "ENFMODES", ENFMODES, MA, 1, 2, 0, "Should X2 force the default modes?", "Default modes can be overridden by: ", {"Everyone.", "Only OPs, MANAGERs, and (CO)OWNERs.", "Only MANAGERs and (CO)OWNERs.", "", "", ""} } , { /* This option isn't used anymore, so the name is an empty string */ "", 5, MA, 1, 1, 0, "Should X2 give ops to passworded users who are not verified?", "Users who have set a password, but have NOT authenticated: ", {"are NOT opped.", "are given ops anyway.", "", "", "", ""} } , { "BANTIMEOUT", BANTIMEOUT, MA, 1, 5, 0, "Should X2 remove old bans?", "Bans are removed: ", {"Never.", "After 10 minutes.", "After 2 hours.", "After 4 hours.", "After 24 hours.", "After one week."} } , { "VOICE", VOICE, MA, 1, 2, 1, "Should X2 give voice?", "Mode +v (voice) given to: ", {"Noone.", "Peons.", "Everyone.", "", "", ""} } , { "USERINFO", USERINFO, CO, 1, 1, 1, "Show userinfo lines?", "Show userinfo lines when users join?: ", {"No", "Yes", "", "", "", ""} } , { "INCHAN", INCHAN, CO, 1, 1, 1, "Does X2 enter the channel?", "Should X2 go into the channel?: ", {"No", "Yes", "", "", "", ""} } , { /* Option not used anymore */ "", 10, OW, 0, 1, 0, "Is it suspended?", "Has the channel been suspended by CService Admin?: ", {"No", "Yes", "", "", "", ""} } , { "NODELETE", NODELETE, 0, 0, 1, 0, "Is it exempted from deletion?", "Exempt from unvisited deletion rules?: ", { "No", "Yes", "", "", "", ""} } , { NULL, 0, 0, 0, 0, 0, NULL, "", {"", "", "", "", "", ""} } }; struct { char *name; int (*function)(UserListType uptr, ChannelListType cptr, char *param); int level; } on_set_commands[] = { { "url", s_url, CO }, { "description", s_description, CO }, { "topic", s_topic, MA }, { "email", s_email, OW }, { "modes", s_mode, MA }, { "mode", s_mode, MA }, { NULL, null(int(*)()), 0 } }; struct { char *name; int (*function)(UserListType uptr, char *param); } on_xset_commands[] = { { "pingoutconnect", xs_pingoutconnect }, { "autorouting", xs_autorouting }, { "autoconnect", xs_autoconnect }, { "gatecheck", xs_gatecheck }, { "maxclones", xs_maxclones }, { "cloneres", xs_cloneres }, { "debug", xs_debug }, { "dbtarget", xs_dbtarget }, { NULL, null(int(*)()) } }; void ShowSet(UserListType uptr, ChannelListType cptr, HandleListType hptr) { int i; char ModeString[LINEBUFFSIZE]; send_to_user(uptr, "=----------- %s Settings -------------=", cptr->Name); send_to_user(uptr, " \002Topic \002: %s", cptr->Topic); send_to_user(uptr, " \002Modes \002: %s", GetModeString(ModeString, cptr->PlusModes, cptr->MinModes, cptr->Key, cptr->Limit)); send_to_user(uptr, " \002URL \002: %s", cptr->URL); if (IsChanOwner(hptr)) { send_to_user(uptr, " \002E-MAIL \002: %s", cptr->Email); send_to_user(uptr, "NOTE: E-mail is visible to IRC Ops and Owners only;"); send_to_user(uptr, "It is used for verification of identity and contacting you."); } else if (IsOper(uptr)) { send_to_user(uptr, " \002E-MAIL \002: %s", cptr->Email); send_to_user(uptr, "NOTE: E-mail is for official IRC Op use ONLY! Do not give it out!"); } send_to_user(uptr, "\002Description \002: %s", cptr->Description); for (i = 0; set_commands[i].name != NULL; i++) { if (set_commands[i].name[0]) { if(set_commands[i].user) /* If its not an IRCOP only command */ send_to_user(uptr, "\002%10s\002 : %d \002%s\002%s", set_commands[i].name, cptr->settings[set_commands[i].index], set_commands[i].pre, set_commands[i].settings[cptr->settings[set_commands[i].index]]); } } send_to_user(uptr, "=- The following are set by IRCOPS only -="); for (i = 0; set_commands[i].name != NULL; i++) { if (set_commands[i].name[0]) { if(!set_commands[i].user) /* If it IS an IRCOP only command */ send_to_user(uptr, "\002%10s\002 : %d .%s.%s", set_commands[i].name, cptr->settings[set_commands[i].index], set_commands[i].pre, set_commands[i].settings[cptr->settings[set_commands[i].index]]); } } send_to_user(uptr, "=----------------- End ------------------="); } int s_url(UserListType uptr, ChannelListType cptr, char *param) { if(!param) send_to_user(uptr, "\002URL\002: %s", cptr->URL); else { free(cptr->URL); if(strlen(param) > MAXURLLEN) param[MAXURLLEN] = '\0'; if((cptr->URL = (char *) malloc(strlen(param) + 1))) { strcpy(cptr->URL, param); send_to_user(uptr, "\002URL set to\002: %s", cptr->URL); } else { send_to_user(uptr, "\002Error allocating memory for new URL!\002"); return(FALSE); } WriteChanOpFile(cptr); } return(TRUE); } int s_description(UserListType uptr, ChannelListType cptr, char *param) { if(!param) send_to_user(uptr, "\002Description\002: %s", cptr->Description); else { free(cptr->Description); if(strlen(param) > MAXDESCLEN) param[MAXDESCLEN] = '\0'; if((cptr->Description = (char *) malloc(strlen(param) + 1))) { strcpy(cptr->Description, param); send_to_user(uptr, "\002Description set to\002: %s", cptr->Description); } else { send_to_user(uptr, "\002Error allocating memory for new description!\002"); return(FALSE); } WriteChanOpFile(cptr); } return(TRUE); } int s_topic(UserListType uptr, ChannelListType cptr, char *param) { if (!param) send_to_user(uptr, "\002Topic\002: %s", cptr->Topic); else { free(cptr->Topic); if(strlen(param) > MAXTOPICLEN) param[MAXTOPICLEN] = '\0'; if((cptr->Topic = (char *) malloc(strlen(param) + 1))) { strcpy(cptr->Topic, param); send_to_user(uptr, "\002Default topic set to\002: %s", cptr->Topic); } else { send_to_user(uptr, "\002Error allocating memory for new topic!"); return(FALSE); } WriteChanOpFile(cptr); } return(TRUE); } int s_email(UserListType uptr, ChannelListType cptr, char *param) { if (!param) { send_to_user(uptr, "\002E-mail\002: %s [visible to owner and IRC Operators only]", cptr->Email); } else { free(cptr->Email); if(strlen(param) > MAXEMAILLEN) param[MAXEMAILLEN] = '\0'; if((cptr->Email = (char *) malloc(strlen(param) + 10))) { strcpy(cptr->Email, param); send_to_user(uptr, "\002Owner e-mail set to\002: %s", cptr->Email); } else { send_to_user(uptr, "\002Error allocating memory for new e-mail!"); return(FALSE); } WriteChanOpFile(cptr); } return(TRUE); } int s_mode(UserListType uptr, ChannelListType cptr, char *param) { int n; char ModeString[LINEBUFFSIZE]; if (!param) { send_to_user(uptr, "\002Mode: %s", GetModeString(ModeString, cptr->PlusModes, cptr->MinModes, cptr->Key, cptr->Limit)); } else { for(n=strlen(param)-1;n>=0;n--) { if(isblank(param[n])) param[n] = '\0'; else break; } ConvertModeString(param, &cptr->PlusModes, &cptr->MinModes, &cptr->Key, &cptr->Limit); if(cptr->settings[INCHAN]) { send_chanmode(cptr, "-k %s", cptr->CurrentKey); send_chanmode(cptr, "%s", GetModeString(ModeString, cptr->PlusModes, cptr->MinModes, cptr->Key, cptr->Limit)); } send_to_user(uptr, "\002Default mode set to: %s", ModeString); if (cptr->Key) safecopy(cptr->CurrentKey, cptr->Key, MAXCHANKEY); else strcpy(cptr->CurrentKey, ""); WriteChanOpFile(cptr); } return(TRUE); } void ShowSetOption(UserListType uptr, ChannelListType cptr, int i) { int curset; int j; curset = cptr->settings[set_commands[i].index]; send_to_user(uptr, "=-----------------------------="); send_to_user(uptr, "\002%s\002: %s\002", set_commands[i].name, set_commands[i].pre); send_to_user(uptr, "=---- \002*\002 indicates current ----="); for (j = 0; j < 6; j++) { if (set_commands[i].settings[j][0] == 0) break; if (j == curset) send_to_user(uptr, " %d: [\002*\002] %s", j, set_commands[i].settings[j]); else send_to_user(uptr, " %d: [ ] %s", j, set_commands[i].settings[j]); } send_to_user(uptr, "=------------ End ------------="); } int do_set(C_PARAM) { char ModeString[LINEBUFFSIZE]; char *option, *param; int i, j, value; option = strtok(rest, " "); param = strtok(NULL, "\n"); if (!option) { ShowSet(uptr, cptr, hptr); return(TRUE); } for (i = 0; on_set_commands[i].name; ++i) { if (!strcasecmp(option, on_set_commands[i].name)) { if (IsGodOper(uptr) || (hptr && (userlevelbychar(hptr->Level) >= on_set_commands[i].level))) return on_set_commands[i].function(uptr, cptr, param); else { send_to_user(uptr, "\002set %s\002: Access denied.", on_set_commands[i].name); return FALSE; } } } for (i = 0; set_commands[i].name != NULL; i++) { if (!set_commands[i].name[0]) continue; if (!strcasecmp(option, set_commands[i].name)) { if (!param) /* No parameter. */ { ShowSetOption(uptr, cptr, i); return(TRUE); } else if (!IsGodOper(uptr) && (!hptr || userlevelbychar(hptr->Level) < set_commands[i].level)) { send_to_user(uptr, "\002set %s\002: Access denied.", param); return(FALSE); } if (!set_commands[i].user && !IsGodOper(uptr)) { send_to_user(uptr, "\002%s\002 can only be modified by the Channel Service administrators.", param); return(FALSE); } if (sscanf(param, "%d", &value) != 1) { send_to_user(uptr, "\002Error: Parameter must be a number.\002"); return(FALSE); } if ((value < 0) || (value > set_commands[i].num)) { send_to_user(uptr, "\002Error: %s must be in the range 0-%d.", set_commands[i].name, set_commands[i].num); return(FALSE); } if(value == cptr->settings[set_commands[i].index]) { send_to_user(uptr, "%s already set to %d", option, value); return(FALSE); } if(set_commands[i].index == INCHAN && cptr->Suspended) { send_to_user(uptr, "Channel %s has been suspended by the Channel Service Admins.", cptr->Name); send_to_user(uptr, "E-mail cse...@af... for more information."); return(FALSE); } /* everything is ok, so apply the new value */ cptr->settings[set_commands[i].index] = value; WriteChanOpFile(cptr); send_to_user(uptr, "\002%s\002 set to %d. \"\002%s\002%s\"", set_commands[i].name, value, set_commands[i].pre, set_commands[i].settings[value]); /* check if inchan changed */ if(set_commands[i].index == INCHAN) { if(cptr->settings[INCHAN] == 0) /* Leave the channel */ { send_to_user(uptr, "Leaving disabled channel %s. \002/msg %s %s set INCHAN 1\002 to re-enable.", cptr->Name, IrcNick, cptr->Name); send_part(cptr, "Disabled by %s.", uptr->Nick); } else /* Join the channel */ { send_to_user(uptr, "Rejoining channel %s.", cptr->Name); send_join(cptr); send_opchan(cptr); send_chanmode(cptr, "%s", GetModeString(ModeString, cptr->PlusModes, cptr->MinModes, cptr->Key, cptr->Limit)); if (strcmp(cptr->Topic, "*") && cptr->settings[TOPICFREQ]) send_topic(cptr, cptr->Topic); } } return(TRUE); } } send_to_user(uptr, "Unknown setting [\002%s\002].", option); return(FALSE); } void ShowXSet(UserListType uptr) { send_to_user(uptr, "=------- X2 Net Settings -------------="); send_to_user(uptr, "\002 PINGOUTCONNECT\002: %s", GetSetting(PINGOUTCONNECT)); send_to_user(uptr, "\002 AUTOROUTING \002: %s", GetSetting(AUTOROUTING)); send_to_user(uptr, "\002 AUTOCONNECT \002: %s", GetSetting(AUTOCONNECT)); send_to_user(uptr, "\002 GATECHECK \002: %s", GetWinGateMet(GATECHECK)); send_to_user(uptr, "\002 MAXCLONES \002: %d", MAXCLONES); send_to_user(uptr, "\002 CLONERES \002: %s", GetCloneResMet(CLONERES)); send_to_user(uptr, "\002 DEBUG \002: %d", DEBUG); if (*DBTARGET) send_to_user(uptr, "\002 DBTARGET \002: %s", DBTARGET); else send_to_user(uptr, "\002 DBTARGET \002: NULL"); send_to_user(uptr, "=----------------- End ------------------="); } int GetVal(UserListType uptr, char *param, int Max, int *Val) { *Val = atoi(param); if ((*Val < 0) || (*Val > Max)) { send_to_user(uptr, "\002Error:\002 Value must be in the range 0..%d.", Max); return(FALSE); } return(TRUE); } int xs_pingoutconnect(UserListType uptr, char *param) { int Val; if (!GetVal(uptr, param, 1, &Val)) { return(FALSE); } if (PINGOUTCONNECT == Val) { send_to_user(uptr, "PINGOUTCONNECT is already set to %d.", PINGOUTCONNECT); return(FALSE); } PINGOUTCONNECT = Val; send_wallops("PINGOUTCONNECT set to %s by %s.", GetSetting(PINGOUTCONNECT), uptr); } int xs_autorouting(UserListType uptr, char *param) { int Val; if (!GetVal(uptr, param, 1, &Val)) { return(FALSE); } if (AUTOROUTING == Val) { send_to_user(uptr, "AUTOROUTING is already set to %d.", AUTOROUTING); return(FALSE); } AUTOROUTING = Val; send_wallops("AUTOROUTING set to %s by %s.", GetSetting(AUTOROUTING), uptr->Nick); } int xs_autoconnect(UserListType uptr, char *param) { int Val; if (!GetVal(uptr, param, 1, &Val)) { return(FALSE); } if (AUTOCONNECT == Val) { send_to_user(uptr, "AUTOCONNECT is already set to %d.", AUTOCONNECT); return(FALSE); } AUTOCONNECT = Val; send_wallops("AUTOCONNECT %s by %s.", GetSetting(AUTOCONNECT), uptr->Nick); } int xs_gatecheck(UserListType uptr, char *param) { int Val; if (!GetVal(uptr, param, 2, &Val)) { return(FALSE); } if (GATECHECK == Val) { send_to_user(uptr, "GATECHECK is already set to %d.", GATECHECK); return(FALSE); } GATECHECK = Val; send_wallops("GATECHECK set to %d by %s.", GATECHECK, uptr->Nick); } int xs_maxclones(UserListType uptr, char *param) { int Val; if (!GetVal(uptr, param, 99, &Val)) { return(FALSE); } if (MAXCLONES == Val) { send_to_user(uptr, "MAXCLONES is already set to %d", MAXCLONES); return(FALSE); } MAXCLONES = Val; send_wallops("MAXCLONES set to %d by %s.", MAXCLONES, uptr->Nick); } int xs_cloneres(UserListType uptr, char *param) { int Val; if (!GetVal(uptr, param, 3, &Val)) { return(FALSE); } if (CLONERES == Val) { send_to_user(uptr, "CLONERES is already set to %d.", CLONERES); return(FALSE); } CLONERES = Val; send_wallops("CLONERES set to %s by %s.", GetCloneResMet(CLONERES), uptr->Nick); } int xs_debug(UserListType uptr, char *param) { int Val; if (!GetVal(uptr, param, 99, &Val)) { return(FALSE); } DEBUG = Val; send_wallops("DEBUG set to %d by %s.", DEBUG, uptr->Nick); return(TRUE); } int xs_dbtarget(UserListType uptr, char *param) { if (param && *param && (strcasecmp("NULL", param))) { safecopy(DBTARGET, param, MAXNICKLEN); send_wallops("DEBUG TARGET set to %s by %s.", DBTARGET, uptr->Nick); return(TRUE); } else { strcpy(DBTARGET, ""); send_wallops("Debugging disabled by %s.", uptr->Nick); return(TRUE); } } int do_xset(C_PARAM) { char *Option, *param; int Val; int i; Option = strtok(rest, " "); param = strtok(NULL, "\0"); if (!Option) { ShowXSet(uptr); return(TRUE); } if (!IsOper(uptr)) { send_to_user(uptr, "\002xset %s\002: Access denied.", Option); return(FALSE); } if (!param) { send_to_user(uptr, "\002Set %s to what?\002", Option); if (!strcasecmp(Option, "ENFORCE")) send_to_user(uptr, "\0020 = disabled, 1 = enabled.\002"); if (!strcasecmp(Option, "GATECHECK")) send_to_user(uptr, "\0020 = no action, 1 = warn IRC Ops, 2 = GLINE.\002"); if (!strcasecmp(Option, "CLONERES")) send_to_user(uptr, "\0020 = no action, 1 = warn IRC Ops, 2 = kill\002"); return(FALSE); } for (i = 0; on_xset_commands[i].name; ++i) { if (!strcasecmp(on_xset_commands[i].name, Option)) { return(on_xset_commands[i].function(uptr, param)); } } send_to_user(uptr, "Unknown setting '%s'.", Option); return(FALSE); } |
From: Alex S. <ru...@us...> - 2001-01-22 19:03:39
|
Update of /cvsroot/x2serv/x2/source In directory usw-pr-cvs1:/tmp/cvs-serv30120 Modified Files: parse.c Log Message: Put a check for correct protocol on the uplink, and a nice explination how x2 works only with universal ircd. 90% of the time people come into afternet harasing us for help when they are trying to run x2 with dreamforge or something. Index: parse.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/parse.c,v retrieving revision 1.55 retrieving revision 1.56 diff -C2 -r1.55 -r1.56 *** parse.c 2001/01/17 04:00:21 1.55 --- parse.c 2001/01/22 19:03:53 1.56 *************** *** 1094,1097 **** --- 1094,1108 ---- return; } + Debug(DBGINFO, "PROTOCOL: %s", Arg[5]); + if(strcmp(Arg[5], "J10")) /* If Arg[5] is not "J10" then.. */ + { + Debug(DBGWARNING, "UNKNOWN protocol. This is NOT a compatable irc daemon."); + Debug(DBGWARNING, "Currently X2 works with the following irc servers:"); + Debug(DBGWARNING, " Universal ircd - http://ircu.sourceforge.net"); + Debug(DBGWARNING, "OLD Undernet ircd - 2.10.07 and lower P10 versions."); + Debug(DBGWARNING, ""); + Debug(DBGWARNING, "Making x2 work with other versions requires serious rewriting."); + sleep(4); + } for(UpLinkPtr = UpLinks;UpLinkPtr;UpLinkPtr = UpLinkPtr->Next) { |
From: Richard P. <lys...@us...> - 2001-01-22 13:33:00
|
Update of /cvsroot/x2serv/x2/source In directory usw-pr-cvs1:/tmp/cvs-serv13233 Modified Files: commands.c config.h user.c Log Message: added invite flood protection. Users can invite 4 times at once, and after that once every 40 secs Index: commands.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/commands.c,v retrieving revision 1.125 retrieving revision 1.126 diff -C2 -r1.125 -r1.126 *** commands.c 2001/01/22 07:24:33 1.125 --- commands.c 2001/01/22 13:33:12 1.126 *************** *** 1279,1283 **** --- 1279,1285 ---- char* targetnick; UserListType target; + time_t Now; targetnick = strtok(rest, " "); + if(!targetnick || !*targetnick) { *************** *** 1291,1294 **** --- 1293,1308 ---- return(FALSE); } + + Now = time(NULL); + if(uptr->LastInvite < Now) + { + uptr->LastInvite = Now; + } + if (uptr->LastInvite - Now > MAXINVITE) + { + send_to_user(uptr, "Please do not abuse invite, you are using it too much"); + return(FALSE); + } + uptr->LastInvite += DELTAINVITE; send_invite(cptr, target); Index: config.h =================================================================== RCS file: /cvsroot/x2serv/x2/source/config.h,v retrieving revision 1.48 retrieving revision 1.49 diff -C2 -r1.48 -r1.49 *** config.h 2001/01/19 23:45:01 1.48 --- config.h 2001/01/22 13:33:12 1.49 *************** *** 191,194 **** --- 191,199 ---- #define BURSTCHANNELDATE 691085573 /* Mon Nov 25 08:12:53 1991 */ + /* These are the constants that determine how often a user can use + * X2's invite. + */ + #define MAXINVITE 120 + #define DELTAINVITE 40 /* These are for channel mode parsing */ *************** *** 460,463 **** --- 465,469 ---- int Clones; unsigned int Modes:10; /* 0 0 0 0 0 0 0 0 0 = bits */ + time_t LastInvite; struct UserStruct *NextA; struct UserStruct *NextN; Index: user.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/user.c,v retrieving revision 1.31 retrieving revision 1.32 diff -C2 -r1.31 -r1.32 *** user.c 2000/10/16 01:59:25 1.31 --- user.c 2001/01/22 13:33:12 1.32 *************** *** 231,234 **** --- 231,235 ---- NewUser->AuthHandles = NULL; NewUser->Chans = NULL; + NewUser->LastInvite = time(NULL); Key = Hash(Address); |
From: Alex S. <ru...@us...> - 2001-01-22 07:24:21
|
Update of /cvsroot/x2serv/x2/source In directory usw-pr-cvs1:/tmp/cvs-serv25992/source Modified Files: chan.c chan.h commands.c main.c route.c server.c Log Message: Fixed several descrepencies with number of people joined to a channel, where x2 wasnt properly counting itself in several situations. Also properly handling a disconnection from the network (deleting channel bans etc). This may solve the random Debug() notices about joined more then once, etc. Index: chan.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/chan.c,v retrieving revision 1.66 retrieving revision 1.67 diff -C2 -r1.66 -r1.67 *** chan.c 2001/01/20 00:54:34 1.66 --- chan.c 2001/01/22 07:24:33 1.67 *************** *** 945,948 **** --- 945,960 ---- } + /* If they do not have an email address set, nag them. */ + if(IsChanOwner(hptr)) + { + if(ChanNode->Email[0] == '*') + { + send_to_user(UserNode, "This version of X2 requires a valid email address be set for each channel."); + send_to_user(UserNode, "That way, if you forget a password, X2 can automatically email you to recover access."); + send_to_user(UserNode, "Please .set email your@email or /msg %s set %s email your@emailaddy.", IrcNick, ChanNode->Name); + send_to_user(UserNode, "Your email address will be used ONLY for identification or Channel service related email notices. We won't let spammers get ahold of it (Indeed, only you and our IRC Operators will even be able to see it."); + } + } + /* Figure out if we should op them.. */ if(IsChanAOp(hptr)) *************** *** 1118,1125 **** } ! void KillChanList() { ! ChannelCount = 0; } int DelChan(char *Channel) --- 1130,1165 ---- } ! /* called when x2 is disconnected - reset the channel structures to something ! * reflecting the fact that they are empty */ ! void ClearAllChans() { ! int i; ! ChannelListType cptr; ! BanListType bptr, nextbptr; ! ! for (i = 0; i < CHANSEGSIZE; i++) ! { ! cptr = Channels->Table[i]; ! ! while(cptr) ! { ! cptr->OwnersOnline = 0; ! strcpy(cptr->CurrentKey, ""); ! for(bptr = cptr->banned;bptr;bptr = nextbptr) ! { ! nextbptr = bptr->Next; ! free(bptr); ! } ! cptr->NumOfNicks = 0; ! if(cptr->Joined != NULL) ! { ! Debug(DBGWARNING, "We are clearing a channel that still has people joined to it."); ! } ! cptr->Joined = NULL; /* A memory leak, if the above was triggered.. but shouldnt happen. */ ! cptr = cptr->Next; ! } ! } } + int DelChan(char *Channel) Index: chan.h =================================================================== RCS file: /cvsroot/x2serv/x2/source/chan.h,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -r1.25 -r1.26 *** chan.h 2000/11/18 18:26:27 1.25 --- chan.h 2001/01/22 07:24:33 1.26 *************** *** 1,2 **** --- 1,3 ---- + void ClearAllChans(); int isjoined(ChannelListType cptr, UserListType uptr); int DelLamer(ChannelListType cptr, char* Mask); Index: commands.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/commands.c,v retrieving revision 1.124 retrieving revision 1.125 diff -C2 -r1.124 -r1.125 *** commands.c 2001/01/19 23:45:01 1.124 --- commands.c 2001/01/22 07:24:33 1.125 *************** *** 1688,1693 **** } send_squit(Uplink, "Quitting as requested by %s.", uptr->Nick); - KillChanList(); - KillUserList(); KillServerList(); unlink("./x2.pid"); --- 1688,1691 ---- *************** *** 1705,1709 **** return(FALSE); } ! if (!rest || !*rest) { send_to_user(uptr, "Please input a reason"); return(FALSE); --- 1703,1708 ---- return(FALSE); } ! if (!rest || !*rest) ! { send_to_user(uptr, "Please input a reason"); return(FALSE); *************** *** 2734,2737 **** --- 2733,2741 ---- ChangedINCHAN = TRUE; } + if(value == cptr->settings[set_commands[i].index]) + { + send_to_user(uptr, "%s already set to %d", option, value); + return(FALSE); + } cptr->settings[set_commands[i].index] = value; WriteChanOpFile(cptr); *************** *** 4078,4082 **** return(FALSE); } ! sprintf(buff, "%s %s", ChanName, OwnerEmail); send_to_user(uptr, "\002=------- Beginning Register -------=\002"); tmpstr = rest; --- 4082,4086 ---- return(FALSE); } ! sprintf(buff, "%s", OwnerEmail); send_to_user(uptr, "\002=------- Beginning Register -------=\002"); tmpstr = rest; Index: main.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/main.c,v retrieving revision 1.45 retrieving revision 1.46 diff -C2 -r1.45 -r1.46 *** main.c 2001/01/19 23:45:01 1.45 --- main.c 2001/01/22 07:24:33 1.46 *************** *** 434,437 **** --- 434,441 ---- case 'E': /* Email */ ptrbuff = (char *)mysep(&lb, "\n"); + if(ptrbuff[0] == '#') + { /* Fix some corruption problems i had */ + ptrbuff = "*"; + } safecopy(ChanEmail, ptrbuff, LINEBUFFSIZE); continue; *************** *** 791,795 **** Authenticated = FALSE; KillServerList(); ! KillUserList(); OperCount = 0; if(AUTOCONNECT) /* If we should try to connect */ --- 795,801 ---- Authenticated = FALSE; KillServerList(); ! /* Are there any users if there are no servers?? */ ! /* KillUserList(); */ ! ClearAllChans(); OperCount = 0; if(AUTOCONNECT) /* If we should try to connect */ Index: route.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/route.c,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -r1.9 -r1.10 *** route.c 2000/11/30 09:15:03 1.9 --- route.c 2001/01/22 07:24:33 1.10 *************** *** 449,453 **** if(!(rptr = FindRouteListServer(Route, server))) { ! Debug(DBGWARNING, "HandleFailedConnect(): Couldnt find target's routing entry"); return; } --- 449,453 ---- if(!(rptr = FindRouteListServer(Route, server))) { ! Debug(DBGINFO, "I have no prefered routing information for server %s", server); return; } Index: server.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/server.c,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -r1.10 -r1.11 *** server.c 2000/08/31 08:00:55 1.10 --- server.c 2001/01/22 07:24:33 1.11 *************** *** 455,458 **** --- 455,459 ---- TempPtr = CurrPtr; CurrPtr = CurrPtr->NextA; + DeleteAllUsersByServer(TempPtr->Name); free(TempPtr->Name); free(TempPtr->LinkName); |
From: Alex S. <ru...@us...> - 2001-01-20 00:54:28
|
Update of /cvsroot/x2serv/x2 In directory usw-pr-cvs1:/tmp/cvs-serv29103 Added Files: lamer.log Log Message: lamer.log is an example of how NOT to ask for help about x2, and its rather amusing too! --- NEW FILE --- After a short discussion in #afternet about how its not appropreate to discuss his own private X2 in channel #Afternet (where we give help for AfterNET's x2) the moron in question began private messing me. ------------------- <Darkken> hey <Darkken> im not even stupid <Rubin> 5.xxx? <Rubin> that encapsulates every version of x2 in the last year. <Darkken> 5.0.3 <Rubin> 5.0.3 is old. <Darkken> the version of X2 <Darkken> mmmm <Darkken> which version is X2 using now ? <Rubin> first thing <Rubin> if you arn't using ircu2.10.07 or lower <Rubin> dont bother me. <Darkken> i am <Rubin> if your just fooling around with your own network <Rubin> what you need to do is <Rubin> get 5.0.99 from CVS <Rubin> get the latest universal ircd http://ircu.sourceforge.net <Darkken> mmmmm <Darkken> and <Darkken> where do I download ircu2.10.07 <Darkken> cause i have ircu2.10.08 <Rubin> ugh <Darkken> man <Rubin> <Rubin> if you arn't using ircu2.10.07 or lower <Rubin> <Darkken> i am <Darkken> why u always say ugh ? <Rubin> u lied to me? <Rubin> i say ugh <Rubin> coz ppl like you come on here <Darkken> mm <Rubin> and act holy inapropreate <Rubin> demanding help for your own irc network <Rubin> when yo udont know jack shit about ircd <Darkken> cause u said If u need help, come tos erver irc.afternet.org <Rubin> or C <Rubin> or services <Darkken> from ur damn README file <Rubin> x2 is not a toy for newbies <Darkken> I know bastard <Rubin> fuck off <Darkken> i know about IRCD and C and services <Darkken> and dont even fuck me off <Rubin> u have some fuckin nerv comming here calling me a bastard <Rubin> i could give a shit if you use x2 or not <Darkken> u dont want me see get pissed <Rubin> i release it as a goddamn favor <Rubin> i dont want your arrogant ass on my channels all day being a fucking dickhead. <Darkken> see <Darkken> this is ur ip <Darkken> 128.193.232.142 <Rubin> oh <Rubin> u threattning me now? <Rubin> u wana play games child? <Darkken> u fucking little annoying bitch <Rubin> unbelievable. -------- At this point i figured I should take a look at who I was dealing with.. so i did a /who darkken -------- (O) Who list for darkken #afternet Darkken H Darkken@AC90B93D.ipt.aol.com (Darkken) <Rubin> hahahahaha <Rubin> this from a fucking AOL user!!! * Rubin rolling on the floor <Darkken> mmmm <Rubin> get out of here dude. <Darkken> its on fucking vhost from my fucking aol fucking friends <Rubin> b4 u get hurt <Darkken> mmmmm <Darkken> like what <Darkken> little motherfucker <Darkken> it wont let me download ircu.2.10.07 >x2< #afternet addlamer darkken -X2- A lamer with hostmask [*!*Darkken@*.aol.com] successfully added to the #AfterNET lamerlist! <Darkken> good >x2< #operations addlamer darkken <Darkken> u banned me -X2- A lamer with hostmask [*!*Darkken@*.aol.com] successfully added to the #operations lamerlist! <Darkken> im so proud of u ------- By now he realized i wasnt talking to him anymore and left. We all got a lot of amusment out of this, hope you did too (: -Rubin |
From: Alex S. <ru...@us...> - 2001-01-20 00:54:28
|
Update of /cvsroot/x2serv/x2/source In directory usw-pr-cvs1:/tmp/cvs-serv29103/source Modified Files: chan.c Log Message: lamer.log is an example of how NOT to ask for help about x2, and its rather amusing too! Index: chan.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/chan.c,v retrieving revision 1.65 retrieving revision 1.66 diff -C2 -r1.65 -r1.66 *** chan.c 2001/01/19 23:37:10 1.65 --- chan.c 2001/01/20 00:54:34 1.66 *************** *** 1169,1173 **** for(bptr = CurrPtr->banned;bptr;bptr = Nextbptr) { ! Nextcptr = bptr->Next; free(bptr); } --- 1169,1173 ---- for(bptr = CurrPtr->banned;bptr;bptr = Nextbptr) { ! Nextbptr = bptr->Next; free(bptr); } |
From: Alex S. <ru...@us...> - 2001-01-19 23:44:55
|
Update of /cvsroot/x2serv/x2/source In directory usw-pr-cvs1:/tmp/cvs-serv22608 Modified Files: commands.c config.h main.c Log Message: Changed some string length defines and checks in the .b command. Some other patches.. working toward less 'guessy' string length management. Index: commands.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/commands.c,v retrieving revision 1.123 retrieving revision 1.124 diff -C2 -r1.123 -r1.124 *** commands.c 2001/01/19 01:40:18 1.123 --- commands.c 2001/01/19 23:45:01 1.124 *************** *** 521,525 **** UserListType UserNode; char *nick, *user, *host; ! char tmpbuf[MAXLEN]; rest = (char *) strtok(rest, " "); --- 521,525 ---- UserListType UserNode; char *nick, *user, *host; ! char tmpbuf[MAXBANLEN]; rest = (char *) strtok(rest, " "); *************** *** 563,567 **** return(FALSE); } ! strncpy(tmpbuf, rest, MAXLEN); tmpbuf[MAXLEN - 1] = '\0'; nick = strtok(tmpbuf, "!"); --- 563,572 ---- return(FALSE); } ! if(strlen(rest) > MAXBANLEN) ! { ! send_to_user(uptr, "Ban too long"); ! return(FALSE); ! } ! safecopy(tmpbuf, rest, MAXBANLEN-1); tmpbuf[MAXLEN - 1] = '\0'; nick = strtok(tmpbuf, "!"); Index: config.h =================================================================== RCS file: /cvsroot/x2serv/x2/source/config.h,v retrieving revision 1.47 retrieving revision 1.48 diff -C2 -r1.47 -r1.48 *** config.h 2001/01/12 10:34:34 1.47 --- config.h 2001/01/19 23:45:01 1.48 *************** *** 145,148 **** --- 145,150 ---- #define MAXCHANLISTLEN 500 + + #define MAXBANLEN 150 /* Make sure this is (+1?) larger than your networks nick length. * The default is 9. AfterNET runs 30. */ *************** *** 373,377 **** typedef struct BanStruct { ! char banstring[MAXLEN]; /* banned nick!user@host */ time_t time; struct BanStruct *Next; /* Next ban */ --- 375,379 ---- typedef struct BanStruct { ! char banstring[MAXBANLEN]; /* banned nick!user@host */ time_t time; struct BanStruct *Next; /* Next ban */ *************** *** 611,615 **** Uplink[MAXLEN], ServAddress[16], Password[20], IrcNick[MAXNICKLEN], ! CommandMark, HomeDir[MAXLEN]; extern int ServiceNumeric; --- 613,617 ---- Uplink[MAXLEN], ServAddress[16], Password[20], IrcNick[MAXNICKLEN], ! CommandMark, HomeDir[2048]; extern int ServiceNumeric; Index: main.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/main.c,v retrieving revision 1.44 retrieving revision 1.45 diff -C2 -r1.44 -r1.45 *** main.c 2001/01/12 12:37:21 1.44 --- main.c 2001/01/19 23:45:01 1.45 *************** *** 43,47 **** Uplink[MAXLEN], ServAddress[16], Password[20], IrcNick[MAXNICKLEN], ! CommandMark, HomeDir[MAXLEN]; int ServiceNumeric = 53; char NumNick[NUMNICKLEN] = "1X2"; --- 43,47 ---- Uplink[MAXLEN], ServAddress[16], Password[20], IrcNick[MAXNICKLEN], ! CommandMark, HomeDir[2048]; int ServiceNumeric = 53; char NumNick[NUMNICKLEN] = "1X2"; |
From: Alex S. <ru...@us...> - 2001-01-19 23:37:05
|
Update of /cvsroot/x2serv/x2/source In directory usw-pr-cvs1:/tmp/cvs-serv21928 Modified Files: chan.c Log Message: Cleaned up the banned handling functions a bit. Discovered a bugin DelChan where the banned list was being free'd but the inital pointer not set to NULL.. THEN the function would call channel_massunban (which it should NOT have been calling at all) which would crash, due to cptr->banned being free'd random value. Index: chan.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/chan.c,v retrieving revision 1.64 retrieving revision 1.65 diff -C2 -r1.64 -r1.65 *** chan.c 2001/01/14 19:04:55 1.64 --- chan.c 2001/01/19 23:37:10 1.65 *************** *** 1129,1133 **** ChannelUsersListType jptr, jptr_next; LamerListType lptr, lptr_next; ! BanListType bptr, bptr_next; int Pos; --- 1129,1133 ---- ChannelUsersListType jptr, jptr_next; LamerListType lptr, lptr_next; ! BanListType bptr, Nextbptr; int Pos; *************** *** 1161,1170 **** DelHandle(CurrPtr, hptr); } - /* Delete bans */ - for(bptr = CurrPtr->banned;bptr; bptr = bptr_next) - { - bptr_next = bptr->Next; - free(bptr); - } /* Delete channeluser's entries */ for(jptr = CurrPtr->Joined;jptr;jptr = jptr_next) --- 1161,1164 ---- *************** *** 1173,1177 **** free(jptr); } ! channel_massunban(CurrPtr); /* Delete lamer list */ for(lptr = CurrPtr->Lamers;lptr;lptr = lptr_next) --- 1167,1176 ---- free(jptr); } ! for(bptr = CurrPtr->banned;bptr;bptr = Nextbptr) ! { ! Nextcptr = bptr->Next; ! free(bptr); ! } ! CurrPtr->banned = NULL; /* Delete lamer list */ for(lptr = CurrPtr->Lamers;lptr;lptr = lptr_next) *************** *** 1594,1617 **** int delete_ban(ChannelListType cptr, char *banstring) { ! BanListType *b_list; ! BanListType *old; ! BanListType Dummy; ! b_list = &cptr->banned; ! if ((Dummy = search_ban(cptr, banstring)) == NULL) return (FALSE); ! for (old = b_list; *old; old = &(*old)->Next) { ! Debug(DBGINFO, "*** In delete_ban loop: %s\n", &(*old)->banstring); ! if (*old == Dummy) { ! Debug(DBGINFO, "*** Found the match."); ! *old = Dummy->Next; ! free(Dummy); return (TRUE); } } - Debug(DBGINFO, "*** NULL encountered. Ban not found. Returning.\n"); return (FALSE); } --- 1593,1616 ---- int delete_ban(ChannelListType cptr, char *banstring) { ! BanListType bptr; ! BanListType theban; ! BanListType PrevBan; ! if ((theban = search_ban(cptr, banstring)) == NULL) return (FALSE); ! for (bptr = PrevBan = cptr->banned; bptr; bptr = bptr->Next) { ! if (bptr == theban) { ! if(bptr == cptr->banned) ! cptr->banned = bptr->Next; ! else ! PrevBan->Next = bptr->Next; ! free(bptr); return (TRUE); } + PrevBan = bptr; } return (FALSE); } *************** *** 1808,1812 **** int channel_massunban(ChannelListType Channel) { ! BanListType Dummy; char unbanmode[10]; char unbanstring[1024]; --- 1807,1811 ---- int channel_massunban(ChannelListType Channel) { ! BanListType bptr, oldbptr; char unbanmode[10]; char unbanstring[1024]; *************** *** 1820,1825 **** if(Channel->settings[INCHAN] == FALSE) return(0); /* Not in channel */ ! Dummy = Channel->banned; ! while (Dummy) { /* We can't just -bbb ban1 ban2, --- 1819,1824 ---- if(Channel->settings[INCHAN] == FALSE) return(0); /* Not in channel */ ! bptr = Channel->banned; ! while (bptr) { /* We can't just -bbb ban1 ban2, *************** *** 1829,1839 **** strcpy(unbanstring, ""); i = 0; ! while (Dummy && (i < 6)) { strcat(unbanmode, "b"); strcat(unbanstring, " "); ! strcat(unbanstring, Dummy->banstring); i++; ! Dummy = Dummy->Next; found++; } --- 1828,1840 ---- strcpy(unbanstring, ""); i = 0; ! while (bptr && (i < 6)) { strcat(unbanmode, "b"); strcat(unbanstring, " "); ! strcat(unbanstring, bptr->banstring); i++; ! oldbptr = bptr; ! bptr = bptr->Next; ! free(oldbptr); found++; } *************** *** 1849,1853 **** int channel_unban(ChannelListType Channel, char* banstring) { ! BanListType Dummy, tmp; char unbanmode[5]; char unbanstring[MAXLEN]; --- 1850,1854 ---- int channel_unban(ChannelListType Channel, char* banstring) { ! BanListType bptr, tmp; char unbanmode[5]; char unbanstring[MAXLEN]; *************** *** 1861,1884 **** return(0); /* Not in channel */ } ! Dummy = Channel->banned; ! while (Dummy) { strcpy(unbanmode, "-"); strcpy(unbanstring, ""); i = 0; ! while (Dummy && (i < 3)) { ! tmp = Dummy->Next; ! if (!matches(Dummy->banstring, banstring) || !strcmp(banstring, Dummy->banstring)) { strcat(unbanmode, "b"); strcat(unbanstring, " "); ! strcat(unbanstring, Dummy->banstring); ! Debug(DBGINFO, "*** channel_unban calling delete_ban for %s", Dummy->banstring); ! delete_ban(Channel, Dummy->banstring); i++; found++; } ! Dummy = tmp; } send_chanmode(Channel, "%s %s", unbanmode, unbanstring); --- 1862,1885 ---- return(0); /* Not in channel */ } ! bptr = Channel->banned; ! while (bptr) { strcpy(unbanmode, "-"); strcpy(unbanstring, ""); i = 0; ! while (bptr && (i < 3)) { ! tmp = bptr->Next; ! if (!matches(bptr->banstring, banstring) || !strcmp(banstring, bptr->banstring)) { strcat(unbanmode, "b"); strcat(unbanstring, " "); ! strcat(unbanstring, bptr->banstring); ! Debug(DBGINFO, "*** channel_unban calling delete_ban for %s", bptr->banstring); ! delete_ban(Channel, bptr->banstring); i++; found++; } ! bptr = tmp; } send_chanmode(Channel, "%s %s", unbanmode, unbanstring); *************** *** 1892,1900 **** BanListType search_ban(ChannelListType cptr, char *banstring) { ! BanListType Banned; ! for (Banned = cptr->banned; Banned; Banned = Banned->Next) ! if (!strcasecmp(Banned->banstring, banstring)) ! return (Banned); return (NULL); } --- 1893,1901 ---- BanListType search_ban(ChannelListType cptr, char *banstring) { ! BanListType bptr; ! for (bptr = cptr->banned; bptr; bptr = bptr->Next) ! if (!strcasecmp(bptr->banstring, banstring)) ! return (bptr); return (NULL); } |
From: Alex S. <ru...@us...> - 2001-01-19 02:35:25
|
Update of /cvsroot/x2serv/x2 In directory usw-pr-cvs1:/tmp/cvs-serv9102 Modified Files: INSTALL Log Message: Some small modifications to the docs to divert common questions. Index: INSTALL =================================================================== RCS file: /cvsroot/x2serv/x2/INSTALL,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -r1.3 -r1.4 *** INSTALL 2000/10/11 08:18:35 1.3 --- INSTALL 2001/01/19 02:35:28 1.4 *************** *** 1,10 **** Ok, quick and dirty: Basic Install procedure: ------------------------- ! ./configure --prefix="???" # where ??? is the path to install. (/home/rubin/x2serv, for example) vi source/config.h # make any changes deemed necessary make make install # this will copy bin and example config files to ??? above vi x2.conf # edit settings for your net etc ------------------------- --- 1,14 ---- Ok, quick and dirty: + X2 WORKS ONLY WITH UNIVERSAL IRCD http://x2serv.sourceforge.net + it will NOT connect to Undernet ircu2.10.08 or higher without + serious modifications!!! (Undernet has stopped using the P10 protocol) Basic Install procedure: ------------------------- ! ./configure --prefix="installdirectory" # where installdirectory is the path to install. (/home/rubin/x2serv, for example) vi source/config.h # make any changes deemed necessary make make install # this will copy bin and example config files to ??? above + cd installdirectory vi x2.conf # edit settings for your net etc ------------------------- *************** *** 12,18 **** You can then execute the bot by changing to the directory you installed to and running: ./x2 ! Please send bug reports and suggestions to the email address below, or ! better, visit http://x2serv.sourceforge.net and submit a bug on the ! sourceforge project page. -Rubin ru...@af... --- 16,24 ---- You can then execute the bot by changing to the directory you installed to and running: ./x2 ! You will of course have to add C,N,H lines to the server you will be ! connecting too, as well as U: lines on EVERY CONNECTED SERVER for X2 to work ! properly. ! Please submit bug reports and suggestions to the bug tracking system on ! http://x2serv.sourceforge.net. -Rubin ru...@af... |
From: Alex S. <ru...@us...> - 2001-01-19 01:40:15
|
Update of /cvsroot/x2serv/x2/source In directory usw-pr-cvs1:/tmp/cvs-serv5341 Modified Files: commands.c Log Message: Fixed misspelling of permanent Index: commands.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/commands.c,v retrieving revision 1.122 retrieving revision 1.123 diff -C2 -r1.122 -r1.123 *** commands.c 2001/01/17 04:00:21 1.122 --- commands.c 2001/01/19 01:40:18 1.123 *************** *** 3011,3015 **** send_to_user(uptr, "\002OWNER\002 - Only one person per channel can have this access level."); send_to_user(uptr, "\002COOWNER\002 - Can do the same as Owners, except for modifying CoOwners."); ! send_to_user(uptr, "\002MANAGER\002 - Can add OP, PEON, and LAMER levels, but cannot set perminant modes."); send_to_user(uptr, "\002OP\002 - Cannot add users or lamers, but can use x2 to do remote commands such as kick and op."); send_to_user(uptr, "\002PEON\002 - Is known in the seen command, can be given +v, but no other access."); --- 3011,3015 ---- send_to_user(uptr, "\002OWNER\002 - Only one person per channel can have this access level."); send_to_user(uptr, "\002COOWNER\002 - Can do the same as Owners, except for modifying CoOwners."); ! send_to_user(uptr, "\002MANAGER\002 - Can add OP, PEON, and LAMER levels, but cannot set permanent modes."); send_to_user(uptr, "\002OP\002 - Cannot add users or lamers, but can use x2 to do remote commands such as kick and op."); send_to_user(uptr, "\002PEON\002 - Is known in the seen command, can be given +v, but no other access."); |
From: Alex S. <ru...@us...> - 2001-01-19 01:39:54
|
Update of /cvsroot/x2serv/x2/HELP In directory usw-pr-cvs1:/tmp/cvs-serv5302 Modified Files: USER Log Message: added ADDUSER and ADDOWNER to the USER helpfile. Index: USER =================================================================== RCS file: /cvsroot/x2serv/x2/HELP/USER,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -r1.6 -r1.7 *** USER 2000/12/19 08:11:55 1.6 --- USER 2001/01/19 01:39:56 1.7 *************** *** 13,16 **** --- 13,18 ---- ADDMANAGER - Add a user as a MANAGER in a channel. ADDCOOWNER - Add a user as a COOWNER in a channel. + ADDOWNER - Add a user as an OWNER in a channel. + ADDUSER - A more advanced way to add users. DELUSER - Delete a user from the userlist. SETHANDLE - Change someone's handle. |
From: Alex S. <ru...@us...> - 2001-01-17 04:00:24
|
Update of /cvsroot/x2serv/x2/source In directory usw-pr-cvs1:/tmp/cvs-serv28906/source Modified Files: commands.c misc.c parse.c send.c Log Message: Every @#$@#% function in send.c was using 540 as its buffer size.. basically it was really really easy to overflow x2, its a wonder it was running at all. I had intended to use LINEBUFFSIZE, just got confused along the way.. fixed it. This should bring a noticible uptime improvement... /me bad c coder This patch also contains LogCommands buffer length fix, and accounting.c buffer length fixes. Index: commands.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/commands.c,v retrieving revision 1.121 retrieving revision 1.122 diff -C2 -r1.121 -r1.122 *** commands.c 2001/01/15 22:08:48 1.121 --- commands.c 2001/01/17 04:00:21 1.122 *************** *** 3342,3346 **** } - /* TODO : Do this a bit more gracefully.. (userlist, olist etc) */ int c_plist(C_PARAM) { --- 3342,3345 ---- *************** *** 4331,4340 **** } - - /* TODO : redo this with the new userlists. Lamers probably dont need - * to be using the same struct now as users, maybe we should make a new - * way to handle them in memory, like rb's shitlist. - * -This is now done, lamers are seperate- - */ int c_addlamer(C_PARAM) { --- 4330,4333 ---- Index: misc.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/misc.c,v retrieving revision 1.36 retrieving revision 1.37 diff -C2 -r1.36 -r1.37 *** misc.c 2001/01/10 07:42:38 1.36 --- misc.c 2001/01/17 04:00:21 1.37 *************** *** 289,293 **** { FILE* LOGFILE; ! char buff[MAXLEN]; /* global nick!user@host command rest [time] */ /* #channel nick!user@host +h command rest [time] */ --- 289,293 ---- { FILE* LOGFILE; ! char buff[MAXLEN*4]; /* global nick!user@host command rest [time] */ /* #channel nick!user@host +h command rest [time] */ Index: parse.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/parse.c,v retrieving revision 1.54 retrieving revision 1.55 diff -C2 -r1.54 -r1.55 *** parse.c 2000/12/19 08:11:56 1.54 --- parse.c 2001/01/17 04:00:21 1.55 *************** *** 369,373 **** if(!NETBURSTING) SendMOTD(UserPtr); - /* TODO */ if(UserPtr) { --- 369,372 ---- Index: send.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/send.c,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -r1.22 -r1.23 *** send.c 2000/08/31 08:00:55 1.22 --- send.c 2001/01/17 04:00:21 1.23 *************** *** 18,22 **** { va_list args; ! char buff[MAXLEN]; va_start(args, format); vsprintf(buff, format, args); --- 18,22 ---- { va_list args; ! char buff[LINEBUFFSIZE]; va_start(args, format); vsprintf(buff, format, args); *************** *** 29,33 **** { va_list args; ! char buff[MAXLEN]; char numnick[NUMNICKLEN]; va_start(args, format); --- 29,33 ---- { va_list args; ! char buff[LINEBUFFSIZE]; char numnick[NUMNICKLEN]; va_start(args, format); *************** *** 43,47 **** { va_list args; ! char buff[MAXLEN]; va_start(args, format); vsprintf(buff, format, args); --- 43,47 ---- { va_list args; ! char buff[LINEBUFFSIZE]; va_start(args, format); vsprintf(buff, format, args); *************** *** 54,58 **** { va_list args; ! char buff[MAXLEN]; va_start(args, format); vsprintf(buff, format, args); --- 54,58 ---- { va_list args; ! char buff[LINEBUFFSIZE]; va_start(args, format); vsprintf(buff, format, args); *************** *** 65,69 **** { va_list args; ! char buff[MAXLEN]; va_start(args, rest); --- 65,69 ---- { va_list args; ! char buff[LINEBUFFSIZE]; va_start(args, rest); *************** *** 76,80 **** { va_list args; ! char buff[MAXLEN]; va_start(args, sendtext); --- 76,80 ---- { va_list args; ! char buff[LINEBUFFSIZE]; va_start(args, sendtext); *************** *** 87,91 **** { va_list args; ! char buff[MAXLEN]; va_start(args, sendtext); --- 87,91 ---- { va_list args; ! char buff[LINEBUFFSIZE]; va_start(args, sendtext); *************** *** 99,103 **** { va_list args; ! char buff[MAXLEN]; va_start(args, sendtext); --- 99,103 ---- { va_list args; ! char buff[LINEBUFFSIZE]; va_start(args, sendtext); *************** *** 113,117 **** { va_list args; ! char buff[MAXLEN]; va_start(args, format); --- 113,117 ---- { va_list args; ! char buff[LINEBUFFSIZE]; va_start(args, format); *************** *** 125,129 **** { va_list args; ! char buff[MAXLEN]; va_start(args, format); --- 125,129 ---- { va_list args; ! char buff[LINEBUFFSIZE]; va_start(args, format); *************** *** 147,151 **** { va_list args; ! char buff[MAXLEN]; va_start(args, format); --- 147,151 ---- { va_list args; ! char buff[LINEBUFFSIZE]; va_start(args, format); *************** *** 180,184 **** { va_list args; ! char buff[MAXLEN]; va_start(args, format); --- 180,184 ---- { va_list args; ! char buff[LINEBUFFSIZE]; va_start(args, format); *************** *** 192,196 **** { va_list args; ! char buff[MAXLEN]; va_start(args, format); --- 192,196 ---- { va_list args; ! char buff[LINEBUFFSIZE]; va_start(args, format); *************** *** 204,208 **** { va_list args; ! char buff[MAXLEN]; va_start(args, format); --- 204,208 ---- { va_list args; ! char buff[LINEBUFFSIZE]; va_start(args, format); *************** *** 216,220 **** { va_list args; ! char buff[MAXLEN]; va_start(args, format); --- 216,220 ---- { va_list args; ! char buff[LINEBUFFSIZE]; va_start(args, format); *************** *** 243,247 **** { va_list args; ! char buff[MAXLEN]; va_start(args, format); --- 243,247 ---- { va_list args; ! char buff[LINEBUFFSIZE]; va_start(args, format); *************** *** 262,266 **** { va_list args; ! char buff[MAXLEN]; va_start(args, format); --- 262,266 ---- { va_list args; ! char buff[LINEBUFFSIZE]; va_start(args, format); *************** *** 286,290 **** { va_list args; ! char buff[MAXLEN]; va_start(args, format); --- 286,290 ---- { va_list args; ! char buff[LINEBUFFSIZE]; va_start(args, format); *************** *** 298,302 **** { va_list args; ! char buff[MAXLEN]; va_start(args, format); --- 298,302 ---- { va_list args; ! char buff[LINEBUFFSIZE]; va_start(args, format); *************** *** 315,319 **** { va_list args; ! char buff[MAXLEN]; va_start(args, format); --- 315,319 ---- { va_list args; ! char buff[LINEBUFFSIZE]; va_start(args, format); *************** *** 328,332 **** { va_list args; ! char buff[MAXLEN]; va_start(args, format); --- 328,332 ---- { va_list args; ! char buff[LINEBUFFSIZE]; va_start(args, format); *************** *** 356,360 **** { va_list args; ! char buff[MAXLEN]; va_start(args, format); --- 356,360 ---- { va_list args; ! char buff[LINEBUFFSIZE]; va_start(args, format); |
From: Alex S. <ru...@us...> - 2001-01-15 22:08:55
|
Update of /cvsroot/x2serv/x2/source In directory usw-pr-cvs1:/tmp/cvs-serv30409/source Modified Files: commands.c Log Message: My previous patch to free the userlist of unreg'd channels contained an error, referencing previously free'd memory space. Fixed. Index: commands.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/commands.c,v retrieving revision 1.120 retrieving revision 1.121 diff -C2 -r1.120 -r1.121 *** commands.c 2001/01/14 08:55:45 1.120 --- commands.c 2001/01/15 22:08:48 1.121 *************** *** 3702,3707 **** char ChanName[LINEBUFFSIZE]; int s, line = 0; ! HandleListType hptr; ! LamerListType lptr; ChanFile = fopen(CHANFILENAME, "r"); --- 3702,3707 ---- char ChanName[LINEBUFFSIZE]; int s, line = 0; ! HandleListType tmphptr, nexthptr; ! LamerListType lptr, nextlptr; ChanFile = fopen(CHANFILENAME, "r"); *************** *** 3782,3792 **** /* Delete userlist, and lamerlist.. */ ! for(hptr = cptr->Handles;hptr;hptr = hptr->Next) { ! DelHandle(cptr, hptr); } cptr->Handles = NULL; ! for(lptr = cptr->Lamers;lptr;lptr = lptr->Next) { free(lptr); } --- 3782,3794 ---- /* Delete userlist, and lamerlist.. */ ! for(tmphptr = cptr->Handles;tmphptr;tmphptr = nexthptr) { ! nexthptr = tmphptr->Next; ! DelHandle(cptr, tmphptr); } cptr->Handles = NULL; ! for(lptr = cptr->Lamers;lptr;lptr = nextlptr) { + nextlptr = lptr->Next; free(lptr); } |
From: Alex S. <ru...@us...> - 2001-01-14 19:05:06
|
Update of /cvsroot/x2serv/x2/source In directory usw-pr-cvs1:/tmp/cvs-serv30194/source Modified Files: chan.c Log Message: Regchan crash, cptr->Suspended was left uninitalized by AddChan(), fixed. Index: chan.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/chan.c,v retrieving revision 1.63 retrieving revision 1.64 diff -C2 -r1.63 -r1.64 *** chan.c 2001/01/12 10:34:34 1.63 --- chan.c 2001/01/14 19:04:55 1.64 *************** *** 1370,1373 **** --- 1370,1374 ---- NewChan->Limit = NULL; NewChan->Regged = IsRegged; + NewChan->Suspended = NULL; ConvertModeString(ModeString, &NewChan->PlusModes, &NewChan->MinModes, &NewChan->Key, &NewChan->Limit); if(settings) |
From: Alex S. <ru...@us...> - 2001-01-14 08:55:57
|
Update of /cvsroot/x2serv/x2/source In directory usw-pr-cvs1:/tmp/cvs-serv26056 Modified Files: commands.c Log Message: Removed a leftover DEBUG line in chanstats which was giving away the current channel key to anyone who cared to look. (woops ;) Index: commands.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/commands.c,v retrieving revision 1.119 retrieving revision 1.120 diff -C2 -r1.119 -r1.120 *** commands.c 2001/01/14 08:09:26 1.119 --- commands.c 2001/01/14 08:55:45 1.120 *************** *** 2432,2438 **** send_to_user(uptr, " No URL"); send_to_user(uptr, " Default mode : %s", GetModeString(ModeString, cptr->PlusModes, cptr->MinModes, "????", cptr->Limit)); - #ifdef debugon - send_to_user(uptr, " DEBUG: CurrKey: %s", cptr->CurrentKey?cptr->CurrentKey:"(NULL)"); - #endif send_to_user(uptr, " "); send_to_user(uptr, " Num Of Owners : %3d | CoOwners : %3d", OwnerNumber, CoOwnerNumber); --- 2432,2435 ---- |
From: Alex S. <ru...@us...> - 2001-01-14 08:10:24
|
Update of /cvsroot/x2serv/x2/HELP In directory usw-pr-cvs1:/tmp/cvs-serv23181 Added Files: DISCONNECT UNSUSPEND Log Message: forgot to add DISCONNECT and UNSUSPEND help files. --- NEW FILE --- DISCONNECT -------------- The DISCONNECT command causes X2 to disconnect from the network and idle on the configured port waiting for a connection. When a server connects to it, it will check the IP and password, and if OK, re-connect. This command can be useful for removing the bot from the network without access to restart it later. DISCONNECT is available only to IRCops and should only be used by those who know what they are doing. SEE ALSO: QUIT XSET --- NEW FILE --- Usage: UNSUSPEND [#channel] ------------------------------- The UNSUSPEND command removes a channel suspension previously set with the SUSPEND command. X2 will re-join the channel etc. UNSUSPEND is available to IRCOPS only. SEE ALSO: REGCHAN SUSPEND SEARCHCHAN |
From: Alex S. <ru...@us...> - 2001-01-14 08:09:39
|
Update of /cvsroot/x2serv/x2/source In directory usw-pr-cvs1:/tmp/cvs-serv23018/source Modified Files: commands.c Log Message: Unregistering a channel while 1 or more user was joined caused the userlist and banlist not to be deleted, and in fact remain attached to the channel pointer. This caused the userlist to remain intact after unreg/regchan cycle, in addition to wasting memory. Fixed. Index: commands.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/commands.c,v retrieving revision 1.118 retrieving revision 1.119 diff -C2 -r1.118 -r1.119 *** commands.c 2001/01/12 10:34:34 1.118 --- commands.c 2001/01/14 08:09:26 1.119 *************** *** 125,139 **** { "USERS", c_userlist, REGED, 0, 0, 0, F, T }, { "USERLIST", c_userlist, REGED, 0, 0, 0, F, T }, ! { "LAMERLIST", c_llist, REGED, PE, T, T, F, T }, ! { "LAMELIST", c_llist, REGED, PE, T, T, F, T }, ! { "LAMERS", c_llist, REGED, PE, T, T, F, T }, ! { "SHITLIST", c_llist, REGED, PE, T, T, F, T }, ! { "PLIST", c_plist, REGED, PE, T, T, F, T }, ! { "OLIST", c_olist, REGED, PE, T, T, F, T }, { "MLIST", c_mlist, REGED, 0, 0, 0, F, T }, { "CLIST", c_clist, REGED, 0, 0, 0, F, T }, { "WLIST", c_wlist, REGED, 0, 0, 0, F, T }, ! { "BLIST", c_llist, REGED, PE, T, T, F, T }, ! { "LLIST", c_llist, REGED, PE, T, T, F, T }, { "CHANSTAT", c_chanstat, REQED, 0, 0, 0, F, T }, { "CHANSTATS", c_chanstat, REQED, 0, 0, 0, F, T }, --- 125,139 ---- { "USERS", c_userlist, REGED, 0, 0, 0, F, T }, { "USERLIST", c_userlist, REGED, 0, 0, 0, F, T }, ! { "LAMERLIST", c_llist, REGED, 0, T, T, F, T }, ! { "LAMELIST", c_llist, REGED, 0, T, T, F, T }, ! { "LAMERS", c_llist, REGED, 0, T, T, F, T }, ! { "SHITLIST", c_llist, REGED, 0, T, T, F, T }, ! { "PLIST", c_plist, REGED, 0, T, T, F, T }, ! { "OLIST", c_olist, REGED, 0, T, T, F, T }, { "MLIST", c_mlist, REGED, 0, 0, 0, F, T }, { "CLIST", c_clist, REGED, 0, 0, 0, F, T }, { "WLIST", c_wlist, REGED, 0, 0, 0, F, T }, ! { "BLIST", c_llist, REGED, 0, T, T, F, T }, ! { "LLIST", c_llist, REGED, 0, T, T, F, T }, { "CHANSTAT", c_chanstat, REQED, 0, 0, 0, F, T }, { "CHANSTATS", c_chanstat, REQED, 0, 0, 0, F, T }, *************** *** 1019,1027 **** if (target->Modes & UMODEgod) strcat(modetmp, "(GOD)"); ! send_to_user(uptr, "\002| Modes : +%s\002", modetmp); for(ahptr = target->AuthHandles;ahptr;ahptr = ahptr->Next) { ! send_to_user(uptr, "\002| %s\002 on %s.", ahptr->hptr->Handle, ahptr->cptr->Name); } --- 1019,1027 ---- if (target->Modes & UMODEgod) strcat(modetmp, "(GOD)"); ! send_to_user(uptr, "\002 Modes : +%s\002", modetmp); for(ahptr = target->AuthHandles;ahptr;ahptr = ahptr->Next) { ! send_to_user(uptr, "\002 %s\002 on %s.", ahptr->hptr->Handle, ahptr->cptr->Name); } *************** *** 3054,3057 **** --- 3054,3059 ---- HandleListType tmphptr; UserListType target; + int OwnerNumber = 0, CoOwnerNumber = 0, ManagerNumber = 0, OpNumber = 0, PeonNumber = 0, LamerNumber = 0; + *************** *** 3091,3094 **** --- 3093,3104 ---- return(FALSE); } + GetChanStats(cptr, &OwnerNumber, &CoOwnerNumber, &ManagerNumber, + &OpNumber, &PeonNumber, &LamerNumber); + if(*level == 'W' && OwnerNumber > 0) + { + send_to_user(uptr, "Sorry, only one owner per channel is allowed. Delete the old owner first, or add this person as a CoOwner instead."); + return(FALSE); + } + genpass(Pass, GENPASSLEN); tmphptr = AddHandle(cptr, handle, crypt(Pass, "X2"), "*", *level, 1, 0, 0); *************** *** 3123,3126 **** --- 3133,3137 ---- char Pass[GENPASSLEN+1]; HandleListType tmphptr; + int OwnerNumber = 0, CoOwnerNumber = 0, ManagerNumber = 0, OpNumber = 0, PeonNumber = 0, LamerNumber = 0; if(!(rest && *rest)) *************** *** 3162,3165 **** --- 3173,3183 ---- return(FALSE); } + GetChanStats(cptr, &OwnerNumber, &CoOwnerNumber, &ManagerNumber, + &OpNumber, &PeonNumber, &LamerNumber); + if(levelch == 'W' && OwnerNumber > 0) + { + send_to_user(uptr, "Sorry, only one owner is allowed per channel. Either delete the old owner first, or add this person as a CoOwner instead."); + return(FALSE); + } if(!pass) genpass(Pass, GENPASSLEN); *************** *** 3687,3690 **** --- 3705,3710 ---- char ChanName[LINEBUFFSIZE]; int s, line = 0; + HandleListType hptr; + LamerListType lptr; ChanFile = fopen(CHANFILENAME, "r"); *************** *** 3764,3770 **** cptr->Reggedby = NULL; ! /* TODO : Delete userlist banlist etc */ - /** Done deleting operseg **/ /* Regged...*/ cptr->Regged = FALSE; --- 3784,3799 ---- cptr->Reggedby = NULL; ! /* Delete userlist, and lamerlist.. */ ! for(hptr = cptr->Handles;hptr;hptr = hptr->Next) ! { ! DelHandle(cptr, hptr); ! } ! cptr->Handles = NULL; ! for(lptr = cptr->Lamers;lptr;lptr = lptr->Next) ! { ! free(lptr); ! } ! cptr->Lamers = NULL; /* Regged...*/ cptr->Regged = FALSE; |
From: Alex S. <ru...@us...> - 2001-01-13 11:41:28
|
Update of /cvsroot/x2serv/x2/HELP In directory usw-pr-cvs1:/tmp/cvs-serv3108 Modified Files: IRCOP SET SUSPEND Log Message: Updated helpfiles to reflect the new suspend/disconnect/set functionality. Index: IRCOP =================================================================== RCS file: /cvsroot/x2serv/x2/HELP/IRCOP,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -r1.6 -r1.7 *** IRCOP 2001/01/08 09:28:10 1.6 --- IRCOP 2001/01/13 11:41:54 1.7 *************** *** 6,9 **** --- 6,11 ---- SCRIPTREG - Front end to REGCHAN, ADDOWNER, SET TOPIC. UNREG - Unregisters a channel. + SUSPEND - Temporarily suspend a channel. + UNSUSPEND - Remove channel suspension SEARCHCHAN - Searches the channel database ----------------------------------- *************** *** 22,26 **** UPLINKS - Shows servers I can link to JUMP - Changes servers. ! SUSPEND - Makes X2 disconnect from the net and wait for a connection. QUIT - Closes all databases and exits. --- 24,28 ---- UPLINKS - Shows servers I can link to JUMP - Changes servers. ! DISCONNECT - Makes X2 disconnect from the net and wait for a connection. QUIT - Closes all databases and exits. Index: SET =================================================================== RCS file: /cvsroot/x2serv/x2/HELP/SET,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** SET 2000/12/19 08:11:55 1.2 --- SET 2001/01/13 11:41:54 1.3 *************** *** 31,35 **** registered channel. =------------------- IRCop Only settings ---------------------= - SUSPENDED : temporarily disables X2 from a channel. NODELETE : makes the channel exempt from being deleted if it remains unused for long periods of time. --- 31,34 ---- Index: SUSPEND =================================================================== RCS file: /cvsroot/x2serv/x2/HELP/SUSPEND,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** SUSPEND 2000/12/19 08:11:55 1.2 --- SUSPEND 2001/01/13 11:41:54 1.3 *************** *** 1,12 **** ! Usage: SUSPEND ! -------------- ! The SUSPEND command causes X2 to disconnect from the network and idle on ! the configured port waiting for a connection. When a server connects to ! it, it will check the IP and password, and if OK, re-connect. This ! command can be useful for removing the bot from the network without ! access to restart it later. ! SUSPEND is available only to IRCops and should only be used by those who ! know what they are doing. ! SEE ALSO: QUIT XSET --- 1,9 ---- ! Usage: SUSPEND [#channel] <reason> ! ------------------------------- ! The SUSPEND command is used by ircops to temporarily take X2 away from a channel, for example when it is being abused. It is a non-destructive alternative to UNREG, when you would prefer not to delete the userlist. The time of the suspension is saved, along with a reason, and the nick of who suspended it (much like a gline). ! Suspended channels do not currently automatically unsuspend themselves, but you can view a list of suspended channels with the SEARCHCHAN --suspended command. ! SUSPEND is available to IRCOPS only. ! SEE ALSO: UNREG UNSUSPEND SEARCHCHAN DISCONNECT ! NOTE: The suspend command was formerly a 'disconnect x2 from irc' command. The functionality for that has been moved to "DISCONNECT" due to confusion. Also in previous versions of X2 the suspension of a channel was handled though SET, that is now handled with this command. |
From: Richard P. <lys...@us...> - 2001-01-12 12:36:58
|
Update of /cvsroot/x2serv/x2/source In directory usw-pr-cvs1:/tmp/cvs-serv30492 Modified Files: main.c Log Message: Added file conversion for the new suspending of channels. Old suspended channels won't be unsuspended this way Index: main.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/main.c,v retrieving revision 1.43 retrieving revision 1.44 diff -C2 -r1.43 -r1.44 *** main.c 2001/01/12 10:34:34 1.43 --- main.c 2001/01/12 12:37:21 1.44 *************** *** 338,341 **** --- 338,342 ---- char *Mask; char *Reason; + char *Suspended; char Level; /* WCMOPL */ int AutoOp; *************** *** 379,382 **** --- 380,384 ---- strcpy(URL, "*"); strcpy(Reggedby, "UNKNOWN"); + Suspended = NULL; while (!feof(OpFile)) { *************** *** 455,458 **** --- 457,468 ---- settings[set_commands[i].index] = set_commands[i].def; } + /* If the suspended flag is used, convert it to the new system */ + /* This is temporary code, to be removed after all files are converted */ + if (settings[UNUSED]) + { + Suspended = malloc(strlen("Unknown reason") + 1); + strcpy(Suspended, "Unknown reason"); + settings[UNUSED] = 0; + } continue; case 'L': /* LastVisted */ *************** *** 480,484 **** return(0); } ! cptr->Suspended = NULL; continue; case 'W': /* Website (URL) */ --- 490,495 ---- return(0); } ! if (Suspended) ! cptr->Suspended = Suspended; continue; case 'W': /* Website (URL) */ |
From: Richard P. <lys...@us...> - 2001-01-12 10:34:12
|
Update of /cvsroot/x2serv/x2/source In directory usw-pr-cvs1:/tmp/cvs-serv11201 Modified Files: chan.c commands.c commands.h config.h main.c Log Message: Redone the system of suspending channels. .Suspend [reason] suspends a channel, .Unsuspend unsuspends it. The Reason, completed with the nick of the person that suspended it and the suspension date, is stored in the entry Suspended in ChanStruct. It is NULL if the channel isn't suspended. Taken out the .set suspended option, replaced it with UNUSED Index: chan.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/chan.c,v retrieving revision 1.62 retrieving revision 1.63 diff -C2 -r1.62 -r1.63 *** chan.c 2000/12/22 14:48:17 1.62 --- chan.c 2001/01/12 10:34:34 1.63 *************** *** 40,44 **** while (ChanPtr) { ! if ((ChanPtr->Regged && !ChanPtr->settings[SUSPENDED] && ChanPtr->settings[INCHAN] == 1) && ChanPtr->settings[TOPICFREQ] == period && strcmp(ChanPtr->Topic, "*")) { send_topic(ChanPtr, ChanPtr->Topic); --- 40,44 ---- while (ChanPtr) { ! if ((ChanPtr->Regged && !ChanPtr->Suspended && ChanPtr->settings[INCHAN] == 1) && ChanPtr->settings[TOPICFREQ] == period && strcmp(ChanPtr->Topic, "*")) { send_topic(ChanPtr, ChanPtr->Topic); *************** *** 1456,1460 **** fprintf(FilePtr, "REGEDBY %s %lu\n", ChanPtr->Reggedby , ChanPtr->CreationDate); /* End of header section.. on to USER section */ ! for(hptr = ChanPtr->Handles;hptr;hptr = hptr->Next) { --- 1456,1464 ---- fprintf(FilePtr, "REGEDBY %s %lu\n", ChanPtr->Reggedby , ChanPtr->CreationDate); /* End of header section.. on to USER section */ ! ! /* Suspended is optional and must thus come AFTER ReggedBy */ ! if (ChanPtr->Suspended) ! fprintf(FilePtr, "PSUSPENDED %s\n", ChanPtr->Suspended); ! for(hptr = ChanPtr->Handles;hptr;hptr = hptr->Next) { Index: commands.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/commands.c,v retrieving revision 1.117 retrieving revision 1.118 diff -C2 -r1.117 -r1.118 *** commands.c 2001/01/10 13:29:03 1.117 --- commands.c 2001/01/12 10:34:34 1.118 *************** *** 97,101 **** { "HELP", c_help, NONE, 0, 0, 0, F, T }, { "IRCOPS", c_ircops, NONE, 0, 0, 0, F, T }, ! { "SUSPEND", c_suspend, NONE, 0, 0, 0, T, F }, { "NETSTAT", c_netstat, NONE, 0, 0, 0, F, T }, { "NETSTATS", c_netstat, NONE, 0, 0, 0, F, T }, --- 97,103 ---- { "HELP", c_help, NONE, 0, 0, 0, F, T }, { "IRCOPS", c_ircops, NONE, 0, 0, 0, F, T }, ! { "SUSPEND", c_suspend, REGED, 0, 0, 0, T, T }, ! { "UNSUSPEND", c_unsuspend, REGED, 0, 0, 0, T, T }, ! { "DISCONNECT",c_disconnect, NONE, 0, 0, 0, T, F }, { "NETSTAT", c_netstat, NONE, 0, 0, 0, F, T }, { "NETSTATS", c_netstat, NONE, 0, 0, 0, F, T }, *************** *** 274,289 **** if(found < 1) { ! char *TmpPtr; ! int valid = 1; ! ! for (TmpPtr = command; *TmpPtr && *TmpPtr != ' '; TmpPtr++) ! { /* This checks for '<WeirdKev> ...' */ ! if(!isalnum(*TmpPtr)) ! { ! valid = 0; ! break; ! } ! } ! if (valid) send_to_user(uptr, "\002%s\002: Unknown command name. Try \002HELP\002", command); return; --- 276,291 ---- if(found < 1) { ! char *TmpPtr; ! int valid = 1; ! ! for (TmpPtr = command; *TmpPtr && *TmpPtr != ' '; TmpPtr++) ! { /* This checks for '<WeirdKev> ...' */ ! if(!isalnum(*TmpPtr)) ! { ! valid = 0; ! break; ! } ! } ! if (valid) send_to_user(uptr, "\002%s\002: Unknown command name. Try \002HELP\002", command); return; *************** *** 483,488 **** } , ! { ! "SUSPENDED", SUSPENDED, 0, 0, 1, 0, "Is it suspended?", "Has the channel been suspended by CService Admin?: ", {"No", --- 485,490 ---- } , ! { /* Option not used anymore */ ! "SUSPENDED", UNUSED, 0, 0, 1, 0, "Is it suspended?", "Has the channel been suspended by CService Admin?: ", {"No", *************** *** 1626,1630 **** if(noinchan && (TempChanPtr->settings[INCHAN] > 0)) continue; ! if(suspended && (TempChanPtr->settings[SUSPENDED] == 0)) continue; if(((TempChanPtr->PlusModes & CMODEs) || (TempChanPtr->PlusModes & CMODEp))) --- 1628,1632 ---- if(noinchan && (TempChanPtr->settings[INCHAN] > 0)) continue; ! if(suspended && (TempChanPtr->Suspended == NULL)) continue; if(((TempChanPtr->PlusModes & CMODEs) || (TempChanPtr->PlusModes & CMODEp))) *************** *** 1640,1647 **** if(secret == 0) { ! send_to_user(uptr, "%29s : %s", TempChanPtr->Name, TempChanPtr->Topic?TempChanPtr->Topic:""); count++; } - } } --- 1642,1648 ---- if(secret == 0) { ! send_to_user(uptr, "%29s : %s", TempChanPtr->Name, TempChanPtr->Suspended?TempChanPtr->Suspended:(TempChanPtr->Topic?TempChanPtr->Topic:"")); count++; } } } *************** *** 1691,1696 **** int c_suspend(C_PARAM) { ! send_quit("\002Suspended\002 by %s (port: %d).", uptr->Nick, SERVERPORT); ! send_squit(Uplink, "\002Suspended\002 by %s (port: %d).", uptr->Nick, SERVERPORT); AUTOCONNECT = 0; SockConnected = FALSE; --- 1692,1744 ---- int c_suspend(C_PARAM) { ! char Buf[MAXLEN]; ! char Buf2[MAXLEN]; ! ! if (cptr->Suspended) ! { ! send_to_user(uptr, "Channel %s is already marked as suspended: %s", cptr->Name, cptr->Suspended); ! return(FALSE); ! } ! if (!rest || !*rest) { ! send_to_user(uptr, "Please input a reason"); ! return(FALSE); ! } ! sprintf(Buf2, "<%s> %s [%s]", uptr->Nick, rest, t2s(Buf, time(NULL))); ! cptr->Suspended = malloc(strlen(Buf2) + 1); ! strcpy(cptr->Suspended, Buf2); ! send_to_user(uptr, "Channel %s is marked as suspended: %s", cptr->Name, rest); ! cptr->settings[INCHAN] = 0; ! send_part(cptr, "Suspended by %s.", uptr->Nick); ! WriteChanOpFile(cptr); ! return(TRUE); ! } ! ! int c_unsuspend(C_PARAM) ! { ! char ModeString[LINEBUFFSIZE]; ! ! if (!cptr->Suspended) ! { ! send_to_user(uptr, "Channel %s is not suspended.", cptr->Name); ! return(FALSE); ! } ! free(cptr->Suspended); ! cptr->Suspended = NULL; ! cptr->settings[INCHAN] = 1; ! send_to_user(uptr, "Unsuspending channel %s.", cptr->Name); ! send_join(cptr); ! send_opchan(cptr); ! send_chanmode(cptr, "%s", GetModeString(ModeString, cptr->PlusModes, ! cptr->MinModes, cptr->Key, cptr->Limit)); ! if (strcmp(cptr->Topic, "*") && cptr->settings[TOPICFREQ]) ! send_topic(cptr, cptr->Topic); ! WriteChanOpFile(cptr); ! return(TRUE); ! } ! ! int c_disconnect(C_PARAM) ! { ! send_quit("\002Disconnected\002 by %s (port: %d).", uptr->Nick, SERVERPORT); ! send_squit(Uplink, "\002Disconnected\002 by %s (port: %d).", uptr->Nick, SERVERPORT); AUTOCONNECT = 0; SockConnected = FALSE; *************** *** 2395,2399 **** for (k = 0; set_commands[k].name != NULL; k++) { ! send_to_user(uptr, " \002%s\002%s", set_commands[k].pre, set_commands[k].settings[cptr->settings[set_commands[k].index]]); } if (OwnerNumber > 0) --- 2443,2448 ---- for (k = 0; set_commands[k].name != NULL; k++) { ! if (k != UNUSED) ! send_to_user(uptr, " \002%s\002%s", set_commands[k].pre, set_commands[k].settings[cptr->settings[set_commands[k].index]]); } if (OwnerNumber > 0) *************** *** 2411,2414 **** --- 2460,2467 ---- } send_to_user(uptr, "\002Number of users currently in channel:\002 %d", cptr->NumOfNicks); + if (cptr->Suspended) + { + send_to_user(uptr, "\002 This channel has been suspended:\002 %s", cptr->Suspended); + } return(TRUE); } *************** *** 2462,2477 **** for (i = 0; set_commands[i].name != NULL; i++) { ! if(set_commands[i].user) /* If its not an IRCOP only command */ ! send_to_user(uptr, "\002%10s\002 : %d %s%s", set_commands[i].name, ! cptr->settings[set_commands[i].index], set_commands[i].pre, ! set_commands[i].settings[cptr->settings[set_commands[i].index]]); } send_to_user(uptr, "=- The following are set by IRCOPS only -="); for (i = 0; set_commands[i].name != NULL; i++) { ! if(!set_commands[i].user) /* If it IS an IRCOP only command */ ! send_to_user(uptr, "%10s : %d \002%s\002%s", set_commands[i].name, ! cptr->settings[set_commands[i].index], set_commands[i].pre, ! set_commands[i].settings[cptr->settings[set_commands[i].index]]); } --- 2515,2536 ---- for (i = 0; set_commands[i].name != NULL; i++) { ! if (i != UNUSED) ! { ! if(set_commands[i].user) /* If its not an IRCOP only command */ ! send_to_user(uptr, "\002%10s\002 : %d %s%s", set_commands[i].name, ! cptr->settings[set_commands[i].index], set_commands[i].pre, ! set_commands[i].settings[cptr->settings[set_commands[i].index]]); ! } } send_to_user(uptr, "=- The following are set by IRCOPS only -="); for (i = 0; set_commands[i].name != NULL; i++) { ! if (i != UNUSED) ! { ! if(!set_commands[i].user) /* If it IS an IRCOP only command */ ! send_to_user(uptr, "%10s : %d \002%s\002%s", set_commands[i].name, ! cptr->settings[set_commands[i].index], set_commands[i].pre, ! set_commands[i].settings[cptr->settings[set_commands[i].index]]); ! } } *************** *** 2624,2627 **** --- 2683,2689 ---- for (i = 0; set_commands[i].name != NULL; i++) { + if (i == UNUSED) + continue; + if (!strcasecmp(option, set_commands[i].name)) { *************** *** 2662,2666 **** if(!strcasecmp(option, "INCHAN")) { ! if(cptr->settings[SUSPENDED]) { send_to_user(uptr, "Channel %s has been suspended by the Channel Service Admins.", cptr->Name); --- 2724,2728 ---- if(!strcasecmp(option, "INCHAN")) { ! if(cptr->Suspended) { send_to_user(uptr, "Channel %s has been suspended by the Channel Service Admins.", cptr->Name); *************** *** 2674,2678 **** send_to_user(uptr, "\002%s\002 set to %d. \"\002%s\002%s\"", set_commands[i].name, value, set_commands[i].pre, set_commands[i].settings[value]); ! if(!strcasecmp(option, "SUSPENDED")) { ChangedINCHAN = TRUE; --- 2736,2740 ---- send_to_user(uptr, "\002%s\002 set to %d. \"\002%s\002%s\"", set_commands[i].name, value, set_commands[i].pre, set_commands[i].settings[value]); ! /* if(!strcasecmp(option, "SUSPENDED")) { ChangedINCHAN = TRUE; *************** *** 2687,2691 **** cptr->settings[INCHAN] = 1; } ! } if(ChangedINCHAN) { --- 2749,2753 ---- cptr->settings[INCHAN] = 1; } ! } */ if(ChangedINCHAN) { *************** *** 2698,2702 **** else /* Join the channel */ { ! if(cptr->settings[SUSPENDED]) { send_to_user(uptr, "This channel has been suspeneded by the Channel Service administrators."); --- 2760,2764 ---- else /* Join the channel */ { ! if(cptr->Suspended) { send_to_user(uptr, "This channel has been suspeneded by the Channel Service administrators."); *************** *** 3809,3812 **** --- 3871,3875 ---- case 'R': /* Regged by */ case 'W': /* Website (URL) */ + case 'P': /* Suspended */ continue; case 'H': /* HANDLE */ Index: commands.h =================================================================== RCS file: /cvsroot/x2serv/x2/source/commands.h,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -r1.24 -r1.25 *** commands.h 2000/11/02 09:27:56 1.24 --- commands.h 2001/01/12 10:34:34 1.25 *************** *** 47,50 **** --- 47,52 ---- int c_quit(C_PARAM); int c_suspend(C_PARAM); + int c_unsuspend(C_PARAM); + int c_disconnect(C_PARAM); int c_auth(C_PARAM); int c_login(C_PARAM); Index: config.h =================================================================== RCS file: /cvsroot/x2serv/x2/source/config.h,v retrieving revision 1.46 retrieving revision 1.47 diff -C2 -r1.46 -r1.47 *** config.h 2001/01/02 10:11:33 1.46 --- config.h 2001/01/12 10:34:34 1.47 *************** *** 436,440 **** #define USERINFO 8 #define INCHAN 9 ! #define SUSPENDED 10 #define NODELETE 11 --- 436,441 ---- #define USERINFO 8 #define INCHAN 9 ! /*#define SUSPENDED 10 I can't just take an option out */ ! #define UNUSED 10 /* so I've renamed it to UNUSED -Lysergine */ #define NODELETE 11 *************** *** 505,508 **** --- 506,510 ---- ChannelUsersListType Joined; /* Ptr (or NULL) to linked list */ /* of people in channel. */ + char *Suspended; /* NULL if not suspended, reason otherwise */ struct ChanStruct *Next; } Index: main.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/main.c,v retrieving revision 1.42 retrieving revision 1.43 diff -C2 -r1.42 -r1.43 *** main.c 2001/01/10 07:42:38 1.42 --- main.c 2001/01/12 10:34:34 1.43 *************** *** 480,483 **** --- 480,484 ---- return(0); } + cptr->Suspended = NULL; continue; case 'W': /* Website (URL) */ *************** *** 608,611 **** --- 609,622 ---- AddMask(hptr, &OpAddress[1]); continue; + case 'P': /* PSuspended (The P is added so that every option starts with a different char */ + if(cptr == NULL) + { + printf("PSUSPENDED before channel fully defined (%s line %d).\n", ChanName, line2); + return(0); + } + ptrbuff = (char *)mysep(&lb, "\n"); + cptr->Suspended = malloc(strlen(ptrbuff) + 1); + strcpy(cptr->Suspended, ptrbuff); + continue; default: printf("Unknown key %s in CHANS/%s\n", key, ChanName); return(0); |
From: Richard P. <lys...@us...> - 2001-01-10 13:28:45
|
Update of /cvsroot/x2serv/x2/source In directory usw-pr-cvs1:/tmp/cvs-serv29971/source Modified Files: commands.c Log Message: Fixed a bug with the call to .calc. When a user did /msg x2 #channel calc something, and #channel was suspended, there wasn't a check for it and x2 would crash (as today happened) Index: commands.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/commands.c,v retrieving revision 1.116 retrieving revision 1.117 diff -C2 -r1.116 -r1.117 *** commands.c 2001/01/10 06:16:33 1.116 --- commands.c 2001/01/10 13:29:03 1.117 *************** *** 1239,1243 **** } do_math(buff, rest); ! if(PublicReplyAllowed(hptr)) { send_to_channel(said_inptr, "\002%s:\002 %s", uptr->Nick, buff); --- 1239,1243 ---- } do_math(buff, rest); ! if(said_inptr && PublicReplyAllowed(hptr)) { send_to_channel(said_inptr, "\002%s:\002 %s", uptr->Nick, buff); |
From: Alex S. <ru...@us...> - 2001-01-10 07:42:20
|
Update of /cvsroot/x2serv/x2/source In directory usw-pr-cvs1:/tmp/cvs-serv8203/source Modified Files: main.c misc.c Log Message: Removed the SUSPENDED/INCHANS patch coz it seems to be causing problems. Took out a ; that was screwing up the accounting log (*****'ing all the details) Index: main.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/main.c,v retrieving revision 1.41 retrieving revision 1.42 diff -C2 -r1.41 -r1.42 *** main.c 2001/01/10 06:08:39 1.41 --- main.c 2001/01/10 07:42:38 1.42 *************** *** 326,330 **** int i, s, line = 0, line2, dupcount, fileversion=0; int UserAutoOp, UserPwdReq; ! int settings[NUMOFCHANSETTINGS]; time_t LastAccess = 0, CreationDate = 0; time_t LastSeen = 0; --- 326,330 ---- int i, s, line = 0, line2, dupcount, fileversion=0; int UserAutoOp, UserPwdReq; ! int settings[NUMOFCHANSETTINGS+1]; time_t LastAccess = 0, CreationDate = 0; time_t LastSeen = 0; *************** *** 447,452 **** if((*ptrbuff)) settings[i] = strtol(ptrbuff, NULL, 10); - if(settings[SUSPENDED] && settings[INCHAN]) - settings[INCHAN] = 0; /* since it shouldnt be possible.. */ } if(i < NUMOFCHANSETTINGS) --- 447,450 ---- Index: misc.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/misc.c,v retrieving revision 1.35 retrieving revision 1.36 diff -C2 -r1.35 -r1.36 *** misc.c 2000/12/15 22:44:58 1.35 --- misc.c 2001/01/10 07:42:38 1.36 *************** *** 292,298 **** /* global nick!user@host command rest [time] */ /* #channel nick!user@host +h command rest [time] */ ! if(!strcasecmp(command, "LOGIN") || ! !strcasecmp(command, "RESETPASS") || ! !strcasecmp(command, "MLOGIN")); { rest = "*********"; /* hide passwords */ --- 292,298 ---- /* global nick!user@host command rest [time] */ /* #channel nick!user@host +h command rest [time] */ ! if( ! (strcasecmp(command, "LOGIN") && ! strcasecmp(command, "RESETPASS") && ! strcasecmp(command, "MLOGIN") ) ) { rest = "*********"; /* hide passwords */ |
From: Alex S. <ru...@us...> - 2001-01-10 06:16:15
|
Update of /cvsroot/x2serv/x2/source In directory usw-pr-cvs1:/tmp/cvs-serv1260/source Modified Files: commands.c Log Message: Fixed a bug where +h (god) opers were not able to suspened and unsuspend channels. Index: commands.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/commands.c,v retrieving revision 1.115 retrieving revision 1.116 diff -C2 -r1.115 -r1.116 *** commands.c 2001/01/08 09:52:41 1.115 --- commands.c 2001/01/10 06:16:33 1.116 *************** *** 2644,2648 **** return(TRUE); } ! else if (userleveloper(uptr, hptr) < MA) { send_to_user(uptr, "\002You must be set to access level OWNER or MANAGER to change settings.\002"); --- 2644,2648 ---- return(TRUE); } ! else if (userleveloper(uptr, hptr) < MA && !IsGodOper(uptr)) { send_to_user(uptr, "\002You must be set to access level OWNER or MANAGER to change settings.\002"); |
From: Alex S. <ru...@us...> - 2001-01-10 06:08:22
|
Update of /cvsroot/x2serv/x2/source In directory usw-pr-cvs1:/tmp/cvs-serv657 Modified Files: main.c Log Message: Someone both INCHAN and SUSPENDED got enabled in some channels, so I put some code in the data file reading function to check for that and fix it. Index: main.c =================================================================== RCS file: /cvsroot/x2serv/x2/source/main.c,v retrieving revision 1.40 retrieving revision 1.41 diff -C2 -r1.40 -r1.41 *** main.c 2000/12/19 08:11:56 1.40 --- main.c 2001/01/10 06:08:39 1.41 *************** *** 447,450 **** --- 447,452 ---- if((*ptrbuff)) settings[i] = strtol(ptrbuff, NULL, 10); + if(settings[SUSPENDED] && settings[INCHAN]) + settings[INCHAN] = 0; /* since it shouldnt be possible.. */ } if(i < NUMOFCHANSETTINGS) |