Commit graph

496 commits

Author SHA1 Message Date
Learath 254ff3dc6b Oversight 2018-10-08 20:56:49 +03:00
Learath 2e137e6fc7 net_addr_comp_ip -> net_addr_comp_noport 2018-10-08 19:56:51 +03:00
Learath 1073b72965 Ignore DNSBL on "empty" servers. 2018-10-08 01:59:07 +03:00
heinrich5991 a36250ba34 Use two threads for the server thread pool
This might help with long DNS timeouts.
2018-10-07 12:47:32 +02:00
Dennis Felsing a63f210a01 Fix segfault when deleting lock 2018-08-29 10:32:12 +02:00
Dennis Felsing c29a72eb70 Lock style 2018-08-27 16:36:36 +02:00
Dennis Felsing 4d634bb7fd Global lock for MySQL Connector's get_driver_instance
See note in https://dev.mysql.com/doc/connector-cpp/1.1/en/connector-cpp-examples-connecting.html

> get_mysql_driver_instance() calls get_driver_instance(), which is not
> thread-safe. Either avoid invoking these methods from within multiple
> threads at once, or surround the calls with a mutex to prevent
> simultaneous execution in multiple threads.
2018-08-27 09:42:37 +02:00
Dennis Felsing 03098af933 Fix dnsbl initialization
Don't set dnsbl state to pending when we someone connects over ipv6 and
the init will fail, leaving a null pointer in m_pDnsblLookup
2018-08-24 14:24:34 +02:00
heinrich5991 8d04e7e5e1 Share libcurl resources across requests
Use the libcurl-share interface to share DNS cache and connections
between different requests.

If compiled with OpenSSL, libcurl can only be safely used from multiple
threads for OpenSSL >= 1.1.0, but this problem is not newly introduced
by this commit: According to libcurl-thread(3):

>OpenSSL <= 1.0.2 the user must set callbacks.
>
>https://www.openssl.org/docs/man1.0.2/crypto/threads.html#DESCRIPTION
>
>https://curl.haxx.se/libcurl/c/opensslthreadlock.html
2018-07-11 20:17:21 +02:00
yangfl 81a39c229b Fix typo 2018-07-10 17:29:02 +08:00
heinrich5991 ca8fcc823c Use more secure hash function for map downloads
SHA256 was chosen because it is reasonably standard, the file names
don't explode in length (this rules out SHA512) and it is supported by
basically all versions of OpenSSL (this rules out SHA512/256 and SHA3).

The protocol is changed in a backward compatible way: The supporting
server sends the SHA256 corresponding to the map in the `MAP_DETAILS`
message prior to sending the `MAP_CHANGE` message. The client saves the
SHA256 obtained from the `MAP_DETAILS` message until the next
`MAP_CHANGE` message.

For servers not supporting this protocol, the client falls back to
simply opening maps like in the previous scheme.

Remove the `map_version` tool, it is not being used and would have been
a little bit effort to update.

Use the OpenSSL implementation of SHA256 if it is supported, otherwise
fall back to a public domain one.

Fix #1127.
2018-06-24 17:04:50 +02:00
heinrich5991 36694d3852 Add a way to call for external moderator help
This is done by HTTP POSTing to a location specified by
`sv_modhelp_url`. We also provide a `src/modhelp/server.py` which can
use theses POSTs to forward them to Discord servers.

The POST contains a JSON object payload, with the keys `"port"` which
contains the server port, `"player_id"` which contains the calling
player's client ID, `"player_name"` which contains the calling player's
nick and `"message"` which is the user-specified message.

Make JSON-escaping function public, add tests and fix bugs uncovered by
these tests.

Supersedes #1129.
2018-06-19 23:27:35 +02:00
heinrich5991 9454dfbff9 Remove superfluous parameter from CServer::NewClientNoAuthCallback
The `Reset` parameter was only ever set to true, at the only call site.
2018-05-09 23:50:25 +02:00
def 3f7b18322c Set up DB by default 2018-04-24 23:07:51 +02:00
heinrich5991 f8277267a0 Remove mem_alloc and mem_free, use standard C functions instead
Replace `mem_free` by `free`, and `mem_alloc` by `malloc` or `calloc`
(the latter one being used to allocate a zeroed array of elements,
sometimes, this makes a call to `mem_zero` superfluous).

This results in having to remove `mem_stats` which previously recorded
the number of allocations and their size that the Teeworlds code did
directly.

Remove OOM handling in `src/game/client/components/binds.cpp`.

