瀏覽代碼

Merge branch 'utilize-system-wide-crypto' of https://github.com/grulja/tigervnc

tags/v1.11.90
Pierre Ossman 2 年之前
父節點
當前提交
dfc9421dcf
共有 4 個文件被更改,包括 108 次插入30 次删除
  1. 52
    14
      common/rfb/CSecurityTLS.cxx
  2. 52
    14
      common/rfb/SSecurityTLS.cxx
  3. 1
    1
      common/rfb/Security.cxx
  4. 3
    1
      unix/xserver/hw/vnc/Xvnc.man

+ 52
- 14
common/rfb/CSecurityTLS.cxx 查看文件

@@ -210,26 +210,64 @@ void CSecurityTLS::setParam()
static const char kx_anon_priority[] = ":+ANON-ECDH:+ANON-DH";

int ret;
char *prio;
const char *err;

prio = (char*)malloc(strlen(Security::GnuTLSPriority) +
strlen(kx_anon_priority) + 1);
if (prio == NULL)
throw AuthFailureException("Not enough memory for GnuTLS priority string");
// Custom priority string specified?
if (strcmp(Security::GnuTLSPriority, "") != 0) {
char *prio;
const char *err;

strcpy(prio, Security::GnuTLSPriority);
if (anon)
prio = (char*)malloc(strlen(Security::GnuTLSPriority) +
strlen(kx_anon_priority) + 1);
if (prio == NULL)
throw AuthFailureException("Not enough memory for GnuTLS priority string");

strcpy(prio, Security::GnuTLSPriority);
if (anon)
strcat(prio, kx_anon_priority);

ret = gnutls_priority_set_direct(session, prio, &err);

free(prio);

if (ret != GNUTLS_E_SUCCESS) {
if (ret == GNUTLS_E_INVALID_REQUEST)
vlog.error("GnuTLS priority syntax error at: %s", err);
throw AuthFailureException("gnutls_set_priority_direct failed");
}
} else if (anon) {
const char *err;

#if GNUTLS_VERSION_NUMBER >= 0x030603
ret = gnutls_set_default_priority_append(session, kx_anon_priority, &err, 0);
if (ret != GNUTLS_E_SUCCESS) {
if (ret == GNUTLS_E_INVALID_REQUEST)
vlog.error("GnuTLS priority syntax error at: %s", err);
throw AuthFailureException("gnutls_set_default_priority_append failed");
}
#else
// We don't know what the system default priority is, so we guess
// it's what upstream GnuTLS has
static const char gnutls_default_priority[] = "NORMAL";
char *prio;

prio = (char*)malloc(strlen(gnutls_default_priority) +
strlen(kx_anon_priority) + 1);
if (prio == NULL)
throw AuthFailureException("Not enough memory for GnuTLS priority string");

strcpy(prio, gnutls_default_priority);
strcat(prio, kx_anon_priority);

ret = gnutls_priority_set_direct(session, prio, &err);
ret = gnutls_priority_set_direct(session, prio, &err);

free(prio);
free(prio);

if (ret != GNUTLS_E_SUCCESS) {
if (ret == GNUTLS_E_INVALID_REQUEST)
vlog.error("GnuTLS priority syntax error at: %s", err);
throw AuthFailureException("gnutls_set_priority_direct failed");
if (ret != GNUTLS_E_SUCCESS) {
if (ret == GNUTLS_E_INVALID_REQUEST)
vlog.error("GnuTLS priority syntax error at: %s", err);
throw AuthFailureException("gnutls_set_priority_direct failed");
}
#endif
}

if (anon) {

+ 52
- 14
common/rfb/SSecurityTLS.cxx 查看文件

@@ -201,26 +201,64 @@ void SSecurityTLS::setParams(gnutls_session_t session)
static const char kx_anon_priority[] = ":+ANON-ECDH:+ANON-DH";

int ret;
char *prio;
const char *err;

prio = (char*)malloc(strlen(Security::GnuTLSPriority) +
strlen(kx_anon_priority) + 1);
if (prio == NULL)
throw AuthFailureException("Not enough memory for GnuTLS priority string");
// Custom priority string specified?
if (strcmp(Security::GnuTLSPriority, "") != 0) {
char *prio;
const char *err;

strcpy(prio, Security::GnuTLSPriority);
if (anon)
prio = (char*)malloc(strlen(Security::GnuTLSPriority) +
strlen(kx_anon_priority) + 1);
if (prio == NULL)
throw AuthFailureException("Not enough memory for GnuTLS priority string");

strcpy(prio, Security::GnuTLSPriority);
if (anon)
strcat(prio, kx_anon_priority);

ret = gnutls_priority_set_direct(session, prio, &err);

free(prio);

if (ret != GNUTLS_E_SUCCESS) {
if (ret == GNUTLS_E_INVALID_REQUEST)
vlog.error("GnuTLS priority syntax error at: %s", err);
throw AuthFailureException("gnutls_set_priority_direct failed");
}
} else if (anon) {
const char *err;

#if GNUTLS_VERSION_NUMBER >= 0x030603
ret = gnutls_set_default_priority_append(session, kx_anon_priority, &err, 0);
if (ret != GNUTLS_E_SUCCESS) {
if (ret == GNUTLS_E_INVALID_REQUEST)
vlog.error("GnuTLS priority syntax error at: %s", err);
throw AuthFailureException("gnutls_set_default_priority_append failed");
}
#else
// We don't know what the system default priority is, so we guess
// it's what upstream GnuTLS has
static const char gnutls_default_priority[] = "NORMAL";
char *prio;

prio = (char*)malloc(strlen(gnutls_default_priority) +
strlen(kx_anon_priority) + 1);
if (prio == NULL)
throw AuthFailureException("Not enough memory for GnuTLS priority string");

strcpy(prio, gnutls_default_priority);
strcat(prio, kx_anon_priority);

ret = gnutls_priority_set_direct(session, prio, &err);
ret = gnutls_priority_set_direct(session, prio, &err);

free(prio);
free(prio);

if (ret != GNUTLS_E_SUCCESS) {
if (ret == GNUTLS_E_INVALID_REQUEST)
vlog.error("GnuTLS priority syntax error at: %s", err);
throw AuthFailureException("gnutls_set_priority_direct failed");
if (ret != GNUTLS_E_SUCCESS) {
if (ret == GNUTLS_E_INVALID_REQUEST)
vlog.error("GnuTLS priority syntax error at: %s", err);
throw AuthFailureException("gnutls_set_priority_direct failed");
}
#endif
}

#if defined (SSECURITYTLS__USE_DEPRECATED_DH)

+ 1
- 1
common/rfb/Security.cxx 查看文件

@@ -52,7 +52,7 @@ static LogWriter vlog("Security");
#ifdef HAVE_GNUTLS
StringParameter Security::GnuTLSPriority("GnuTLSPriority",
"GnuTLS priority string that controls the TLS session’s handshake algorithms",
"NORMAL");
"");
#endif

Security::Security()

+ 3
- 1
unix/xserver/hw/vnc/Xvnc.man 查看文件

@@ -220,7 +220,9 @@ also be in PEM format.
.TP
.B \-GnuTLSPriority \fIpriority\fP
GnuTLS priority string that controls the TLS session’s handshake algorithms.
See the GnuTLS manual for possible values. Default is \fBNORMAL\fP.
See the GnuTLS manual for possible values. For GnuTLS < 3.6.3 the default
value will be \fBNORMAL\fP to use upstream default. For newer versions
of GnuTLS system-wide crypto policy will be used.
.
.TP
.B \-UseBlacklist

Loading…
取消
儲存