]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
libcli:util: Add gnutls_error_to_werror()
authorAndreas Schneider <asn@samba.org>
Mon, 24 Jun 2019 11:14:12 +0000 (13:14 +0200)
committerAndreas Schneider <asn@cryptomilk.org>
Thu, 27 Jun 2019 12:54:22 +0000 (12:54 +0000)
Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
lib/crypto/gnutls_error.c
lib/crypto/gnutls_helpers.h

index 9e124c20c6822efbe6d4e46bb199a665f141a31d..764e217532859173dbd29ccff47537523ea6d24c 100644 (file)
@@ -67,3 +67,51 @@ NTSTATUS _gnutls_error_to_ntstatus(int gnutls_rc,
 
        return status;
 }
+
+WERROR _gnutls_error_to_werror(int gnutls_rc,
+                              WERROR blocked_werr,
+                              const char *function,
+                              const char *location)
+{
+       WERROR werr;
+
+       if (gnutls_rc == GNUTLS_E_SUCCESS) {
+               return WERR_OK;
+       }
+
+       switch (gnutls_rc) {
+       case GNUTLS_E_UNWANTED_ALGORITHM:
+               werr = blocked_werr;
+               break;
+       case GNUTLS_E_MEMORY_ERROR:
+               werr = WERR_NOT_ENOUGH_MEMORY;
+               break;
+       case GNUTLS_E_INVALID_REQUEST:
+               werr = WERR_INVALID_VARIANT;
+               break;
+       case GNUTLS_E_DECRYPTION_FAILED:
+               werr = WERR_DECRYPTION_FAILED;
+               break;
+       case GNUTLS_E_ENCRYPTION_FAILED:
+               werr = WERR_ENCRYPTION_FAILED;
+               break;
+       case GNUTLS_E_SHORT_MEMORY_BUFFER:
+               werr = WERR_INVALID_PARAMETER;
+               break;
+       case GNUTLS_E_BASE64_DECODING_ERROR:
+       case GNUTLS_E_HASH_FAILED:
+       case GNUTLS_E_LIB_IN_ERROR_STATE:
+       case GNUTLS_E_INTERNAL_ERROR:
+       default:
+               werr = WERR_INTERNAL_ERROR;
+               break;
+       }
+
+       D_WARNING("%s: GNUTLS ERROR: %s, WERROR: %s at %s\n",
+                 function,
+                 gnutls_strerror_name(gnutls_rc),
+                 win_errstr(werr),
+                 location);
+
+       return werr;
+}
index 3e7300ea2c08f646b20065f848af240f6c7b9031..e1a1716829757b915e06e18970939b66bf959aa5 100644 (file)
@@ -19,6 +19,7 @@
 #define _GNUTLS_HELPERS_H
 
 #include "ntstatus.h"
+#include "werror.h"
 
 NTSTATUS _gnutls_error_to_ntstatus(int gnutls_rc,
                                   NTSTATUS blocked_status,
@@ -28,4 +29,11 @@ NTSTATUS _gnutls_error_to_ntstatus(int gnutls_rc,
        _gnutls_error_to_ntstatus(gnutls_rc, blocked_status, \
                                  __FUNCTION__, __location__)
 
+WERROR _gnutls_error_to_werror(int gnutls_rc,
+                              WERROR blocked_werr,
+                              const char *function,
+                              const char *location);
+#define gnutls_error_to_werror(gnutls_rc, blocked_werr) \
+       _gnutls_error_to_werror(gnutls_rc, blocked_werr, \
+                               __FUNCTION__, __location__)
 #endif /* _GNUTLS_HELPERS_H */