Remove needless copying in the CSV code in
`src/game/client/components/statboard.cpp`.
2018-04-09 11:56:39 +02:00
Dennis Felsing 5a53e4c54d Fix compilation 2018-04-03 10:27:19 +02:00
heinrich5991 11304661db Put name ban stuff into a separate file
Fix a bug when overlong names could be used to circumvent name bans. Add
tests for name bans.
2018-03-14 02:35:31 +01:00
heinrich5991 d7f6cf2892 Fix some system.c insanity
`str_utf8_isspace` now returns true if the passed code point renders as
a space, instead of when not.

Add `str_utf8_trim_right`, use this function and
`str_utf8_skip_whitespaces` in the server.

Add tests for the three functions
2018-03-14 02:27:15 +01:00
Learath 729a42adec More style 2018-03-13 00:13:50 +01:00
Learath b7610901e3 Handle empty reason. Fix formatting 2018-03-12 23:29:46 +01:00
Learath 22c21f73ae Actually display the reason 2018-03-12 19:09:53 +01:00
Learath c1a7c30f0f Add reason to name bans 2018-03-12 19:05:49 +01:00
heinrich5991 31a3e8d4c0 Add possibility to ban players by name
This uses the Unicode confusable data together with judging how close
two strings are by using the Levenshtein distance.

Adds the commands `name_ban`, `name_unban` and `name_bans`. Kicks
players who join using a banned name and doesn't allow ingame players to
change their names to the banned ones.
2018-03-09 20:30:27 +01:00
heinrich5991 61c7e9307d Don't log out on sv_rcon{,_mod,_helper}_password if not changed 2018-02-26 18:01:02 +01:00
heinrich5991 1c3dc8c316 Record rcon authentication stuff into teehistorian
This allows to check moderator actions after-the-fact.
2018-01-28 03:13:05 +01:00
heinrich5991 eb31a52b83 Add very basic test for Unix sockets 2017-12-20 16:56:44 +01:00
heinrich5991 1a236dbefc Send connection information to external server 2017-12-20 16:56:34 +01:00
heinrich5991 94acac91a0 Overhauled job system
The engine now takes `std::shared_ptr<IJob>`, this will ensure the
appropriate lifetime of the given parameters, it also allows for proper
destruction. Remove the now obsolete `IFetcher` interface and `CFetcher`
class.

