36 Commits

Author SHA1 Message Date
dfd840de1f Update BUILDING.md 2024-12-07 21:19:47 +02:00
d5515f43ce Update BUILDING.md 2024-12-07 21:18:17 +02:00
4a1da8d373 Convert tab indentation to spaces. This is how normal people do it. :D 2024-12-06 23:44:04 +02:00
b1b46ca08c Implement platform specific input buffer flushing 2024-12-06 21:53:39 +02:00
2bb1fafdaa Add hardening flags 2024-12-06 21:53:14 +02:00
0fb17971c0 Fix typo and remove 'Q' as quitting command 2024-12-06 20:26:42 +02:00
ec11d77e89 Update CHANGELOG.md 2024-12-06 16:32:11 +02:00
2d29741691 Fixes to Windows utf-8 support + one more Minecraft newline fix 2024-12-06 16:24:04 +02:00
cc77044df1 Add experimental utf-8 support for Windows and change the behaviour of Minecraft "stop" hack 2024-12-06 14:43:40 +02:00
dba07aacf7 Update CHANGELOG.md 2024-12-06 12:35:30 +02:00
bd76b897de Fix missing newlines in Minecraft RCON messages:
Minecraft servers have a longstanding bug that omits newlines
when sending messages via RCON. This patch manually inserts
newlines to address the issue.

Reference: https://bugs.mojang.com/browse/MC-7569

Fixes #1
2024-12-06 11:00:18 +02:00
1106f27700 Bump version to 0.8.0 2024-12-06 08:47:45 +02:00
00fc3b5bcb Set select() timeout to 5 seconds and replace putchar() loop with fputs() call 2024-12-06 08:47:45 +02:00
a0fe9e1645 Enable input/output buffering and fflush only explicitly
As suggested in old pull request: #39
2024-12-06 08:47:45 +02:00
5f460e8912 Remove Valve protocol checks and set select() timeout to 1.5 seconds
Use the same method for handling multipacket responses across all servers.
2024-12-06 08:47:45 +02:00
6fed74ba74 Implement select() loop to receive all incoming packets:
Send a "multipacket guard" - an empty packet with an invalid 'cmd' field
and a unique packet ID to trigger a reply from the server once the previous
command's reply has been fully sent.

Valve returns an empty payload, while Minecraft includes an error message in the payload.

This workaround ensures that all packets related to the last valid command
are received from the server, avoiding the need to wait for the select() timeout.
2024-12-06 08:47:45 +02:00
5d1c87b26f Don't call memcpy() if there is nothing to copy 2024-12-04 08:17:56 +02:00
fd77ad7fc0 packet_build(): add [static 1] to generate warning if NULL pointer is passed 2024-12-03 05:40:45 +02:00
bc5617407d Update CHANGELOG.md 2024-12-02 10:40:51 +02:00
5ae06f4d37 Update man page 2024-12-02 10:35:00 +02:00
233031cdcb Update README.md 2024-12-02 10:31:38 +02:00
ebf5172cd0 Update BUILDING.md 2024-12-02 10:13:38 +02:00
0b72e4d17d Update README.md 2024-12-02 09:56:06 +02:00
af70f87bc1 Update README.md 2024-12-02 09:52:30 +02:00
53fd703911 Rename INSTALL.md to BUILDING.md 2024-12-02 09:42:44 +02:00
c0d28bcb17 Rename INSTALL.md to BUILDING.md 2024-12-02 09:42:11 +02:00
edf8344983 Add "-Wno-gnu-zero-variadic-macro-arguments" flag to suppress Clang warnings about GNU macro extensions 2024-12-02 09:37:08 +02:00
a502204e26 Remove unused headers 2024-12-02 09:34:48 +02:00
7162bc6fe6 - add log_error macro
- rename "flag_connection_alive" variable back to "global_connection_alive"
- return exit code from run_terminal_mode()
- rcon_command(): add error messages
2024-12-02 08:55:18 +02:00
f270a485b5 Remove url from version string 2024-12-02 07:40:34 +02:00
df66816bee Change prefix of flag variables from 'global' to 'flag' 2024-12-02 07:37:12 +02:00
5c7ab407d7 Patch of various fixes, cleanups and unused code removals:
- add MAX_COMMAND_LENGTH to define maximum command length
 - print auth failed message to stderr instead of stdout
 - remove unused net_send() function
 - remove unused net_clean_incoming() function
 - rewrite net_send_packet() function
 - net_recv_packet(): change the type of variable "ret" from int to ssize_t
 - net_recv_packet(): fail immediately if the packet size is out of spec
 - packet_print(): rename variable "def_color" to "default_color"
 - packet_print(): remove unecessary casts
 - packet_build(): use MAX_COMMAND_LENGTH
 - packet_build(): be more explicit in calculation of packet.size
 - packet_build(): use memcpy() instead of strncpy()
 - cast second argument of send()/recv() calls to (char *) so Windows is happy
 - rcon_auth(): change the return type from int to bool
 - run_terminal_mode(): use MAX_COMMAND_LENGTH
