Also bump Linux compilers from (GCC 4.8, GCC 4.9, GCC 5, GCC 7,
GCC 8, Clang 3.9, Clang 4.0, Clang 5.0, Clang 6.0) to (GCC 7,
GCC 8, Clang 7, Clang 8). There's no need to test against every
ancient compiler under the sun. Furthermore, we no longer need
an apt sources list for Bionic.
[ci skip] (Tested already <https://travis-ci.org/charybdis-ircd/charybdis/builds/594225622>)
Charybdis' rewritten m_grant introduces at least one serious bug without
providing any apparent benefit. I think the best solution here is the
easiest one.
The bug in question is that an empty mode change is triggered after
seven's grant has done its work, and this is necessary in order to
give umodes granted by oper privileges a chance to update. The rewrite
removes this, generating a mode change only if it wants to change the
state of +o, which means the grant victim can keep privileged modes they
no longer have access to, or fail to gain new ones.
Move opername and privset storage to struct User, so it can exist for
remote opers.
On /oper and when bursting opers, send:
:foo OPER opername privset
which sets foo's opername and privset. The contents of the privset on
remote servers come from the remote server's config, so the potential
for confusion exists if these do not match.
If an oper's privset does not exist on a server that sees it, it will
complain, but create a placeholder privset. If the privset is created by
a rehash, this will be reflected properly.
/privs is udpated to take an optional argument, the server to query, and
is now local by default:
/privs [[nick_or_server] nick]