Skip to content

Commit

Permalink
Bug fix to do with AnonTLS and SDK >= 23 as well as better messaging
Browse files Browse the repository at this point in the history
in case the server only supports AnonTLS and the user's device is SDK >=23.
  • Loading branch information
iiordanov committed Nov 21, 2015
1 parent b11731e commit 06cd034
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 4 deletions.
2 changes: 2 additions & 0 deletions eclipse_projects/bVNC/res/values-ru/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -117,10 +117,12 @@
<string name="error_vnc_authentication">Авторизация VNC не удалась. Проверьте пароль VNC (и имя пользователя, если оно используется).</string>
<string name="error_out_of_memory">Недостаточно памяти для отображения удаленного экрана. Попробуйте перезапустить приложение или перезагрузить устройство. Вы также можете уменьшить размер удаленного рабочего стола в настройках приложения.</string>
<string name="error_ovirt_unable_to_connect">Не удалось подключиться или авторизоваться. Пожалуйста, проверьте адрес сервера, имя пользователя, пароль, сертификат и объект.</string>
<string name="error_pick_correct_item">Пожалуйста, убедитесь, что вы выбрали правильный тип соединения.</string>
<string name="error_spice_unable_to_connect">Не удалось подключиться или авторизоваться. Пожалуйста, проверьте адрес сервера, имя пользователя, пароль, сертификат и объект.</string>
<string name="error_rdp_unable_to_connect">Не удалось подключиться к RDP-серверу или авторизоваться. Пожалуйста, убедитесь, что параметры RDP-сервера, имя пользователя или пароль указаны верно, сервер включен и находится в пределах досягаемости сети, и на нем разрешено подключение через RDP.</string>
<string name="error_rdp_connection_failed">Не удалось подключиться к RDP-серверу. Подключение к сети было прервано, сервер RDP был выключен или отключен от сети, или сессия была прервана.</string>
<string name="error_rdp_authentication_failed">Ошибка авторизации RDP. Пожалуйста, проверьте имя пользователя и пароль RDP, после чего повторите подключение.</string>
<string name="error_security_type">Сервер не предлагают поддерживаемый тип безопасности.</string>
<string name="error_ssh_unable_to_connect">Не удалось подключиться к SSH-серверу. Пожалуйста, проверьте подключение к сети, а также адрес и порт SSH-сервера.</string>
<string name="error_ssh_hostkey_changed">ОШИБКА! Ключ безопасности сервера был изменен. Если вам известно о изменение ключей, пожалуйста, удалите и создайте заново подключение. Если нет, то возможно, что это атака типа \"Man in the middle\", не продолжайте подключение. Доступные способы: </string>
<string name="error_ssh_kbd_auth_method_unavail">SSH-сервер не поддерживает способ авторизации \"Password\" и \"Keyboard-interactive\", или сначала надо использовать способ \"publickey\". Пожалуйста, настройте его так, чтобы поддерживался минимум 1 из 2 методов, или измените настройки bVNC. Доступные способы: </string>
Expand Down
2 changes: 2 additions & 0 deletions eclipse_projects/bVNC/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -117,10 +117,12 @@
<string name="error_vnc_authentication">VNC authentication failed! Check VNC password (and user if applicable).</string>
<string name="error_out_of_memory">Unable to allocate sufficient memory to draw remote screen. Try restarting the application, then restart your device. You can also try reducing the size of the remote desktop through the app settings.</string>
<string name="error_ovirt_unable_to_connect">Unable to connect or authenticate, please check server address, user, password, and cert authority and subject.</string>
<string name="error_pick_correct_item">Please ensure you have picked the right item in Connection Type.</string>
<string name="error_spice_unable_to_connect">Unable to connect or authenticate, please check server address, password, and cert authority and subject.</string>
<string name="error_rdp_unable_to_connect">Could not connect to RDP server or authentication failed! Please ensure RDP Server setting and credentials are correct, the server is turned on, RDP is enabled, and that the server is on the same network as this device.</string>
<string name="error_rdp_connection_failed">RDP Connection failed! Either network connectivity was interrupted, the RDP server was turned off or disabled, or your session was taken over.</string>
<string name="error_rdp_authentication_failed">RDP Authentication failed! Please check the RDP username and password and try again.</string>
<string name="error_security_type">Server did not offer supported security type.</string>
<string name="error_ssh_unable_to_connect">Failed to connect to SSH Server. Please check network connectivity, and SSH Server address and port.</string>
<string name="error_ssh_hostkey_changed">ERROR! The server host key has changed. If this is intentional, please delete and recreate the connection. Otherwise, this may be a man in the middle attack. Not continuing.</string>
<string name="error_ssh_kbd_auth_method_unavail">The SSH server supports neither \"password\" nor \"keyboard-interactive\" auth methods or requires \"publickey\" method first. Please configure it to allow at least one of the two methods, or reconfigure bVNC. Available auth methods: </string>
Expand Down
28 changes: 24 additions & 4 deletions eclipse_projects/bVNC/src/com/iiordanov/bVNC/RfbProto.java
Original file line number Diff line number Diff line change
Expand Up @@ -549,6 +549,8 @@ int selectSecurityType(int bitPref, int connType) throws Exception {
android.util.Log.i(TAG, "(Re)Selecting security type.");

int secType = SecTypeInvalid;
int currentapiVersion = android.os.Build.VERSION.SDK_INT;
boolean secTypeTlsAndNewSdk = false;

// Read the list of security types.
int nSecTypes = is.readUnsignedByte();
Expand Down Expand Up @@ -591,20 +593,38 @@ int selectSecurityType(int bitPref, int connType) throws Exception {
}
} else {
if (secTypes[i] == SecTypeNone || secTypes[i] == SecTypeVncAuth ||
secTypes[i] == SecTypeVeNCrypt || secTypes[i] == SecTypeTLS) {
secTypes[i] == SecTypeVeNCrypt) {
secType = secTypes[i];
break;
}

// Only permit SecTypeTLS if we are running on pre-Marshmallow Android releases
// since Anon DH ciphers are deprecated in API >= 23
if (currentapiVersion < android.os.Build.VERSION_CODES.M && secTypes[i] == SecTypeTLS) {
secType = secTypes[i];
break;
} else if (currentapiVersion >= android.os.Build.VERSION_CODES.M && secTypes[i] == SecTypeTLS) {
secTypeTlsAndNewSdk = true;
}

if ((bitPref & 1) != 0 && secTypes[i] == SecTypeArd) {
secType = secTypes[i];
break;
}
}
}

if (secType == SecTypeInvalid) {
throw new Exception("Server did not offer supported security type. " +
"Please ensure you have picked the right item in Connection Type.");
String message;
// If the server tried to negotiate SecTypeTLS and this is an SDK >= Marshmallow, report
// the appropriate error to the user.
if (secTypeTlsAndNewSdk) {
message = canvas.getContext().getString(R.string.error_anon_dh_unsupported);
} else {
message = canvas.getContext().getString(R.string.error_security_type)
+ " " + canvas.getContext().getString(R.string.error_pick_correct_item);
}
throw new Exception(message);
} else {
os.write(secType);
}
Expand Down

0 comments on commit 06cd034

Please sign in to comment.