2024-12-02 07:32:07 +02:00
c83d96cc91 Add "$(EXENAME).exe" to clean rule so Windows executables are also cleaned up 2024-12-02 06:14:34 +02:00
427fd206ca Oops, uncomment struct field 2024-11-11 23:49:18 +02:00
1a4010cbba Change MAX_PACKET_SIZE and DATA_BUFFSIZE, add notes about packet structure 2024-11-11 22:22:45 +02:00
4488127350 Use fixed width integer types in rcon packet structure 2024-11-10 16:25:19 +02:00
7 changed files with 664 additions and 541 deletions

34
BUILDING.md Normal file
View File

@ -0,0 +1,34 @@
Building and installing
-----------------------
### Prerequisites
- GCC compatible compiler
- make
- POSIX.1 support
* getopt()
* strcasecmp()
* tcflush()
---
### Compiling
cc -std=gnu99 -Wpedantic -Wall -Wextra -Wno-gnu-zero-variadic-macro-arguments -O2 -o mcrcon mcrcon.c
>[!NOTE]
>If you are compiling on Windows remember to link with winsock by adding `-lws2_32` to your compiler command line.
---
Or you can run **make**
make - compiles mcrcon
make install - installs compiled binaries and manpage to the system
make uninstall - removes binaries and manpage from the system
file install locations:
/usr/local/bin/mcrcon
/usr/local/share/man/man1/mcrcon.1
Makefile **install** and **uninstall** rules are not available on Windows.

View File

@ -1,13 +1,21 @@
#### Version history:
###### 0.7.3
- Add support to Valve style rcon authentication
###### 0.8.0
- Implement support for multipacket responses
- Add support for Valve style rcon authentication
- Add experimental UTF-8 support for Windows
- Change maximum packet size to correct value (4096 -> 4106)
- Attempt to add missing newlines in bugged Minecraft servers
* Implemented for responses to the 'help' command and unknown commands
- Print auth failed message to stderr instead of stdout
- Fail immediately if received packet size is out of spec
- Return proper exit code from run_terminal_mode()
- Add error messages to rcon_command() function
###### 0.7.2
- Quit gracefully when Ctrl-D or Ctrl+C is pressed
- Remove "exit" and "quit" as quitting commands
* these are actual rcon commands on some servers
* These are actual rcon commands on some servers
- Suppress compiler warning (strncpy)
- Fix erroneous string length in packet building function
- Fix typo in ANSI escape sequence for LCYAN

View File

@ -1,22 +0,0 @@
Building and installing
-----------------------
Only dependency is C library and POSIX getopt support.
Compiling with GCC or CLANG:
cc -std=gnu99 -Wpedantic -Wall -Wextra -O2 -o mcrcon mcrcon.c
Note: on Windows remember to link with winsock by adding `-lws2_32` to your compiler command line.
Or you can just run "**make**":
make - compiles mcrcon
make install - installs compiled binaries and manpage to the system
make uninstall - removes binaries and manpage from the system
file install locations:
/usr/local/bin/mcrcon
/usr/local/share/man/man1/mcrcon.1
Makefile "**install**" and "**uninstall**" rules are disabled on windows.

View File

