Coverage Report

Created: 2026-09-03 07:24

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/samba/lib/crypto/gnutls_error.c
Line
Count
Source
1
/*
2
 * Copyright (c) 2019      Andreas Schneider <asn@samba.org>
3
 *
4
 * This program is free software: you can redistribute it and/or modify
5
 * it under the terms of the GNU General Public License as published by
6
 * the Free Software Foundation, either version 3 of the License, or
7
 * (at your option) any later version.
8
 *
9
 * This program is distributed in the hope that it will be useful,
10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
 * GNU General Public License for more details.
13
 *
14
 * You should have received a copy of the GNU General Public License
15
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
16
 */
17
18
#include "includes.h"
19
#include "gnutls_helpers.h"
20
21
#include <gnutls/gnutls.h>
22
23
NTSTATUS _gnutls_error_to_ntstatus(int gnutls_rc,
24
           NTSTATUS blocked_status,
25
           const char *function,
26
           const char *location)
27
103
{
28
103
  NTSTATUS status;
29
30
103
  if (gnutls_rc == GNUTLS_E_SUCCESS) {
31
0
    return NT_STATUS_OK;
32
0
  }
33
34
103
  switch (gnutls_rc) {
35
0
  case GNUTLS_E_UNWANTED_ALGORITHM:
36
0
    status = blocked_status;
37
0
    break;
38
0
  case GNUTLS_E_MEMORY_ERROR:
39
0
    status = NT_STATUS_NO_MEMORY;
40
0
    break;
41
103
  case GNUTLS_E_INVALID_REQUEST:
42
103
    status = NT_STATUS_INVALID_VARIANT;
43
103
    break;
44
0
  case GNUTLS_E_DECRYPTION_FAILED:
45
0
    status = NT_STATUS_DECRYPTION_FAILED;
46
0
    break;
47
0
  case GNUTLS_E_ENCRYPTION_FAILED:
48
0
    status = NT_STATUS_ENCRYPTION_FAILED;
49
0
    break;
50
0
  case GNUTLS_E_SHORT_MEMORY_BUFFER:
51
0
    status = NT_STATUS_INVALID_PARAMETER;
52
0
    break;
53
0
  case GNUTLS_E_BASE64_DECODING_ERROR:
54
0
  case GNUTLS_E_HASH_FAILED:
55
0
  case GNUTLS_E_LIB_IN_ERROR_STATE:
56
0
  case GNUTLS_E_INTERNAL_ERROR:
57
0
  default:
58
0
    status = NT_STATUS_INTERNAL_ERROR;
59
0
    break;
60
103
  }
61
62
103
  D_WARNING("%s: GNUTLS ERROR: %s, NTSTATUS: %s at %s\n",
63
103
      function,
64
103
      gnutls_strerror_name(gnutls_rc),
65
103
      nt_errstr(status),
66
103
      location);
67
68
103
  return status;
69
103
}
70
71
WERROR _gnutls_error_to_werror(int gnutls_rc,
72
             WERROR blocked_werr,
73
             const char *function,
74
             const char *location)
75
0
{
76
0
  WERROR werr;
77
78
0
  if (gnutls_rc == GNUTLS_E_SUCCESS) {
79
0
    return WERR_OK;
80
0
  }
81
82
0
  switch (gnutls_rc) {
83
0
  case GNUTLS_E_UNWANTED_ALGORITHM:
84
0
    werr = blocked_werr;
85
0
    break;
86
0
  case GNUTLS_E_MEMORY_ERROR:
87
0
    werr = WERR_NOT_ENOUGH_MEMORY;
88
0
    break;
89
0
  case GNUTLS_E_INVALID_REQUEST:
90
0
    werr = WERR_INVALID_VARIANT;
91
0
    break;
92
0
  case GNUTLS_E_DECRYPTION_FAILED:
93
0
    werr = WERR_DECRYPTION_FAILED;
94
0
    break;
95
0
  case GNUTLS_E_ENCRYPTION_FAILED:
96
0
    werr = WERR_ENCRYPTION_FAILED;
97
0
    break;
98
0
  case GNUTLS_E_SHORT_MEMORY_BUFFER:
99
0
    werr = WERR_INVALID_PARAMETER;
100
0
    break;
101
0
  case GNUTLS_E_BASE64_DECODING_ERROR:
102
0
  case GNUTLS_E_HASH_FAILED:
103
0
  case GNUTLS_E_LIB_IN_ERROR_STATE:
104
0
  case GNUTLS_E_INTERNAL_ERROR:
105
0
  default:
106
0
    werr = WERR_INTERNAL_ERROR;
107
0
    break;
108
0
  }
109
110
0
  D_WARNING("%s: GNUTLS ERROR: %s, WERROR: %s at %s\n",
111
0
      function,
112
0
      gnutls_strerror_name(gnutls_rc),
113
0
      win_errstr(werr),
114
0
      location);
115
116
0
  return werr;
117
0
}