Needed to bump it to 16 anyway (the RFC says 15 plus the protocol command itself, so 16), but EPIC5 bumped it
up to 20 based on a report from users of RusNet so we might as well go up to that as well.
The previous handling for this had the : prefixing the last protocol argument reappear after
a PasteArgs() call. This caused problems with the inspircd server, which prefixes the final
argument for every protocol message with :. In particular the MODE command was problematic.
See https://github.com/inspircd/inspircd/issues/1636
Reported-by: trn
The intention is to display this message when the client has failed to
connect to enough servers that it has to start back at the initially
requested server again.
The old code instead had some quite odd conditions.
The previous code relied on server[i].retries being equal to one less than the
number of connection attempts that had been made on entry to advance_server(), but
this was false for the initial connection attempt.
Change the code instead so that on entry to advance_server(), server[i].retries is
always the number of previous connection attempts that have been made. This does the
right thing for initial connection attempts since .retries starts at zero.
finalize_server_connect() can fail for SSL connections, because SSL_connect() can fail. Without this change, the client won't
try to reconnect after an initial SSL connection failure - it'll just wait forever.
Reported by g0z, thanks!
The new implementation calls into strlen() and memmove(), and is safe to use even if the arguments don't
point into the same string.
The return value is now the same as the first argument (just like strcpy()), but no existing callers care
about the return value anyway.
This code contained a bug where any argument to /HISTORY that _didn't_ start with "-CL" would clear history,
so no number or pattern argument could successfully be passed.
With this fix only an argument that case-insensitively matches "-clear" will clear history, so a pattern
argument will also work correctly.
This should have no functional effect, but groups together the variables required to
'rewind' prepare_display() to a particular point in the source string all together.
This also counts beeps, tabs and non-destructive spaces in the same way.
To maintain historical behaviour, BEEP_MAX of zero indicates no beeps allowed (the same
as /SET BEEP OFF), but TAB_MAX and ND_SPACE_MAX of zero indicates no limit.
This fixes a regression in commmit 70ac43ce77,
where the original screen size would be used to scroll after the terminal had
been resized. If the screen was shrunk, this caused display problems when
running under GNU Screen.
Using output_screen size means that it stands a better chance of working on
non-default screens, too.
There should be no change in behaviour. Replaces a code block of the form:
if (a || b)
{
if (c && a)
{
/* one */
}
else if (b)
{
/* two */
}
}
with the simpler equivalent:
if (c && a)
{
/* one */
}
else if (b)
{
/* two */
}
Change remove_all_dcc_binds() so that it only removes DCC binds for the module supplied, as it's supposed to.
get_dcc_type() should ignore the first entry in dcc_types[] ("<none>") otherwise the client will try to
respond to DCC requests with that name.
Explicitly track the number of entries in the dcc_types[] array rather than using a NULL terminator. This
allows us to change dcc_types[] to use NULL entries to mark unused slots in the array, rather than pointers
to entries with a NULL .name element. Together, this means that the dcc_types[] array is only resized when it
actually needs to be grown and removal works correctly (without eg. prematurely marking the end of the array).
Make add_dcc_bind() fail if the requested DCC type has already been bound by a module (this still allows one
module at a time to rebind a built-in DCC type). Previously the behaviour was ill-defined in this case.
Remove the empty Arcfour_Cleanup() function so that the default module cleanup can happen.
Define MODULE_NAME and use that when registering the module callbacks so that the default
module cleanup will remove them correctly.
The idea here is that if you have a module which implements a new DCC type that is essentially
a lightly-modified version of CHAT or SEND you can reuse these functions.
This function gets the status of a single umode flag identified by umode char rather than
internal server flag number.
This also lets us remove all the USER_MODE* constants because they're no longer required.
Invert the sense of the +w check in e_wall() - we only echo our OPERWALL if we're *not* +w,
because if we are +w then the server will echo it back to us anyway.
The idea here is not to expose the internal server implementation for storing umodes,
but instead have callers just work in terms of umode characters.
The 'possible umodes' have always been the same for all servers anyway. We just assume
that [a-zA-Z] is the bounding set.
server.ctx is now allocated once for each server on first connection, then reused for subsequent connections.
server.ctx wasn't being cleared when the server was closed (as server.ssl_fd is), so this was causing
reconnection to fail until try_connect() got called.
This also removes the last uses of the CHK_* macros in ssl.h, so remove them.
This avoids leaking memory.
Also change to always call SSL_shutdown() regardless of whether a QUIT message was sent. No
need to call SSL_shutdown() from write_to_server(), close_server() will do it for us.
Remove "Closing SSL connection" message.
The -s flag resets after the next server on the command line, but it was also incorrectly resetting
if a nickname was seen as well. This meant that a command line like this failed to use SSL:
BitchX -s -p 9999 gauze irc.choopa.net
Also update the help text to correctly reflect the operation of the -s flag.
Reported by gauze.
It is only called in one place, where from_server is already set to the same as the argument.
Rename rebuild_all_ison() to rebuild_notify_ison_all().
Make rebuild_notify_ison() and rebuild_notify_ison_all() static, they are only called from
this file.
There's no need for the conditional compilation - tcl_bx.h itself has the WANT_TCL guards
necessary.
This makes generating the Makefile target dependencies easier.
The only external change here is that it now always sets *cnt to 0 when it returns NULL
Previously, it could set it to -1 in some cases, in particular when dll_commands is NULL.
This led to a bug where /HELP would show the wrong number of matching commands, because it
added the return value of find_dll_command() to the number of matching internal commands.
Also fixes a set-but-unused-variable warning.
There's no need to dynamically allocate encode_string, so just make it static.
It does need to be unsigned char though, for the loop that intialises it. So cast it
when calling my_encrypt() / my_decrypt().
This fixes 'const char **' vs 'char **' compiler warnings.
Additionally, tcl_bx.h always defines STDVAR and can be included without checking for WANT_TCL.
Rename global variable 's' to a longer name. Rename function 'ignore' to a name that reflects what
it actually does.
Make sigint_handler() and my_exit() static, because they're only used in this file.
Remove the 'how' parameter to rsindex(), making it reverse-search for only the first matching character,
as sindex() already does. There are only two callers, and one already passed a hardcoded value of 1.
Also change rsindex() so that it starts searching at the character BEFORE the passed in position. This
makes it easier to repeatedly call rsindex() in a loop to search for the Nth matching character, and
also fixes a technical instance of undefined behaviour where a pointer is decremented to point before
the start of the string.
Remove the 'mark' parameter to strsearch(). Instead, always forward-search from the beginning of the
string and reverse-search from the end of the string, as this is what the two callers want anyway.
Bump the module ABI version because these functions are exported to modules.
inv_strpbrk() is the inverse of the standard function strpbrk().
Calls to sindex() where both strings are not NULL and the second string begins with ^ are equivalent
to calls to inv_strpbrk() (but without the ^). Convert those calls.
sindex(), where neither argument is NULL and the accept string does not start with ^, is exactly equivalent
to the standard function strpbrk().
Further, strpbrk() where the accept string is only one character long, is exactly equivalent to strchr().
The old code could move the variable 'pointer' backwards one character before the start
of the string (then incremented it again before returning). Formally this is undefined
behaviour, so fix it.
The removed variables are:
dll_functions
dll_numeric
dll_commands
dll_variable
dll_ctcp
dll_window
These are not actually directly used by any modules, and hiding them allows us to more easily
change their implementation later.
This helper function is for modules to save the contents of their module variables to a file
as SET commands.
It will remove the need to export the raw dll_variable list to modules.
This error seemed to be benign, because I don't think there was a way to get here with
int_flags non-zero without VIF_CHANGED already set.
Remove unnecessary tests for 'value' and '!value', because value is always non-NULL in that
code path.
As reported by Ancient, this is how it is documented to work. It's also how shitlist level 2 works, so
it's consistent this way.
Some other cleanups in check_auto() while we're here.
A fractional-second timeout was already supported for the initial timeout of a /TIMER, but
if the timer was recurring then the interval was rounded to a whole number of seconds for
the subsequent timeouts.
Change the type of interval from long to double to fix this.
These globals were used to store the original terminal dimesions from the terminal database (or
in the case of reattaching, supplied by scr-bx) to be applied if the current terminal dimensions
could not be determined.
Instead, we leave the original terminal dimensions in current_term->TI_lines and current_term->TI_cols,
and create current_term->li and current_term->co to store the current terminal dimensions (as eg.
supplied by scr-bx).
Separate out the justification step of make_status() into a new function, so it can be wired in to
stat_convert_format() as well. This makes $statsparse() work correctly with right-justified status
formats.
Minimise the amount of copying around that is done during the justification - instead, we can just
remember pointers into the buffer returned by strip_ansi() for the left-hand-side, right-hand-side and
padding character.
Don't keep concatenating onto the same buffer with strlcat() when generating the padding - that gives
n^2 behaviour. Instead keep a pointer to the current end and concatenate there.
Ensure buffer is null-terminated before calling strlcat() on it, in stat_convert_format().
With this change, the signal handler signature is defined in only one place.
Also make most signal handler functions static (those that are only referred to in irc.c).
CLOSING_SERVER was never referenced outside of server.h where it's defined, and CLOSE_PENDING was cleared
but never set by any code.
Rename LOGGED_IN to namespace it (in anticipation of other flag variables in the server struct being
consolidated into a set of server flags).
Also put correct parantheses around the definition of SF_LOGGED_IN.
The guts of this function doesn't need to be in server.c - it only uses extern server functions so it
makes sense just to move it into the body of function_servers(), the only caller.
That means it's no longer accessible for loadable modules, but it isn't much use for them anyway. They
can always directly access the server list if they need that info.
(Requires rolling the module table version).
When $myservers() is called with an argument of 1 it is supposed to only return the refnums of servers
that are registered (ie. those which it is legal to send a command to). This is the way EPIC works, and
it was always intended to work this way in BX too.
Also fix the warning about a NULL itsname - we use our name for the server if it isn't registered yet.
Remove the slightly bogus use of strncat() while we're here, by removing the temporary stack buffer and
just directly creating the result string with m_s3cat().
Remove the 'resend_only' flag option to fudge_nickname(). The only caller passing it was the CHANGE_NICK_ON_KILL
feature, and in that case it was the wrong thing too (and stopped that function from working at all).
Some other minor cleanups in fudge_nickname() while we're there.
Unset MSGLOG_FILE or CTOOLZ_DIR could cause a null pointer dereference.
If stat() failed it dereferenced the bogus 'struct stat', and in the directory case
just silently failed. Now it falls through to the "error opening" path.
This uses another bit in the existing flags argument in place of the command argument, and avoids
having to re-compare against fixed strings ("PRIVMSG", "NOTICE").
This allows building against recent libtcl versions.
A fallback definition of Tcl_GetStringResult() is included so that building against libtcl 7 still works.
This means the calling code in commands.c no longer needs to take a copy before calling the function.
Also remove code testing result of of ctcp_quote_it() and ctcp_unquote_it() - these functions never fail.
These functions are really specific to parsing and creating CTCP SED messages, which means they belong
in ctcp.c with the other CTCP code.
Also remove unnecessary inclusions of encrypt.h and ctcp.h.
Use size_t for passing buffer lengths, and const char * for encryption keys and other non-modified buffer
arguments.
Remove pointless helper function do_crypt().
Remove the inclusion of color.h from config.h, which is included by every file via irc.h, and instead
include it only in debug.c, fset.c and vars.c which are the only files that use it.
This minimises the number of files that need to be rebuilt when changing default format strings.
Encrypted messages to a channel need to use their own format. This also fixes the use of ENCRYPTED_PRIVMSG
and ENCRYPTED_NOTICE - they were being called with too many arguments so the destination nick was being prepended
to the message text.
Actual encryped messages and notices are now printed directly from do_sed() / do_reply_sed().
Inline CTCP replacement is only done if the message cannot be decrypted (for the [ENCRYPTED MESSAGE]
placeholder).
This removes the need for the global flag 'sed' to alter the NOTICE and PRIVMSG handling.
A side-effect of this is that SED PRIVMSGs now do not go through the usual PRIVMSG ignore
and flood handling. This is acceptable because messages can only go through this path if
the sender has actually been added as a SED peer with /ENCRYPT, and it still goes through
the CTCP ignore and flood handling.
When a SED-encrypted NOTICE is scanned for CTCPs within the decrypted portion, they should be
handled with do_notice_ctcp() so they are treated as CTCP replies.
kickcount is for counting KICKs sent by the user to detect KICK floods.
The userlist and isme() tests are already done prior to calling handle_nickflood() so they are
not needed here.
This flag is for tracking if we've sent a KICK for a nick. It means we can avoid
sending duplicate KICKs (eg for floods, channel protection etc).
MODULE_VERSION is bumped because NickList is a struct exported to modules.
This test is done quite a bit across the tree, and the open-coded variants make it easy to have an
accidental mismatch between the length of the prefix being tested and the length actually passed to
strncmp().
This fixes an issue of that type comparing the server version against the prefix "u2.10", where the old
code used an incorrect length of 4.
This table isn't modified or referenced outside of term.c, so it can be const static.
The 'const' moves ~20K from the data segment to the text segment (on 64 bit), reducing the total size of
the BitchX data segment by 10%.
Tokens that begin with two underscores __* or an underscore and an uppercase letter _X* are reserved,
so we should avoid those for our own include guards. The standard I'm settling on for foo.h is FOO_H_.
Also define STERM_C and include modval.h in scr-bx.c.
This allows us to remove the slightly bogus dummy definition of enum VAR_TYPES from modval.h, and use a simple
macro to redirect the declaration and use of get_int_var() to BX_get_int_var().
irc_std.h is where these belong - it's where the normal declarations (via the system headers) come from on
systems which don't need the compat functions.
This change means that struct.h no longer needs to include alist.h, so it will be indirectly included in a lot
fewer other files.
As a consequence, server.h needs to include notify.h to get the definitions of those data types.
Neither compat.c nor ircsig.c are compiled different for wserv or scr-bx, so there's no reason these
binaries can't just link to the same .o files as the main BitchX binary.
This also cleans up the build rules around wserv and scr-bx a little.
init_socketpath() was building a sprintf() format string intended to be used by /DETACH to create the socket
file name. This included the actual socket path, plus a %d for the port, plus the sanitised tty name and
hostname.
Only one caller needed all this though - the /DETACH command - and the other callers (in scr-bx.c) just
wanted to truncate it to the actual socket path. The format string also wasn't safe - if the home directory
path, hostname or ttyname contained % characters these werent being escaped.
It simplifies things to have init_socketpath() just return the actual socket path, after creating the 'screens'
directory if necessary. This lets the code in scr-bx.c use it as-is, and removes the need for the global
socket_path variable. The code to include the sanitised tty name and hostname in the socket file name can
be moved to the create_ipc_socket() function.
There's no need to check access() for the socket path before trying to create it - just call mkdir() regardless,
since it will fail if the path already exists, which is fine.
This commit also adds error handling to the create_ipc_socket() function for the case where creation of the
socket file fails, and switches the chmod() and chown() for the opened file to the more appropriate fchmod()
and fchown().
The function provided (either by #define to the module table or directly in the case of scr-bx.c)
is called my_ltoa(), and the #define in irc_std.h aliases this to ltoa().
The test for p != NULL is pointless, it has already been dereferenced and modified.
The argument to tolower() and toupper() must be in the range of unsigned char.
Fix some spelling errors in user-visible messages.
remove_channel() is only called in direct response to a message from a server,
so it always acts on from_server - remove the unnecessary server argument.
The channel argument is always non-NULL - remove the dead code that removed all
channels if a NULL channel was passed.
The declaration of dcc_dllcommands in modules.c was wrong - add it to dcc.h so it's checked against the definition in dcc.c
and include it from there.
The DCC_dllcommands structure isn't structured like a "List2" so remove_module() doesn't work - use remove_from_list_ext().
Previously these codepaths were dead because it was passing an argument like "+HOST" to check_whowas_nick_buffer()
in place of the channel name, so it would never find anything.
Now that function supports a NULL channel to mean "any channel", so we can use that. The actual code itself needed to be
fixed as well, it's now similar to the way userhost_unban() is written.
The use of the whowas cache in userhost_unban() would never work, because it was passing 'args' as the channel
name which also included the window number.
Rework this substantially, including using lookup_channel() and set_display_target() in place of prepare_command().
The second branch of if (str) ... else if (str) is dead code, remove it. Also remove the if() entirely because
the while condition covers it exactly anyway.
Move the static variables used only in this function to function scope.
Change color_mod to const static and remove unneeded variable c_mod.
Move the increment of cparse_recurse to after the point where we bail.
None of this should have any user-visible impact.
pid_t is defined by POSIX to be a signed integer type, so the %u format is wrong.
Cast to long and print with %ld - it is unlikely that any real-world system has pid_t bigger than long.
Previously you could unset CMDCHARS and the effect would be to treat it like it was set to DEFAULT_CMDCHARS,
except that some code was missing the fallback (eg. ignore_last_nick()) which would make it crash.
Instead of having the fallback everywhere, just make it so that you can't unset the variable - if you try, it
sets it to DEFAULT_CMDCHARS. This reflects what the behaviour has always been, it just makes it explicit to
the user and the bonus is we don't have the test it for NULL everywhere.
The 'free_it' variable was only initialised to zero at the start of the function, so when non-main screens
were processed in the later iterations of the loop, it could keep a value of 1 from the previous iteration.
We don't actually need a free_it variable at all - just use a NULL value of ptr_free to indicate that there
is nothing to free (and passing a NULL to new_free() is a no-op).
This also simplifies a test because ptr is always non-NULL (strip_ansi() never returns NULL).
If wserv is told to connect to "localhost" it might try to connect to ::1, which won't work because
the wserv socket is AF_INET only.
So explicitly bind the socket and make the connection to "127.0.0.1" instead.
Previously, INVITE and WALLOP were tracked for flooding, but if the flood triggered then the auto-ignore
didn't happen. As far as I can tell, this was just an oversight.
Using sequential constants for *_FLOOD constants means that we can use a simple lookup table to convert them
into text for display and IGNORE_* constants.
This adds a FLOOD_FLAG() macro to convert a _FLOOD constant to the appropriate flag. For now this just
casts the argument to unsigned int.
Rename Flooding.type to Flooding.flags and change it to unsigned int, to reflect that it's a bitfield of
flags for multiple flooding types.
All callers of flood_prot() were supplying { get_flood_types(flood_type), flood_type } as the second and third arguments,
except one that supplied { get_flood_types(CTCP_FLOOD), CTCP_ACTION_FLOOD }.
Hardwiring this logic in to flood_prot() lets us remove the 'type' argument without changing the behaviour.
This aligns the function with the documentation and what EPIC4/5 do. I couldn't find any example of an existing
script that actually called this function, so hopefully no-one is relying on the old behaviour.
This replaces calls to alloca() followed by two strcpy()s with a single
call to memmove(), and removes a confusing for/break structure.
The function should behave exactly as it did before.
The static 'pos' variable in check_flooding() would not stay in sync with the number of entries in
flood_list after clean_flood_list() was called. This meant that check_flooding() would always end up
removing all previous entries if it tried to add a new one.
Fix this by removing the tracking of number of flood_list entries, and just removing stale ones (older
than /SET FLOOD_RATE).
As always, the funcion pointers should be cast to the correct type before calling them, rather
than calling them with the wrong type and trying to cast the result. Fixes a warning compiling
mail.c on 64 bit architectures, and this might well have caused a crash when using the qmail plugin
on those architectures too.
Every call to create_dcc_int() was preceded by a call to parse_offer_params(), and the DCC_int
is where the address/port/size produced by the latter is stored, so this refactoring makes
sense and reduces the calling function complexity/size considerably.
Checking before truncation means you can sneak a privileged port past the check.
This change also collects the various broken-out parts of a CTCP DCC offer into a struct so that
it's easier to pass them all around together.
parse_offer_params() was being run unconditionally by check_dcc_init() even if it didn't find a
custom init_func() to call, which is the usual case. It then gets called again by the hardwired
DCC init function, which led to the error message appearing twice. This has check_dcc_init() only
call parse_offer_params() when its about to dispatch to a custom init func.
This also improves the message a bit (making it [host:port] rather than the other way around) and
combines the 'privileged port' message and "zero address" message together.
Previously waiting (inactive) file-type offers were shown different to others, omitting the
time-since-offer. Unify them to use the same format, which also cuts out a few lines of code.
Also tweaks the DCC_BAR_TYPE 1 format to include the DCC state (always Active) where the
completion bar would be in the DCC_BAR_TYPE 0 format. This just looks a bit more consistent.
get_stat_format() now returns the entire cparse string, not just the completion bar portion. This
means we don't need to call convert_output_format() twice.
This conversion (which conditionally prepends 'T' to the DCC type name depending on whether
TDCC is enabled or not) was open-coded in several places.
Also removes unused extern function get_dcc_type().
s->time on the SocketList is set to the time that the chat offer will expire, so it's in the future.
This shows up as a very large positive time. Instead, use n->lasttime as that is set to the time
when the offer is made.
Also adjust the format for non-file offers so that it all lines up properly.
This now calculates a 'pcomplete' value for proportion of transfer complete (0.0 to 1.0).
From this we can calculate most other things easily - percent complete, ETA, and the size
of the completion bars.
User-visible change is that the DCC_BAR_TYPE 1 bar now matches the % complete for the RESUMEd
file case.
The only user-visible change here is that the bar displayed for DCC_BAR_TYPE 1 is now shown
as empty for a zero-length file rather than full, matching the 0.0% complete that is shown
and the bar displayed in the DCC_BAR_TYPE 0 case.
With DCC_BAR_TYPE 1 set, the stat line for active DCC file connections was not aligned
correctly with the header (the mm:ss field spilled into the KB/s column.)
This also simplifies things by always generating the inline bar, so the only difference
between the line printed for DCC_BAR_TYPE 0 and 1 is now the format itself.
This fixes a few issues in this function - the socket type should be 'int' not 'socklen_t', the
error cases should close() the socket so it doesn't leak.
The result of read() can be -1, and if that is compared against the unsigned result of sizeof
it will be converted to SIZE_MAX. Cast the result of sizeof to a signed type.
There's no reason you shouldn't be able to use modelock as a half-op.
Also a few other minor cleanups in this function - eg. use my_send_to_server()
with the passed server number instead of implicitly using from_server.
glob_commands() would run off the end of the irc_command array if given a match that matched
the last command. It also leaked memory because it used m_s3cat() to construct the string,
then passed that to m_strdup().
This fixes these problems by reworking glob_commands(), and at the same time removes the use
of alloca() and wild_match() by using strncmp() instead to match the start of a string. Move
glob_commands() to alias.c and make it static since it's only used for aliasctl().
Change the 'name' argument of find_command() and find_dll_command() to const char * at the same
time, so that glob_commands()'s prefix argument can be const char * too.
cdcc_numpacks is unsigned, so %u should be used instead of %d.
Fix some memory leaks in /CDCC PLIST and /CDCC NOTICE where malloc_sprintf() was called
and the string never freed.
!password || (password && x) can be simplified to !password || x.
There's no need to check if a string is equal to the destination before
copying it there: might as well just copy it.
The 'channels' argument was unnecessary because the channel list passed to it would
always be from get_server_channels(server) anyway.
Changing the message argument from a protocol message format string to a plain payload
string for PRIVMSG means printf-escaping of the argument is avoided in the caller.
This simplifies the callers and means we can remove the last use of quote_it().
This change also switches set_server_away() to use send_msg_to_channels() instead of
open-coding the equivalent, which simplifies that function a lot.
We are changing the signature of a function exported to modules here; however none
of the in-tree modules use this function so it should be OK.
The use of quote_it() is unnecessary - we can just directly use my_send_to_server()
to construct the message.
Preparation to remove quote_it() entirely.
Identifiers beginning with two underscores or one underscore and a capital
letter are reserved in all contexts, including macros.
The __N macro in irc_std.h is in this space, and was conflicting with a macro
definition in gcc 5.4.0's xmmintrin.h under cygwin, making the build fail.
Reported-By: ice-man
These commands use prepare_command() to find a channel to act on, which returns the server to use.
The code should then use my_send_to_server() to ensure that it sends the command to that server -
these functions were using send_to_server() which sends to 'from_server', which means that they
could send the commands to the wrong place, for example if they were called from a hook on a
different server.
This patch was created with the following coccinelle script:
// Detects pairing preprare_command() with send_to_server() (which uses from_server)
@prepare3@
identifier s;
local idexpression c;
expression E1, E2, E3, E4, E5;
@@
(
if ((c = prepare_command(&s,...)) != NULL && ...)
{
<...
(
- send_to_server(E1);
+ my_send_to_server(s, E1);
|
- send_to_server(E1,E2);
+ my_send_to_server(s, E1, E2);
|
- send_to_server(E1,E2,E3);
+ my_send_to_server(s, E1, E2, E3);
|
- send_to_server(E1,E2,E3,E4);
+ my_send_to_server(s, E1, E2, E3, E4);
|
- send_to_server(E1,E2,E3,E4,E5);
+ my_send_to_server(s, E1, E2, E3, E4, E5);
)
...>
}
|
if ((c = prepare_command(&s,...)) == NULL || ...) { ... return ...; }
{
<...
(
- send_to_server(E1);
+ my_send_to_server(s, E1);
|
- send_to_server(E1,E2);
+ my_send_to_server(s, E1, E2);
|
- send_to_server(E1,E2,E3);
+ my_send_to_server(s, E1, E2, E3);
|
- send_to_server(E1,E2,E3,E4);
+ my_send_to_server(s, E1, E2, E3, E4);
|
- send_to_server(E1,E2,E3,E4,E5);
+ my_send_to_server(s, E1, E2, E3, E4, E5);
)
...>
}
)
The first is unnecessary because after_expand() never returns NULL, and the 'rest' pointer has been
dereferenced multiple times anyway.
The second is unnecessary because parse_number(&ptr) cannot set ptr to NULL.
This fixes several issues with the implied operators when NEW_MATH is enabled:
* None of the implied operators were returning the correct value, which should be the value
assigned to the LHS.
* The &&=, ||= ad ^^= operators were also operating on uninitialized variables and so behaving
unpredictably.
* The /= and %= operators would crash the client when the RHS was zero, because after outputting
the "Divide by zero" error they would go on to perform the operation anyway.
This fixes a bug introduced in commit f2ae2327, which improved the Makefiles for parallel builds
but in doing so removed the rule to create an empty .config.h file.
.config.h isn't included in the source distribution - it's created by bxconfigure if you run it.
If you don't run it, the build systems needs to create an empty one. This commit adds a rule to
both the toplevel Makefile.in and source/Makefile.in (the latter in case you're running 'make' just
in the source/ directory). The toplevel one is required for building the modules tree under dll/,
since the module Makefiles don't have the right dependencies wired up.
This also makes 'distclean' remove the .config.h file.
This FSET has existed for a long while but has been unused for some time,
since before the userlist was reworked to use flags instead of levels. This
means that the default value for the FSET also has to be updated.
This is just a simplification - the string format should always match the arguments passed,
and none of the options are using anything but plain %s formats.
This also requires modifying /RELI to store the invited-channel in .last_msg so that it
can use the numargs = 3 format.
The RELSN format already existed but wasn't used - instead it used SEND_NOTICE. The other relay
types already used similar formats for their relayed messages.
The default /FSET RELSN looks just like the default /FSET SEND_NOTICE so this shouldn't be
noticeable to anyone using the defaults.
This required updating the NOTICE-sending code to correctly stash the 'to' in the right place.
This switches from somewhat gory string parsing based on strncmp() and next_arg() to a simpler alternative
based on sscanf(). I think these are much easier to understand now, and shouldn't have any subtle bugs
lurking like the old code.
This also removes support for some obsolete messages that don't seem to be in any modern ircds:
"Identd reponse differs"; bot messages like "Rejecting vlad/joh/com bot:" except for "is a possible spambot"
which is still in use; and the "High-traffic mode" messages.
Previously, SWATCH NONE meant "show no server notices" if OperView was
enabled, but "show all server notices" if OperView was disabled. Now,
it always means "show no server notices" (the default SWATCH is ALL,
so the default will behave the same).
This allows us to simplify the code a great deal as well.
Also trim off leading "***" if the server messages are handled by
handle_oper_vision(), as they already are in parse_server_notice().
Using strstr() here is entirely wrong. The intention is to catch notices
prefixed by *** or similar, and that's already detected further up in the code,
stored in the flag variable.
serversay() calls add_last_type(), so there's no need for the callers to do so
as well.
Remove the first argument to serversay() because it was always called with 1
anyway.
This was broken in commit [07cdd587], where 'sizeof' was used on a pointer
instead of the buffer pointed-to.
Fix this by having the caller of ircop_flags_to_str() supply a buffer and
length, since there's only two callers and both can use happily use stack
objects.
Remove the extra space in the default /fset SERVER_NOTICE, and similarly
the extra space in the HUMBLE /set SERVER_PROMPT.
The code in the client always _intended_ to add a space between SERVER_PROMPT
and SERVER_NOTICE_FSET but a bug in 75p3 and below meant it that it didn't.
This bug was fixed in 1.0b but the formats were never updated.
Also remove replace the embedded ANSI in the default SERVER_PROMPT with
% color code.
We don't know the server's proper name until registration, so the test against
that isn't reliable. We shouldn't be able to receive messages from anyone else
until we're registered, so this should be safe.
This requires changing serversay() to accept the from name instead of the
from_server. While we're there, replace the use of alloca() with simpler
logic based on m_sprintf().
The old code would return "omain" rather than "domain" in this case.
Also remove unneccesary checks on the return value of get_server_itsname() -
this function already falls back to 'name' if 'itsname' isn't set yet.
This hook and format are used for NOTICEs where the destination isn't
a channel and isn't yourself - eg. global targets like $$*.org. This was
already the case for PRIVMSGs (using the MSG_GROUP hook and format).
Previously these were being routed like a normal NOTICE, and those don't
display the target, so it looked exactly like a private NOTICE to you.
This will also catch server notices sent before you're registered.
Functions display_msg() and check_sync() are only used in numbers.c, so they
can be static.
Remove inclusions of <numbers.h> from .c files that don't need it.
Some systems need <sys/sockio.h> for the SIOCGIFCONF ioctl - this switches
to using a proper configure check for that header rather than just assuming
it'll be there if we can't find SIOCGIFCONF. Should be more robust.
Only include <netinet/in.h> and <sys/socket.h> if the system supplies them.
This is necessary to try and get the mingw32 build working again.
No need to include <sys/types.h> and <netinet/in.h> from cdns.c - these are
already included by <irc.h>.
Instead of showing a meaningless pointer value for Screen:, we show the
screen number and ttyname.
Also take the CO, LI values from the window's screen.
Don't show the Prompt: unless one is set.
Someone reported being unable to connect with the error "Address family not
supported", which is probably being returned by socket(). It is likely a
system where getaddrinfo() is returning AF_INET6 addresses, but socket()
won't create AF_INET6 sockets.
To handle this case, we loop over all the addresses returned by getaddrinfo()
until we find one that socket() will accept.
This ensures that the saved-set-gid is also set, although this shouldn't
matter in practice since we always call execve() soon after, which
overwrites the saved-set-gid with the effective gid anyway.
Change the all: target in the toplevel Makefile so that it doesn't try to
resolve build dependencies at the top level - instead, it just recursively
builds the all: target in source/ and dll/.
Change the all: target in the source/Makefile so that it builds the EXTRAS
(scr-bx and wserv) as well as the main client binary.
The upshot of all this is that one "make" invocation is responsible for both
scr-bx and wserv, which is necessary for parallel make (make -j) to work
correctly as these binaries share some object files.
There's several different types of DCC offers, all of which need slightly
different handling. Previously they were all handled by the monster function
register_dcc_type() - this breaks them out into seperate functions for handling
SEND, RESEND, CHAT and BOT offers, moves common code into static helper
functions and renames the entry point from ctcp.c to handle_dcc_offer().
This will allow adding a way for modules to register DCC offer types that
they're interested in.
This also moves rename_file() from misc.c into dcc.c, where its only user is.
The last two arguments are port, then offset (as per the DCC ACCEPT CTCP
command). We don't really use these anyway - port is passed to dcc_create()
but for pre-existing DCC entries all that did was add it to the socketinfo,
which doesn't seem to have any real effect.
Also fix dcc_create() so it passes the actual remote port to add_socketread()
(as above, this doesn't seem to have any real effect but is consistent with
the other code).
This improves the client messages - eg previously the message to tell you that
you could use /DCC RESUME never got shown due to a logic error.
It also won't try to auto-resume if the local file is already the same size or
bigger than the incoming file.
Mark DCC connections that we have requested RESUME on, so that we know
whether or not to act on a DCC ACCEPT that is received.
Also fixes up a slightly wrong message in /DCC RESUME.
DCC_CNCT_PEND was only ever set, not tested, so it was pointless.
There's no point only defining DCC_SSL when HAVE_SSL is defined: we can't
re-use that flag bit anyway, so might as well just define it always.
Also fixes a "flags && DCC_WAIT" that should have been "flags & DCC_WAIT".
This has no practical effect though I believe, since as far as I can tell
DCC_WAIT would always be set at that point anyway.
This also fixes a few others - eg /KBI now kicks-then-bans, and
/BKI bans-then-kicks (previously these were the wrong way around).
Reported by profiler.
The old code created a new stack frame in parse_line_alias_special(), then
another one in parse_line(). This prevented $functioncall() from working,
and made the output of CALL look odd.
|Rain| mentioned this years ago in starman.irc.
close_server() should call clear_server_queues() on the server that's being
closed, not from_server. This also lets us remove a few other calls to
clear_server_queues() that are right next to calls to close_server().
Channel WALL notices now have to match "[%Wall%/%] *", and have to be for
a channel that the client is actually on. Otherwise, they just appear as
ordinary NOTICEs.
We pass through ANSI just fine in PRIVMSGs, so we might as well treat
NOTICEs the same way too. The old code wasn't just stripping them out,
either - it was turning them into printable garbage.
stripansi() actually just munged control-characters, so it just turned ANSI
codes into visible junk.
stripansicodes() instead leaves control characters alone but removes complete
ANSI sequences from the string. I'm not sure if even that is necessary,
really - after all, we always allowed ^B, ^C etc style formatting in CTCP
replies.
get_reason() is then used only for the implementation of get_kick_reason()
and for the $getreason() scripting function. Add current nick as an
explicit argument for get_reason(), which pushes all use of from_server
out of the ransom reason functions.
Also switch a few instances of send_to_server() to my_send_to_server() where
the current server has been returned by prepare_command().
Previously only send_kill() used BitchX.kill - the other KILL commands (eg.
/WHOKILL) were using the random kick reasons. Standardise them all on
BitchX.kill, and add this file to the source so it can be installed along
with the other random reason files.
Rename randreason() to fread_random() to better reflect its function,
and change it to a one-pass algorithm. Have it write into a caller-provided
buffer instead of a static buffer. Fixes a file leak when an empty
file is given to this function.
Change freadln() so that it never returns an empty line - it only returns
0 at end-of-file now. This simplifies its callers.
Factor out some common code from the several get_reason()-type functions,
which greatly simplifies them.
Re-checking the command name to see if it's a timed ban means that the
compiler can't see that it's the same check.
This also makes sure you can't specify a negative timeout.
Initialise ip_str so that it isn't used uninitialised.
Don't strip server flags from user@ portion of the hostmask, so that it will
not miss matching bans.
Switch ip_str from alloca() to malloc_sprintf() / new_free() - there's no
particular need for alloca() here.
This silences a few compiler warnings.
This also cleans the function up by removing some always-true checks.
I'm not convinced that this function makes a whole lot of sense, though.
Will look into it further...
This function is only used by the GUI menu code, so we don't need to
build it for normal builds.
Also clean up some unsigned char / char mismatches that the compiler warned
about.
A few places created strings based on the terminal width, using fixed-sized
buffers and without checking for overflowing them. Fix those, and also
replace all other sprintf() calls with snprintf().
Reported by cpet.
Chatnet doesn't use the odd 310 numeric support anymore, it now uses 310 for
the same WHOIS_HELPFUL as Dalnet. They apparently use a pretty bog-standard
Unreal ircd now.
This code appears to be some kind of backstop so that the client will notice
a server connection that's died because of a network interruption. Checking
errno that was last set christ-knows-where is not the right way to do this,
though.
The normal write to the server for the lag check should eventually see the
host/net unreachable error if this happens.
Previously /STACK would not accept just the initial part of a /SET name
even if it wasn't ambiguous. Now it uses the same matching behaviour
as /SET.
This also removes an unused variable in do_stack_set().
Previously the server lag check was run by update_clock() if the number of
seconds since client startup was a multiple of 20 (unless it had already been
done this second). This meant that if update_clock() was not being called
frequently (eg. if your IRC connection was very quiet), it might go a long
time between lag checks.
This commit adds a /set LAG_CHECK_INTERVAL (defaulting to 30). For each
server, a lag check ping is scheduled for every LAG_CHECK_INTERVAL seconds
after the connection is finalised/registered. Setting this value to 0
disables the lag check pings entirely.
The old code set the lag to 'unknown' immediately after sending out a ping,
which meant that it was quite unpredictable how long the lag value would
stay around for. The new code only sets this once the current lag value
has become stale (ie. a ping reply is overdue based on the current lag
value). If your lag is staying the same or reducing, you shouldn't see
the [Lag ??] at all.
An absolute wake time is now calculated and updated by set_server_bits(),
TimerTimeout() and tclTimerTimeout(). This is then used to calculate the actual
select() timeout, instead of having those functions calculate a relative timeout
value themselves. This significantly simplifies those functions, since the
underlying values tend to be recorded as absolute times.
It also allows us to disentangle tclTimeTimeout from TimerTimeout(), and move the
responsibility for calculating the QUEUE_SENDS wake time from TimerTimeout() to
set_server_bits() where it belongs.
The QUEUE_SENDS and CONNECT_DELAY wake up times will also now be correctly
calculated, based on the last sent time and connect time respectively.
The DOUBLE_STATUS_LINES /SET has existed for a long while, but setting it has
never actually had an effect. This change causes it to affect the
/window double setting of new windows: 0 means new windows are created without
double status lines, 1 means only the first window is created with double
status lines and subsequent windows aren't (this is the default) and 2 means
that all windows are created with double status lines.
Note that setting this variable in your .ircrc can't actually affect the first
window, because that's created before the .ircrc is loaded. The compiled-in
default value (DEFAULT_DOUBLE_STATUS_LINES in config.h) is the only thing that
can affect the first window.
Reported by presi.
This is preferable to using time_diff() to compare two timevals, because
time_diff() gives its result as a 'double' which only has 53 bits of
precision.
Also switch a couple of places from using time_diff() to using
this function.
Define USE_NON_CONST so that the newer TCL headers define functions in the
same way as pre-8.4 TCL headers. It will be a good idea to change to
USE_COMPAT_CONST instead at some point.
Also use ckfree() instead of free() to free an allocation returned by TCL.
If we immediately handle timers that have already expired, there doesn't
seem to be a compelling reason to add 100ms to the expiry of unexpired timers.
This means that settings like CONNECT_DELAY and CONNECT_TIMEOUT are compared
against the current time with sub-second resolution. With the old way, the
delays could be up to a second longer than asked for, which had the effect of
almost doubling the default CONNECT_DELAY value of 1.
Adding these in preparation for converting server->connect_time from time_t
to struct timeval. Also converts three existing open-coded versions over to
the new functions.
set_server_bits() now returns -1 for "no timeout", so 0 is a legitimate
return value.
io() should only update real_timeout from server_timeout if server_timeout
is not -1 (real_timeout == -1 ends up meaning "wait indefinitely").
Note that if you set CONNECT_DELAY to zero you get a lag check ping sent off
first thing in the server connection, this should be fixed.
Replace open-coded loop with strpbrk(), make the constant lame_chars string
static const and remove the unused variable 'user'.
I think LAMEIDENT might be obsolete now anyway - I can't find a server that
allows control chars in usernames these days.
The annoy kick code looks for messages that are longer than 12 characters
and more than 75% of them are highlighted (eg. bold). The old code counted
the whoel message length, so it could be fooled by padding the message with
lots of nonprinting control characters. This change makes it count only
displaying characters.
Also fix the check for beep (it's a single character, not a highlighting
toggle, so we just check for one of them), and add a check for the blinking
highlight.
These functions are only used by parse.c:annoy_kicks(), so move them next
to that function and make them static.
This also changes their arguments from unsigned char * to char *, getting rid
of some signed/unsigned mismatch warnings.
We now send PING <server> :<server> for /spings, and
PING LAG!<cookie>.<tv_sec>.<tv_usec> :<server> for lag checks. The cookie is
set randomly at server connect time, and means that clients connected to the
same bouncer shouldn't act on each other's lag checks.
We can now remove in_sping entirely - previously it would get out of synch if
you disconnected with a sping in progress.
This changes the code to use struct timeval and get_time() on all systems,
which simplifies the code by removing most of the checks for HAVE_GETTIMEOFDAY.
The only user-visible change is that ancient systems without gettimeofday()
will see message like "Server pong from irc.choopa.net 1.0000 seconds" instead
of "Server pong from irc.choopa.net 1.x seconds". And really, I seriously
doubt that there's any systems like that left out there anyway.
Four instances where 'default:' is at the end of a block replaced with
'default: break;' (reported by mscherer).
One typo where [j] should have been [1] (array out of bounds error).
Missing <unistd.h> includes for _exit(), and <string.h> for memcpy().
There's no need for a top-level dummy Makefile - the real Makefile is generated
by configure, and the dummy file only worked on systems that had bash installed
into /usr/local/bin anwyay.
The client release version is now defined in configure.in rather than
source/irc.c. The gitversion.sh script is used to automatically add a
suffix to the version number for versions of the client built from git.
Also removed AC_REVISION() from configure.in, because $Revision$ doesn't
make sense with git.
Integer division has potential edge-case overflow problems that are best avoided.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@536 13b04d17-f746-0410-82c6-800466cd88b0
<fcntl.h> is the name used by POSIX, so we prefer this and only fall back to
<sys/fcntl.h> on non-POSIX systems. Fixes warnings compiling against musl
libc.
Reported by ncopa.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@531 13b04d17-f746-0410-82c6-800466cd88b0
ncurses can optionally declare tigetstr(), tigetnum() and tigetflags() with a
const char * argument, indicated by the NCURSES_CONST macro. So we use this
macro, if available, to optionally declare cap2str.iname as const char *.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@530 13b04d17-f746-0410-82c6-800466cd88b0
Bandwidth and memory have both increased a lot since these values were last looked at.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@529 13b04d17-f746-0410-82c6-800466cd88b0
This was noticed when /channel on a very large channel segfaulted.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@528 13b04d17-f746-0410-82c6-800466cd88b0
send_2comm() always sends the command on to the server, so it always requires a server connection.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@526 13b04d17-f746-0410-82c6-800466cd88b0
send_comm() just passes the command directly to the connected server, so it obviously
requires a server connection.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@525 13b04d17-f746-0410-82c6-800466cd88b0
They're pretty widely used these days, and the cost is trivial. And quite frankly,
the less #ifdefs I have to see, the better.
This covers /NICKSERV, /CHANSERV, /OPERSERV and /MEMOSERV. It also brings
in the bahamut / unreal /SILENCE server-side-ignore command, and unreal's /HELPOP.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@524 13b04d17-f746-0410-82c6-800466cd88b0
Remove unused function declaration, add SERVERREQ flag to CHANSERV command and remove IRCIIHELP
command that no server has provided in a long time, as far as I can tell.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@523 13b04d17-f746-0410-82c6-800466cd88b0
The DEFS Makefile variable has been renamed to CPPFLAGS, and is now set based on the CPPFLAGS,
INCLUDES and DEFS values provided by configure.
Reported by cpet, this allows the FreeBSD port to drop a patch.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@519 13b04d17-f746-0410-82c6-800466cd88b0
Bump copyright date, add TCL information to README-1.2, replace old COMPILE-PROBLEMS with more relevant
information and remove old 'bugs' file.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@517 13b04d17-f746-0410-82c6-800466cd88b0
Instead of setting the mode at NAMES time (when we know that the channel is new),
remember this for later by setting the GOTNEW flag in the joinlist entry. Then
check this flag when the channel is synched.
Setting the channel mode takes us out of server "grace mode", which slows down the
processing of subsequent commands and drastically reduces the number of commands we
can have outstanding before we get kicked off for flooding. This change allows us
to stay in grace mode while we're synching every channel that we joined at connect.
In turn, this makes joining lots of channels on connect faster, and much less likely
to cause us to be booted with "Excess Flood".
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@515 13b04d17-f746-0410-82c6-800466cd88b0
prepare_command() does nothing useful here, and it sets the current server to an incorrect value
if the channel sync happens while the current window is set to a window from a different server.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@514 13b04d17-f746-0410-82c6-800466cd88b0
Old behaviour was that /if (0) { echo y } would execute an empty command for the missing else
case, which winds up doing send_text("").
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@513 13b04d17-f746-0410-82c6-800466cd88b0
This fixes a bug where the cached channel log level bitmask was not correctly set unless you did a
/cset CHANNEL_LOG_LEVEL after the channel had been joined, which resulted in most things not being
logged.
It makes most sense to cache the bitmask within the cset structure, and there was even an (ununsed)
field already there for it.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@512 13b04d17-f746-0410-82c6-800466cd88b0
These were already being logged at the correct level, this just fixes the
interaction with window level and window notify_level.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@510 13b04d17-f746-0410-82c6-800466cd88b0
IRCNet uses message sources like *.se (ie masked server names) after a
netsplit.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@509 13b04d17-f746-0410-82c6-800466cd88b0
This affects the maximum length of the topic that can be displayed by the %-
status format. No topic can be longer than IRCD_BUFFER_SIZE, so use that.
Reported by oxy.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@508 13b04d17-f746-0410-82c6-800466cd88b0
Check that at least the first character of an incoming nickname is valid (we
actually go a bit beyond the RFC by also allowing any char with bit 8 set - at
least Russian servers use nicknames like this).
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@501 13b04d17-f746-0410-82c6-800466cd88b0
The logic in the massop function to exclude already-voiced users from
massvoice was faulty - it was equivalent to just !nick_isop().
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@500 13b04d17-f746-0410-82c6-800466cd88b0
Recent OpenBSD and NetBSD have changed time_t to be a 64 bit type on all
platforms. This means that on 32 bit systems, time_t is now longer than
long, and %lu can't be used to format it.
The lag check doesn't actually care what is in the first field of the PING
command, so change it to be our nick (which is arguably what it should be).
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@498 13b04d17-f746-0410-82c6-800466cd88b0
Kill commented out code that normally prevents some commands from
being quoted.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@490 13b04d17-f746-0410-82c6-800466cd88b0
This also fixes the ability to bind to key sequences ending in ^.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@476 13b04d17-f746-0410-82c6-800466cd88b0
Fixes platforms where time_t and long are different sizes.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@474 13b04d17-f746-0410-82c6-800466cd88b0
Fixes platforms where time_t and long are not the same size, like netbsd i386.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@473 13b04d17-f746-0410-82c6-800466cd88b0
This function never worked - function_timer() was creating a string but then
never throwing it away and returning a part of the argument instead, which
then caused a crash because it couldn't be freed later in the expression
parsing.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@472 13b04d17-f746-0410-82c6-800466cd88b0
An incorrect pointer was being passed to malloc_sprintf(), causing a
crash. Use m_sprintf() instead.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@471 13b04d17-f746-0410-82c6-800466cd88b0
Affected functions are alias_idle(), alias_serverlag(), alias_awaytime(),
function_serverpass(), function_checkuser() and function_isuser().
This fixes $serverpass(), which seems to have never worked right.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@470 13b04d17-f746-0410-82c6-800466cd88b0
This fixes bugs on netbsd i386, where time_t is longer than long.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@466 13b04d17-f746-0410-82c6-800466cd88b0
This fixes a series of compiler warnings on netbsd i386.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@465 13b04d17-f746-0410-82c6-800466cd88b0
Also rework function to use snprintf() instead of sprintf().
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@464 13b04d17-f746-0410-82c6-800466cd88b0
An snprintf() call that creates IRC protocol messages must use
(MAX_PROTOCOL_SIZE + 1) as 'n' rather than the buffer size.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@461 13b04d17-f746-0410-82c6-800466cd88b0
ircterm.h now includes ncurses/ncurses.h if present, which is necessary for Cygwin.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@438 13b04d17-f746-0410-82c6-800466cd88b0
This ensures portability to systems with a fixed-argument list declaration
of tparm(), like NetBSD curses.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@436 13b04d17-f746-0410-82c6-800466cd88b0
This simplifies the inclusion logic in ircterm.h, and updates term.c to include
term.h if available. This removes the declarations for setupterm(), tigetstr(),
tigetnum(), tigetflag(), tgetent(), tgetstr(), tgetnum() and tgetflag() from
term.c as those should be defined in term.h or termcap.h.
This should make the system declaration of tparm() available to term.c, which
will fix a crash on NetBSD x86-64 caused by the implicit declaration of tparm()
having a return type of 'int' while the real function has a return type of
'char *'.
We have to include term.h in term.c, not in ircterm.h because term.h defines
a large number of macros, at least two of which ('lines' and 'goto_window')
conflict with names in use in the rest of the codebase.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@435 13b04d17-f746-0410-82c6-800466cd88b0
The new logic is considerably shorter and simpler, and should mean that
terminfo is properly used in preference to termcap on NetBSD. This also
allows us to include term.h in term.c, where the system definition of
tparm() lives on some systems (NetBSD is one such).
The new logic also means we link against libtinfo in preference to
libncurses, which should mean a little less memory used at runtime and a
fraction faster startup time.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@434 13b04d17-f746-0410-82c6-800466cd88b0
The pointer passed to tgetstr() must not be reset each time around the loop.
Also some other minor cleanups in term_init().
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@428 13b04d17-f746-0410-82c6-800466cd88b0
Replace unused .format_var member of status_expandos list with .args. For
expandos which have a subformat, this stores how many arguments are passed to
sprintf() when the subformat is expanded in the callback function. The
convert_sub_format() function then uses this to limit the number of %s
conversion specifiers it creates in the converted subformat.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@426 13b04d17-f746-0410-82c6-800466cd88b0
The old code was reusing the 'window' variable, which means that it
could pick up the STATUS_NOTIFY format from the wrong window. You
would only have noticed this if you have windows with different settings
for STATUS_NOTIFY.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@425 13b04d17-f746-0410-82c6-800466cd88b0
Status formats support a %<PAD>c syntax for specifying padding. This change
ensures that we only use padding consisting of the characters "0123456789.",
which ensures it won't confuse sprintf.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@424 13b04d17-f746-0410-82c6-800466cd88b0
We can also rearrange things to remove the need for the add_ext variable,
hopefully also making the logic a bit more clear.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@423 13b04d17-f746-0410-82c6-800466cd88b0
variable name across functions. Use strlcat rather than strmcat.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@409 13b04d17-f746-0410-82c6-800466cd88b0
BIG_BUFFER_SIZE. Even with many flags enabled the output string shouldn't
be larger than 512 bytes. Use strlcat rather than strmcat.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@407 13b04d17-f746-0410-82c6-800466cd88b0
Previously it would carefully construct a string, then do nothing with it.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@392 13b04d17-f746-0410-82c6-800466cd88b0
that don't provide the POSIX setenv().
This fixes building plugins that link to compat.c on OS X (shared libraries on
OS X don't have direct access to environ). It also reduces the binary size on
platforms which provide setenv(), which these days is most of them.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@382 13b04d17-f746-0410-82c6-800466cd88b0
known and the destination length is known to be sufficient.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@376 13b04d17-f746-0410-82c6-800466cd88b0
whether a context is empty, since the result is the same.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@365 13b04d17-f746-0410-82c6-800466cd88b0
scripting function - this allows alternate hashing methods to be selected
if supported by the C library.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@361 13b04d17-f746-0410-82c6-800466cd88b0
This is a backwards-compatible change, no update to the scr-bx binary
is necessary.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@358 13b04d17-f746-0410-82c6-800466cd88b0
client purposes. The RANDOM_SOURCE setting now only affects the $rand()
scripting function.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@357 13b04d17-f746-0410-82c6-800466cd88b0
The code was calling random_number(65535 - 1024), but a non-zero argument
to random_number() is actually a seed to reseed the generator, and causes
random_number() to return zero.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@331 13b04d17-f746-0410-82c6-800466cd88b0
of an array was tested (always not-NULL) and one unused variable (first_time
in io()).
The user-visible change here is that the emergency exit QUIT messages
(eg "User abort with 5 Ctrl-C's") will be correctly relayed to the local
terminal now.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@321 13b04d17-f746-0410-82c6-800466cd88b0
instead of tmpnam(), which is dangerous. Found by Coverity.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@306 13b04d17-f746-0410-82c6-800466cd88b0
instead of tmpnam(), which is dangerous. Found by Coverity.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@304 13b04d17-f746-0410-82c6-800466cd88b0
* Restore from_server in doop() when prepare_command() fails
* Make /bans &channel work
* Make /unban #channel #number work (caf)
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@296 13b04d17-f746-0410-82c6-800466cd88b0
opened, but fail instead. Fixes using uninitialized value warnings from
Coverity.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@263 13b04d17-f746-0410-82c6-800466cd88b0
buffering lines together. This also avoids a dereference before null
check found by Coverity.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@255 13b04d17-f746-0410-82c6-800466cd88b0
sprintf() as a format string, because there could (and usually are!) '%'
characters that will be interpreted by sprintf.
This also allows clean compilation under -Werror=format-security.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@246 13b04d17-f746-0410-82c6-800466cd88b0
description line doesn't contain a space. Found by Coverity.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@244 13b04d17-f746-0410-82c6-800466cd88b0
The -R flag to cpio isn't portable, so replace it with an open-coded
shell loop.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@236 13b04d17-f746-0410-82c6-800466cd88b0
This is a longstanding bug - it's also present in EPIC4 and EPIC5 so it's
probably been in BitchX since the beginning. The bug has been latent until
the AUTHENTICATE and CAP commands were added, which perturbed the binary
search so that the client didn't see invite messages properly.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@235 13b04d17-f746-0410-82c6-800466cd88b0
(ERR_RESTRICTED), to set user mode +r - however this does not appear to
be necessary anymore. It was also buggy for several reasons: due to
a change in set_server_flag() this has actually been setting mode +G; and
484 is ERR_ISCHANSERVICE on other ircds.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@233 13b04d17-f746-0410-82c6-800466cd88b0
x = RESIZE(x, type, size);
which should just be:
RESIZE(x, type, size);
The erroneous use is undefined behaviour according to the C standard, and
causes new versions of gcc (and, apparently, clang) to throw a warning.
Reported by nenolod/moogle.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@227 13b04d17-f746-0410-82c6-800466cd88b0
means it's not made executable.
Patch from Jeff Horelick <jdhore@gentoo.org>.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@222 13b04d17-f746-0410-82c6-800466cd88b0
debugging to have the symbols.
Patch from Jeff Horelick <jdhore@gentoo.org>.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@220 13b04d17-f746-0410-82c6-800466cd88b0
recent Cygwin (including windows.h after the macros defined in modval.h
causes the build to fail due to our 'load' macro). Reported by VICODAN.
Also define WIN32_LEAN_AND_MEAN in misc.c, which should speed up Cygwin
build times a little.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@219 13b04d17-f746-0410-82c6-800466cd88b0
instead of FreeBSD-1*, which fixes building with plugins on FreeBSD-10. Also
a similar fix for the FreeBSD-2.* case.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@217 13b04d17-f746-0410-82c6-800466cd88b0
This includes all of the underlying support, but doesn't hook it up to the
/SERVER command yet, so it's not useable at this point.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@216 13b04d17-f746-0410-82c6-800466cd88b0
This doesn't tend to affect what window they go to, since for channels
there's always a target window based on the channel. But it does
affect logging.
This was fixed in EPIC4 back in 2001.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@214 13b04d17-f746-0410-82c6-800466cd88b0
case-insensitive filesystems like NTFS or HFS+, where it clashes with
the BitchX binary.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@204 13b04d17-f746-0410-82c6-800466cd88b0
This means that we shouldn't try to connect using IPv6 if the local machine
doesn't have an IPv6 address itself.
This also simplifies the IPv6 code in BX_connect_by_number() a bit.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@203 13b04d17-f746-0410-82c6-800466cd88b0
res_init() if /etc/resolv.conf doesn't exist, which is usual.
Add code to handle this by calling GetNetworkParams().
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@198 13b04d17-f746-0410-82c6-800466cd88b0
and switch to using BIND4 macros (GETSHORT / GETLONG).
Should fix /nslookup on OpenBSD.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@196 13b04d17-f746-0410-82c6-800466cd88b0
get confdefs.h included in the test.
This should fix the resolver linking issue on OS X.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@195 13b04d17-f746-0410-82c6-800466cd88b0
Now uses AC_LINK_IFELSE() to link a program that calls res_mkquery(),
after defining BIND_8_COMPAT / BIND_4_COMPAT as per misc.c.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@193 13b04d17-f746-0410-82c6-800466cd88b0
that parses AF_UNIX addresses in getaddrinfo() or something.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@189 13b04d17-f746-0410-82c6-800466cd88b0
and res happened to be NULL).
Also add missing freeaddrinfo() call.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@188 13b04d17-f746-0410-82c6-800466cd88b0
to the existing BIND_8_COMPAT fix for OSX.
Oh how I hate the /nslookup function.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@187 13b04d17-f746-0410-82c6-800466cd88b0
Required for plugins to work on x86-64.
Thanks to snadge for this patch.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@183 13b04d17-f746-0410-82c6-800466cd88b0
IPv6 enabled. This fixes an issue reported by packet, where IPv4 conections
don't work on FreeBSD when the client is built with IPv6 support and you
have a local hostname set (with /hostname, -H or IRCHOST).
Also ensure we clear the full size of the 'server' address structure - doesn't
fix a known problem but is a defensive measure.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@181 13b04d17-f746-0410-82c6-800466cd88b0
This fixes making IPv4 connections on BSD when the client is compiled with
IPv6 enabled.
Thanks to brabes on sourceforge and snadge@freenode for originally tracking
this down.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@176 13b04d17-f746-0410-82c6-800466cd88b0
is available.
In the long-run sig.inc should be built by a Makefile target.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@169 13b04d17-f746-0410-82c6-800466cd88b0
(fixes a nasty configure spew on FreeBSD, reported by flashback).
Add check for sys/socket.h, replace unused checks for netinet/in_systm.h and
sys/in_system.h with a check for netinet/in.h. Remove unused check for
sys/syslimits.h.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@168 13b04d17-f746-0410-82c6-800466cd88b0
makes packaging the client for .deb and .rpm easier.
Reported separately by nyet and VICODAN.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@164 13b04d17-f746-0410-82c6-800466cd88b0
IPv4 even on an IPv6-enabled client. This fixes /detach and wserv when
compiling with --enable-ipv6.
This does also mean that the internal identd, if used, won't listen on IPv6
either. This isn't a problem yet, since the internal identd is used only on
WINNT and we don't support IPv6 there yet.
This will also need tweaking to support initiating DCC-over-IPv6.
Thanks to snadge and packet for working on this bug.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@162 13b04d17-f746-0410-82c6-800466cd88b0
(Applies FreeBSD 9 build fix from rev 152 to configure). May also fix
strlcpy() detection with icc.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@154 13b04d17-f746-0410-82c6-800466cd88b0
aclocal.m4 with the fix. This improves upon the original fix in revision 78,
and should actually fix the problem this time.
Reported by cpet and VICODAN.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@152 13b04d17-f746-0410-82c6-800466cd88b0
huge amount of work on each keystroke if you have a long server list and
start it up disconnected (-N).
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@150 13b04d17-f746-0410-82c6-800466cd88b0
connect_by_number(). Make function static since it is only used in one
source file.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@145 13b04d17-f746-0410-82c6-800466cd88b0
hybrid yet because it uses numeric 275, which clashes with unreal's RPL_STATSDLINE.
RIP dmr.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@144 13b04d17-f746-0410-82c6-800466cd88b0
Clean up e_topic(), splitting out untopic() and using prepare_command()
to check for ops.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@136 13b04d17-f746-0410-82c6-800466cd88b0
never worked properly. Search LOAD_PATH for the SCRIPT_HELP file.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@128 13b04d17-f746-0410-82c6-800466cd88b0
Use correct define for PUBLIC_ACCESS.
Some cleanups - separate out help index freeing, change get_help_topic() to return
void.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@127 13b04d17-f746-0410-82c6-800466cd88b0
terminate the lists, that the code in get_help_topic() expects to be there -
fixes a potential crash in /bhelp.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@123 13b04d17-f746-0410-82c6-800466cd88b0
foreground color code - this ensures that if a wild color code makes it this
far, it doesn't crash the client.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@121 13b04d17-f746-0410-82c6-800466cd88b0
and the target aren't the same (reported by gauze). This doesn't happen
on standard servers, but is used by services on some networks.
Adds /FSET USERMODE_OTHER.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@114 13b04d17-f746-0410-82c6-800466cd88b0
on a socket.
I also added a wrapper function around strerror() for dgets_errno, since
we did the same thing in a few places. This all needs to be cleaned up
a little - the -1 value we use could in theory clash with an actual
errno error number.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@104 13b04d17-f746-0410-82c6-800466cd88b0
This is numeric 716. Hybrid shows it in WHOIS, and both show it when you
try to PRIVMSG someone who is +g (similar to AWAY). So I've formatted it
to match the WHOIS block.
I also took the chance to fix up the ordering of the fsets, and remove
a bunch of redundant setting of default values.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@103 13b04d17-f746-0410-82c6-800466cd88b0
$(SHLIB_CFLAGS) is required on the compile line, not just the link line.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@99 13b04d17-f746-0410-82c6-800466cd88b0
using an /fset.
/CLONES now uses the same formats as the /U command. Also tweaked those
formats at the same time.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@98 13b04d17-f746-0410-82c6-800466cd88b0
Every other UNIX in existence defines BIND_4_COMPAT in arpa/nameser.h, which
ensures that nameser_compat.h gets included. Mac OS X changed it to
BIND_8_COMPAT and stopped including it by default.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@97 13b04d17-f746-0410-82c6-800466cd88b0
clearing last_away_msg when the 311 whois reply numeric is recieved.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@95 13b04d17-f746-0410-82c6-800466cd88b0
recieved; last_ctcp_reply is the last reply recieved (used by /RELCR etc.)
All of the /WI* commands now do a /WII style full whois request.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@88 13b04d17-f746-0410-82c6-800466cd88b0
per-server, and apply new version of do_oops from flewid (the BX2 version).
This means that /oops, "/query .", "/query ,", "/msg ." and "/msg ," are now
per-server, along with the $. $, and $B aliases.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@87 13b04d17-f746-0410-82c6-800466cd88b0
(*why* is the return value of inet_ntop() const char *? it just returns a
pointer to the user-supplied char * parameter!)
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@86 13b04d17-f746-0410-82c6-800466cd88b0
When a user in one of the whowas lists rejoins, their entry is removed from
the whowas list (and added to a channel nicklist). However the count of
entries in the whowas list wasn't being decremented, so eventually the client
thinks the lists are full when they're really empty... at this point only one
user at a time can be in the lists (so /WHOLEFT after a netsplit would only
show one user).
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@77 13b04d17-f746-0410-82c6-800466cd88b0
channel) are correctly rounded. Added a divide_rounded() function
that rounds to nearest integer. This also gets rid of the messy
floating point divisions in that function.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@73 13b04d17-f746-0410-82c6-800466cd88b0
get_server_name(from_server) instead of get_server_itsname(from_server) -
this meant that if the client had a different idea of the local server name
from the server (say, if you used a round-robin to connect), then the client
would incorrectly assume the numeric came from a remote server.
The symptoms were:
* If your local server sent you a "you're not op" type message, BitchX would
report the channel had desynched.
* If your local server send you a "channel doesn't exist" numeric (eg. if
you typed /mode #nosuchchannel to see if it existed), BitchX would not show
it.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@71 13b04d17-f746-0410-82c6-800466cd88b0
you gave it, it would return the first server in the list
where server.itsname == server.name, due to a misplaced
variable. It also returned an empty string for
$servernum( ) when it should return the current server.
Also removed the useless function_serverport() function -
it was a character-for-character duplicate of
function_servports().
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@70 13b04d17-f746-0410-82c6-800466cd88b0
that isn't in a channel with the client (god knows how *that* happens, but
someone reported the bug...) could crash the client, because a NULL pointer
is passed to logmsg(). The bug didn't show under glibc because it handles
the NULL pointer OK.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@58 13b04d17-f746-0410-82c6-800466cd88b0
(bad password) that the client wasn't expecting.
The most common case is failing a CHALLENGE oper attempt.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@55 13b04d17-f746-0410-82c6-800466cd88b0
doop() and dodeop() - they could do with a bit more though.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@53 13b04d17-f746-0410-82c6-800466cd88b0
chanop first, then halops, voices and others). Added /SCAN -stat
to sort nicks using NICKSORT_OP. Removed NICKSORT_VOICE - it was broken
anyway.
Removed "scan" plugin, this functionality is now covered by /SCAN -stat.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@52 13b04d17-f746-0410-82c6-800466cd88b0
Also change the meaning of %= in the status line so that the voice
symbol is shown whether or not the user is opped.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@50 13b04d17-f746-0410-82c6-800466cd88b0
count as well as filtered nick count to the header and footer formats -
default header formats updated to show it.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@48 13b04d17-f746-0410-82c6-800466cd88b0
The formatting of /NAMES and /SCAN output has been substantially reworked.
The old /FSETs NAMES_BOTCOLOR, NAMES_FRIENDCOLOR, NAMES_NICKCOLOR,
NAMES_OPCOLOR, NAMES_SHITCOLOR and NAMES_VOICECOLOR have been replaced
with these new /FSETs:
....................NAMES_NICK %B$[10]0
................NAMES_NICK_BOT %G$[10]0
.............NAMES_NICK_FRIEND %Y$[10]0
.................NAMES_NICK_ME %W$[10]0
...............NAMES_NICK_SHIT %R$[10]0
....................NAMES_USER %K[ %n$1-%K]
.............NAMES_USER_CHANOP %K[%C$0%n$1-%K]
..............NAMES_USER_IRCOP %K[%R$0%n$1-%K]
..............NAMES_USER_VOICE %K[%M$0%n$1-%K]
The NAMES_NICK formats control how the nick itself is displayed, depending
on the status of the nick as recognised by BitchX (the priority order is
NAMES_NICK_ME > NAMES_NICK_BOT > NAMES_NICK_FRIEND > NAMES_NICK_SHIT >
NAMES_NICK). The NAMES_USER formats control how the overall entry appears in
the /NAMES or /SCAN line, depending on the channel status of the nick (the
priority order is NAMES_USER_CHANOP > NAMES_USER_VOICE > NAMES_USER_IRCOP >
NAMES_USER).
You'll need to update any scripts or custom formats that altered the old
formats. If you just use the defaults, the main difference you'll see is
that your own nick is now shown in white, and voiced users are shown with
the '+' sent by the server instead of the 'v'. You can go back to the old
look by setting these formats:
/FSET NAMES_NICK_ME %B$[10]0
/FSET NAMES_USER_VOICE %K[%Mv%n$1-%K]
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@46 13b04d17-f746-0410-82c6-800466cd88b0
works, and a few other changes. Some things might look a bit hinky,
more work needed.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@44 13b04d17-f746-0410-82c6-800466cd88b0
This is the convert_output_format_raw changes that fix CVE-2007-4584.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@37 13b04d17-f746-0410-82c6-800466cd88b0
like x86-64, where sizeof(int) != sizeof (void *). This involves correctly
casting every function pointer from the global table to the correct
function type, which has the added benefit of allowing type-checking of
function arguments and return values.
git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@26 13b04d17-f746-0410-82c6-800466cd88b0
add_module_proc(COMMAND_PROC,name,"asignon","asignon",0,0,asignon,"logs into aol instant messanger");
add_module_proc(COMMAND_PROC,name,"asignoff","asignoff",0,0,asignoff,"logs off of aol instant messanger");
add_module_proc(COMMAND_PROC,name,"abl","abl",0,0,abl,"<command> <args...> Modify your buddy list\n/abl show -- Shows buddy list\n/abl add [group] <buddy> -- Adds buddy to group in buddy list\n/abl del <buddy> Removes buddy from buddy llist\n/abl addg <group> Create group group\n/abl delg <group> <newgroup|1> delete group group");
add_module_proc(COMMAND_PROC,name,"apd","apd",0,0,apd,"<command> <args...> Modify your permit/deny lists\n/apd show -- Shows your permit & deny list\n/apd mode <permitall|denyall|permitsome|denysome> -- change your mode\n/apd addp <sn> -- Adds sn to your permit list\n/apd delp <sn> -- Removes sn from your permit list\n/apd addd <sn> -- Adds <sn> to your deny list\n/apd deld <sn> -- Removes sn from your deny list");
add_module_proc(COMMAND_PROC,name,"adir","adir",0,0,adir,"<command> <args...> Use the user directory\n/adir get <sn> Get sn's dir info\n/adir search -- Not implemented yet\n/adir set <first name> <middle name> <last name> <maiden name> <city> <state> <country> <email> <allow web searches? 1|0>");
add_module_proc(COMMAND_PROC,name,"ajoin","ajoin",0,0,achat,"<buddy chat> join buddy chat (first searches invite list, if its in it then joins that one, otherwise creats anew)");
add_module_proc(COMMAND_PROC,name,"achats","achats",0,0,achat,"display buddy chats you are on");
add_module_proc(COMMAND_PROC,name,"ainvite","ainvite",0,0,achat,"<screen name> <buddy chat> <msg> invite user to buddy chat with msg");
add_module_proc(COMMAND_PROC,name,"ainfo","ainfo",0,0,ainfo,"<command> <args>\n/ainfo set <your info...> Sets your info\n/ainfo get <screen name> Retreives sn's info");
statusprintf("%s is already in your permit list!");
return;
}
if(permdeny!=PERMIT_PERMITSOME)
statusprintf("Note: although %s will be added to your permit list, no tangible change will occur because you are in the improper mode (see help on apermdeny)",buddy);
statusprintf("Added %s to your permit list",buddy);
}elseif(!strcasecmp(cmd,"delp")){
char*buddy;
buddy=new_next_arg(loc,&loc);
REQUIRED_ARG(buddy,command,helparg);
if(remove_permit(buddy)<0)
statusprintf("%s is not in your permit list!",buddy);
else
statusprintf("Remvoed %s from your permit list",buddy);
}elseif(!strcasecmp(cmd,"addd")){
char*buddy;
buddy=new_next_arg(loc,&loc);
REQUIRED_ARG(buddy,command,helparg);
if(add_deny(buddy)<0){
statusprintf("%s is already in your deny list!");
return;
}
if(permdeny!=PERMIT_DENYSOME)
statusprintf("Note: although %s will be added to your deny list, no tangible change will occur because you are in the improper mode (see help on apermdeny)",buddy);
statusprintf("Added %s to your deny list",buddy);
}elseif(!strcasecmp(cmd,"deld")){
char*buddy;
buddy=new_next_arg(loc,&loc);
REQUIRED_ARG(buddy,command,helparg);
if(remove_deny(buddy)<0)
statusprintf("%s is not in your deny list!",buddy);
else
statusprintf("Remvoed %s from your deny list",buddy);
snprintf(buf,sizeof(buf),"Incorrect nickname or password.");
break;
case981:
snprintf(buf,sizeof(buf),"The service is temporarily unavailable.");
break;
case982:
snprintf(buf,sizeof(buf),"Your warning level is currently too high to log in.");
break;
case983:
snprintf(buf,sizeof(buf),"You have been connecting and disconnecting too frequently. Wait ten minutes and try again. If you continue to try, you will need to wait even longer.");
break;
case989:
snprintf(buf,sizeof(buf),"An unknown signon error has occurred: %s.",w);
break;
default:
snprintf(buf,sizeof(buf),"An unknown error, %d, has occured. Info: %s",no,w);
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.