@ -13,9 +13,9 @@ INSTALL = install
LINKER =
RM = rm -v -f
CC = gcc
CFLAGS = -std=gnu99 -Wall -Wextra -Wpedantic -O2
EXTRAFLAGS ?= -fstack-protector-all
CC ?= gcc
CFLAGS = -std=gnu99 -Wall -Wextra -Wpedantic -Wno-gnu-zero-variadic-macro-arguments -O2
EXTRAFLAGS ?= -fstack-protector-strong -D_FORTIFY_SOURCE=2 -fPIE -pie -Wl,-z,relro -Wl,-z,now -fno-common
ifeq ($(OS), Windows_NT)
LINKER = -lws2_32
@ -44,4 +44,4 @@ endif
.PHONY: clean
clean:
$(RM) $(EXENAME)
$(RM) $(EXENAME) $(EXENAME).exe

View File

@ -1,6 +1,9 @@
# mcrcon
mcrcon is console based Minecraft [rcon](https://developer.valvesoftware.com/wiki/Source_RCON_Protocol) client for remote administration and server maintenance scripts.
mcrcon is a command-line [rcon](https://developer.valvesoftware.com/wiki/Source_RCON_Protocol) client intended for remote server administration and maintenance automation.
Though originally developed for Minecraft servers, it also works with a variety of other servers using the Valve or Minecraft-style rcon protocol.
---
@ -29,7 +32,7 @@ make
# install is optional
sudo make install
```
Check [INSTALL.md](INSTALL.md) for more details.
_Check [BUILDING.md](BUILDING.md) for more details._
---
@ -68,17 +71,15 @@ Send three commands ("say", "save-all", "stop") and wait five seconds between th
```sh
mcrcon -H my.minecraft.server -p password -w 5 "say Server is restarting!" save-all stop
```
---
##### How to enable rcon on a Minecraft Server
Enable rcon by adding following lines to [```server.properties```](https://minecraft.gamepedia.com/Server.properties) configuration file.
```
enable-rcon=true
rcon.port=25575
rcon.password=your_rcon_pasword
```
> [!TIP]
>Enable RCON on Minecraft server by adding following lines to [```server.properties```](https://minecraft.gamepedia.com/Server.properties) configuration file.
>```
>enable-rcon=true
>rcon.port=25575
>rcon.password=your_rcon_pasword
>```
---
@ -88,16 +89,17 @@ rcon.password=your_rcon_pasword
* MAIL: tiiffi+mcrcon at gmail
* ISSUES: https://github.com/Tiiffi/mcrcon/issues/
When reporting issues, please provide the following information:
- Version of mcrcon: Please specify the precise version number
- Game: Indicate the specific game server you're using (e.g., Minecraft, Valve Source Engine game, ARK, ...)
- Server version: Provide the exact version of the game server
- Mods and Extensions: List all mods and extensions used, including their versions
- Issue Description: Clearly describe the problem you're encountering and the expected behavior.
- Steps to reproduce
If you're tech-savvy, consider providing a packet capture file (PCAP). Remember to use a fake password.
> [!TIP]
>When reporting issues, please provide the following information:
>
>- Version of mcrcon: Please specify the precise version number
>- Game: Indicate the specific game server you're using (e.g., Minecraft, Valve Source Engine game, ARK, ...)
>- Server version: Provide the exact version of the game server
>- Mods and Extensions: List all mods and extensions used, including their versions
>- Issue Description: Clearly describe the problem you're encountering and the expected behavior.
>- Steps to reproduce
>
>If you're tech-savvy, consider providing a packet capture file (PCAP). Remember to use a fake password.
---

View File

@ -1,7 +1,7 @@
.\" Process this file with
.\" groff -man -Tascii mcrcon.1
.\"
.TH MCRCON 1 "November 2024" "Version 0.7.3"
.TH MCRCON 1 "December 2024" "Version 0.8.0"
.SH NAME
mcrcon \- send rcon commands to a Minecraft server
.SH SYNOPSIS
@ -11,7 +11,7 @@ options
commands
.B ]
.SH DESCRIPTION
mcrcon is Minecraft rcon client for remote administration and server maintenance scripts.
mcrcon is a command-line rcon client intended for remote server administration and maintenance automation.
.SH OPTIONS
.IP -H
Server address (default: localhost)

1077
mcrcon.c

File diff suppressed because it is too large Load Diff