Also adds some locks to `CUpdater`, previously it didn't have any locks
at all.
2017-11-23 15:47:38 +01:00
heinrich5991 8e778cd9ab Address pull request comments 2017-10-13 02:29:18 +02:00
heinrich5991 2fc018aac3 Add asynchronous file output, port dbg_msg()s to that system
Also add tests.
2017-10-10 04:11:14 +02:00
Learath2 d15dcd3c58 Merge pull request #871 from heinrich5991/ddnet_teehistorian
Teehistorian
2017-10-09 18:42:27 +02:00
Dennis Felsing 4fe6dc51f7 Fix non-random announcements (thanks noby) 2017-09-26 14:20:37 +02:00
heinrich5991 9761e9606a Make most user input teehistoric
Exclude private stuff like chat messages and votes.
2017-09-20 02:23:28 +02:00
heinrich5991 6ef9c8dbcd First working version of teehistorian
teehistorian records all inputs from the players as well as the player
positions in each tick. It stores this info in a highly compressible
output format (I've achived 5x compression using xz or bz2).
2017-09-20 02:16:11 +02:00
Redix 43f246f174 Made int packing functions safe 2017-09-17 02:36:50 +02:00
def 89ed22e8d8 Introduce ddnet-info.json
- Single json file containing all information for the client
- Fetched from https://info.ddnet.tw/info?name=deen
- Replaces versionsrv, news, ddnet-maps.json and ddnet-ranks.json
- Servers are sorted by most popular ones for respective player
- Always stays < 100 ms response time, compared to occasional 50 s for
  old ddnet-ranks.json
2017-09-03 17:42:04 +02:00
def 27b7549bba Make --silent stop stdout logging 2017-09-03 10:37:24 +02:00
heinrich5991 33315452c3 Merge branch 'master' into leak_fix 2017-07-31 20:42:32 +02:00
heinrich5991 1ebb4f89a6 Reopen: Add a flag for rcon login via username (#800)
This uses an extended protocol message to signal that rcon
authentication might require a username, allowing the client to enable
the username prompt.

Add a forgotten logout on key update
2017-07-24 21:43:55 +02:00
HMH bfc5700314 Yes the Kernel and Interfaces need to be deleted too... 2017-07-21 19:46:31 +02:00
def f3e3d57a90 Always close files, cleaner demo recording, fix some other stuff 2017-07-08 13:39:20 +02:00
eeeee 0497cdd49d stop casting auth state to bool 2017-06-08 13:03:44 -07:00
eeeee 9c5ade24da remove ConDnsblStatus copypasta 2017-06-07 11:04:04 +02:00
eeeee 2797227063 also remove references to CGameContext from CServer 2017-06-05 22:31:56 -07:00
eeeee 9b6699d3b8 remove casts to CServer
improving encapsulation by going through the interface instead of including engine/server/server.h
2017-06-05 20:51:12 -07:00
heinrich5991 5ae37e6c72 Add protocol extension with UUIDs
This system can easily be extended by independent authors without
collisions, something the old system with plain increasing integers did
not allow.

Do this by utilizing the previously unused message code `NETMSG_NULL`
which has a value of 0.

This works for engine and game messages, snapshot items and events.
2017-05-25 00:52:43 +02:00
def f4112e3bcb Revert "Tees must be teamed up before loading"
This reverts commit d29f2306ef.
2017-05-14 22:36:44 +02:00
Dennis Felsing 58207926ac Merge pull request #726 from Learath2/dd_pr_load
Tees must be teamed up before loading
2017-05-14 11:54:39 +02:00
Ryozuki 3a4738560b Don't show ips to non-administrators, Fixes #694 (#739)
People with non-administrator rights won't be able to see ips (mod, helper).
2017-04-17 12:13:58 +02:00
Learath d29f2306ef Tees must be teamed up before loading 2017-04-11 21:18:26 +02:00
heinrich5991 1d81d56850 Introduce new, vanilla-compatible server info protocol
This means that we have a reliable and fast way to query for extended info,
while also not wasting network bandwidth.

The protocol is designed to be extensible, there's four bytes space for
encoding more request types (currently zeroed), and there's one string in each
response packet and one string for each player available (currently the empty
string).

The protocol itself has no problems with more than 64 players, although the
current client implementation will drop the player info after the 64th player,
because it uses a static array for storage.

Also fixes #130, the player list is just sorted each time new player info
arrives.
2017-03-29 12:56:13 +02:00
necropotame b8e4e5beea Fix style in several places 2017-03-22 19:45:14 +01:00
Ryozuki 84726547aa Fix warning also for server.cpp, and fixed client.cpp 2017-03-12 14:49:18 +01:00
Ryozuki 1614e59e8f Fix some warnings 2017-03-12 12:12:39 +01:00
heinrich5991 6302e4d7e0 Fix some style issues and a > to >= 2017-03-06 20:11:23 +01:00
heinrich5991 c1e826e853 Fix key slot indices after removing a key 2017-03-06 18:02:19 +01:00
Learath2 8c79f28802 Fix a crash on malformed input 2017-03-06 15:18:52 +01:00
Learath2 71fb030443 Fix a comparison. Hate backwards compatibility... 2017-03-06 13:46:02 +01:00
Learath2 9800360340 Check the return from str_hex_decode. Remove comment 2017-03-06 12:59:47 +01:00
Learath2 c5a12e3eba Fix the status command for logged out people 2017-03-06 12:35:37 +01:00
Learath2 6f1f348715 Fix c&p fail 2017-03-06 12:35:09 +01:00
Learath2 95bb9894a7 Get rid of pw generation in CServer, Err out in CAuthManager instead 2017-03-04 23:16:02 +03:00
Learath2 3a22a4b62d Fix some issues 2017-03-04 23:06:22 +03:00
Learath2 cf9f3e3d38 Forgot one block 2017-03-04 10:58:02 +03:00
Learath2 d475eddb88 Add key ident to status command 2017-03-02 19:02:57 +03:00
Learath2 b7cbaedea0 New auth system for rcon 2017-03-02 18:16:29 +03:00
east 0acad1a28b dnsbl fix: HostLookup check result properly 2017-02-01 12:13:50 +01:00
heinrich5991 b510db9ee9 Add the VITAL flag to fastdownload packets
This lets 0.6.4 clients connect to DDNet servers again. Instead of doing
our own resend logic, just always send `sv_map_window` packets ahead and
let the Teeworlds network deal with possible resends.
2016-11-18 15:12:48 +01:00
heinrich5991 cd3b0ae855 Implement the confusable algorithm from Unicode more closely
See UTS#39 "Unicode Security Mechanisms":
http://www.unicode.org/reports/tr39/

This means that characters with accents or other things around them are
now considered the confusable with the base character.

Fixes #557. Fixes #575.
2016-10-30 13:45:55 +01:00
heinrich5991 e950351346 Put the password generation into base 2016-10-01 23:04:16 +02:00
east c6efc85a80 dnsbl_status added 2016-09-05 14:05:07 +02:00
east 678a69bf5b basic DNSBL implementation 2016-09-05 11:38:11 +02:00
def 0688229f0d Forbid names starting with /, as they can be abused to make people write chat commands 2016-07-08 16:38:05 +02:00
HMH c4843868c4 do not log the sql-passwords 2016-05-16 15:41:52 +02:00
H-M-H cd41220a44 wait for score-threads on shutdown 2016-05-04 15:32:24 +02:00
H-M-H c9e65c7931 Merge branch 'master' into sqlmasters 2016-05-03 23:07:24 +02:00
def 21ac41bfae Clean up fifo console 2016-05-02 23:36:21 +02:00
def c473689be7 Remove VITAL flag in fastdownload map packets (as suggested by heinrich5991) 2016-04-27 19:54:43 +02:00
Dennis Felsing 8e69f9ac90 Merge pull request #338 from east/mapvital
Added vital flag for mapdata (includes fast download)
2016-04-27 15:57:14 +02:00
def 91df0a2af0 Remove hacky security against rcon spoofing because we have a better one now 2016-02-22 19:54:45 +01:00
H-M-H 2bd6d0c381 do not always try to connect to unreachable sqlservers
but instead remember the last reachable server
- some cleanup
- added timeout of 10 seconds to sql-connections
2016-02-20 15:33:35 +01:00
H-M-H f6be7e20fb updated sql-command usage 2016-02-20 15:33:35 +01:00
H-M-H e35de5a371 whether to setup a db can be configured for each server now 2016-02-20 15:33:35 +01:00
H-M-H 1e302aeb70 'r' and 'w' instead of 0 and 1 for sql read/write servers 2016-02-20 15:33:35 +01:00
H-M-H 1314085928 restructured sqlconnection
reading from and writing to several different servers is now possible
TODO:
-handle Exceptions properly (try another sqlserver)
-if everything fails while writing write the insert to a file
2016-02-20 15:33:35 +01:00
H-M-H 7199ae3f22 ConAddSqlMaster will not block the main thread anymore 2016-02-20 15:33:35 +01:00
H-M-H 15f2e07c48 moved sqlserver stuff into CServer-class
as sqlconnections should not last only
until next mapreload
2016-02-20 15:33:35 +01:00
heinrich5991 a1923b154b Only ignore messages on invalid UTF-8, don't kick players 2016-01-27 01:48:19 +01:00
heinrich5991 d4eefefa26 Kick people using overlong UTF-8 sequences
This works around the bug in older clients (including vanilla) that
interpret those sequences incorrectly.
2016-01-27 01:24:02 +01:00
def b77e95090e Reset m_ServerInfoFirstRequest on map change 2016-01-22 17:53:46 +01:00
heinrich5991 96f0eddbb8 Add sv_max_server_info_per_second
This controls how many complete server info responses are sent per
second.
2016-01-22 16:42:54 +01:00
heinrich5991 b29a733c4f Add DoS protection to server info requests
Only allow 10 requests per second before falling back to smaller server
info responses.
2016-01-22 16:42:46 +01:00
def 8636e6004a Print client ID as decimal number, not hexadecimal 2016-01-20 16:33:02 +01:00
H-M-H 8e24ef8020 commanddescription can now be placed directly in
the commandparamsstring: "s[file]"
2015-12-28 16:19:52 +01:00
H-M-H 927c9d1999 forgot to adjust one usage 2015-12-23 14:51:55 +01:00
H-M-H 11a426c18b added (console-)command usage 2015-12-23 14:29:31 +01:00
H-M-H 80531130e5 made it beautiful ^^ 2015-12-18 13:17:45 +01:00
H-M-H 830726f392 prevent serverlogspam 2015-12-17 16:27:35 +01:00
H-M-H bd0c496837 FIRST trim the name and THEN compare it to others ! 2015-12-16 20:15:43 +01:00
timgame 2874e18ce0 dont restore empty config values at start 2015-11-16 20:31:56 +01:00