summaryrefslogtreecommitdiff
path: root/media-sound/murmur/files/strict_version.patch
blob: 544e9fde78db229642bedf189393f8585f63404c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
diff --git a/src/murmur/Messages.cpp b/src/murmur/Messages.cpp
index f8472fa3..97d4de2a 100644
--- a/src/murmur/Messages.cpp
+++ b/src/murmur/Messages.cpp
@@ -1492,8 +1492,14 @@ void Server::msgContextAction(ServerUser *uSource, MumbleProto::ContextAction &m
 }
 
 void Server::msgVersion(ServerUser *uSource, MumbleProto::Version &msg) {
+    bool ok = true;
 	if (msg.has_version())
 		uSource->uiVersion=msg.version();
+    else
+        ok = false;
+    if(ok)
+        if(msg.version() < 0x010300)
+            ok = false;
 	if (msg.has_release())
 		uSource->qsRelease = u8(msg.release());
 	if (msg.has_os()) {
@@ -1501,6 +1507,18 @@ void Server::msgVersion(ServerUser *uSource, MumbleProto::Version &msg) {
 		if (msg.has_os_version())
 			uSource->qsOSVersion = u8(msg.os_version());
 	}
+    if (! ok) {
+        QString reason = "worng version";
+        log(uSource, QString("Rejected connection from %1: %2")
+            .arg(addressToString(uSource->peerAddress(), uSource->peerPort()), reason));
+        MumbleProto::Reject mpr;
+        mpr.set_reason(u8(reason));
+        mpr.set_type(MumbleProto::Reject::RejectType::Reject_RejectType_WrongVersion);
+        sendMessage(uSource, mpr);
+        uSource->disconnectSocket();
+        return;
+    }
+
 
 	log(uSource, QString("Client version %1 (%2: %3)").arg(MumbleVersion::toString(uSource->uiVersion)).arg(uSource->qsOS).arg(uSource->qsRelease));
 }