diff --git a/debian/patches/2002_revert-e4b30a5cb6100a8ea4f320b829c9c5712ed4a783.patch b/debian/patches/2002_revert-e4b30a5cb6100a8ea4f320b829c9c5712ed4a783.patch new file mode 100644 index 0000000..0438054 --- /dev/null +++ b/debian/patches/2002_revert-e4b30a5cb6100a8ea4f320b829c9c5712ed4a783.patch @@ -0,0 +1,166 @@ +Description: This is a revert of upstream commit e4b30a5cb6100a8ea4f320b829c9c5712ed4a783 (breaking ABI compatibility with FreeRDP 2.2.0) +Author: Mike Gabriel + +#diff --git a/client/Mac/cli/AppDelegate.m b/client/Mac/cli/AppDelegate.m +#index b7abcde70..698695676 100644 +#--- a/client/Mac/cli/AppDelegate.m +#+++ b/client/Mac/cli/AppDelegate.m +#@@ -199,7 +199,6 @@ void mac_set_view_size(rdpContext *context, MRDPView *view); +# +# void AppDelegate_ConnectionResultEventHandler(void *ctx, ConnectionResultEventArgs *e) +# { +#- rdpContext *context = (rdpContext *)ctx; +# NSLog(@"ConnectionResult event result:%d\n", e->result); +# +# if (_singleDelegate) +#@@ -207,15 +206,11 @@ void AppDelegate_ConnectionResultEventHandler(void *ctx, ConnectionResultEventAr +# if (e->result != 0) +# { +# NSString *message = nil; +#- DWORD code = freerdp_get_last_error(context); +#- switch (code) +#+ +#+ if (connectErrorCode == AUTHENTICATIONERROR) +# { +#- case FREERDP_ERROR_AUTHENTICATION_FAILED: +#- message = [NSString +#- stringWithFormat:@"%@", @"Authentication failure, check credentials."]; +#- break; +#- default: +#- break; +#+ message = [NSString +#+ stringWithFormat:@"%@", @"Authentication failure, check credentials."]; +# } +# +# // Making sure this should be invoked on the main UI thread. +diff --git a/include/freerdp/error.h b/include/freerdp/error.h +index 0fb51608b..f9d4b6ab0 100644 +--- a/include/freerdp/error.h ++++ b/include/freerdp/error.h +@@ -177,6 +177,30 @@ extern "C" + FREERDP_API const char* freerdp_get_error_info_name(UINT32 code); + FREERDP_API const char* freerdp_get_error_info_category(UINT32 code); + ++ /** ++ * This static variable holds an error code if the return value from connect is FALSE. ++ * This variable is always set to 0 in the beginning of the connect sequence. ++ * The returned code can be used to inform the user of the detailed connect error. ++ * The value can hold one of the defined error codes below OR an error according to errno ++ */ ++ ++ FREERDP_API extern int connectErrorCode; ++ ++#define ERRORSTART 10000 ++#define PREECONNECTERROR ERRORSTART + 1 ++#define UNDEFINEDCONNECTERROR ERRORSTART + 2 ++#define POSTCONNECTERROR ERRORSTART + 3 ++#define DNSERROR ERRORSTART + 4 /* general DNS ERROR */ ++#define DNSNAMENOTFOUND ERRORSTART + 5 /* EAI_NONAME */ ++#define CONNECTERROR \ ++ ERRORSTART + 6 /* a connect error if errno is not define during tcp connect \ ++ */ ++#define MCSCONNECTINITIALERROR ERRORSTART + 7 ++#define TLSCONNECTERROR ERRORSTART + 8 ++#define AUTHENTICATIONERROR ERRORSTART + 9 ++#define INSUFFICIENTPRIVILEGESERROR ERRORSTART + 10 ++#define CANCELEDBYUSER ERRORSTART + 11 ++ + /** + * FreeRDP Context Error Codes + */ +diff --git a/libfreerdp/core/errinfo.c b/libfreerdp/core/errinfo.c +index abfe96efd..e635847dc 100644 +--- a/libfreerdp/core/errinfo.c ++++ b/libfreerdp/core/errinfo.c +@@ -34,6 +34,8 @@ + ERRINFO_##_code, "ERRINFO_" #_code, ERRINFO_##_code##_STRING, category \ + } + ++int connectErrorCode; ++ + /* Protocol-independent codes */ + + #define ERRINFO_RPC_INITIATED_DISCONNECT_STRING \ +diff --git a/libfreerdp/core/freerdp.c b/libfreerdp/core/freerdp.c +index 81183e76d..9094bc346 100644 +--- a/libfreerdp/core/freerdp.c ++++ b/libfreerdp/core/freerdp.c +@@ -55,6 +55,8 @@ + + #define TAG FREERDP_TAG("core") + ++/* connectErrorCode is 'extern' in error.h. See comment there.*/ ++ + UINT freerdp_channel_add_init_handle_data(rdpChannelHandles* handles, void* pInitHandle, + void* pUserData) + { +@@ -161,6 +163,7 @@ BOOL freerdp_connect(freerdp* instance) + + /* We always set the return code to 0 before we start the connect sequence*/ + instance->ConnectionCallbackState = CLIENT_STATE_INITIAL; ++ connectErrorCode = 0; + freerdp_set_last_error_log(instance->context, FREERDP_ERROR_SUCCESS); + clearChannelError(instance->context); + ResetEvent(instance->context->abortEvent); +@@ -890,6 +893,61 @@ void freerdp_set_last_error_ex(rdpContext* context, UINT32 lastError, const char + } + + context->LastError = lastError; ++ ++ switch (lastError) ++ { ++ case FREERDP_ERROR_PRE_CONNECT_FAILED: ++ connectErrorCode = PREECONNECTERROR; ++ break; ++ ++ case FREERDP_ERROR_CONNECT_UNDEFINED: ++ connectErrorCode = UNDEFINEDCONNECTERROR; ++ break; ++ ++ case FREERDP_ERROR_POST_CONNECT_FAILED: ++ connectErrorCode = POSTCONNECTERROR; ++ break; ++ ++ case FREERDP_ERROR_DNS_ERROR: ++ connectErrorCode = DNSERROR; ++ break; ++ ++ case FREERDP_ERROR_DNS_NAME_NOT_FOUND: ++ connectErrorCode = DNSNAMENOTFOUND; ++ break; ++ ++ case FREERDP_ERROR_CONNECT_FAILED: ++ connectErrorCode = CONNECTERROR; ++ break; ++ ++ case FREERDP_ERROR_MCS_CONNECT_INITIAL_ERROR: ++ connectErrorCode = MCSCONNECTINITIALERROR; ++ break; ++ ++ case FREERDP_ERROR_TLS_CONNECT_FAILED: ++ connectErrorCode = TLSCONNECTERROR; ++ break; ++ ++ case FREERDP_ERROR_AUTHENTICATION_FAILED: ++ connectErrorCode = AUTHENTICATIONERROR; ++ break; ++ ++ case FREERDP_ERROR_INSUFFICIENT_PRIVILEGES: ++ connectErrorCode = INSUFFICIENTPRIVILEGESERROR; ++ break; ++ ++ case FREERDP_ERROR_CONNECT_CANCELLED: ++ connectErrorCode = CANCELEDBYUSER; ++ break; ++ ++ case FREERDP_ERROR_SECURITY_NEGO_CONNECT_FAILED: ++ connectErrorCode = CONNECTERROR; ++ break; ++ ++ case FREERDP_ERROR_CONNECT_TRANSPORT_FAILED: ++ connectErrorCode = CONNECTERROR; ++ break; ++ } + } + + const char* freerdp_get_logon_error_info_type(UINT32 type) diff --git a/debian/patches/series b/debian/patches/series index 5f374ef..cb8bfe6 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -1 +1,2 @@ 2001-fake-git-revision.patch +2002_revert-e4b30a5cb6100a8ea4f320b829c9c5712ed4a783.patch