Преглед на файлове

Correctly save and apply the DisableSslVersions config

Raymond Tau преди 10 години
родител
ревизия
311ab9efab
променени са 1 файла, в които са добавени 40 реда и са изтрити 6 реда
  1. 40 6
      src/Cedar/Server.c

+ 40 - 6
src/Cedar/Server.c

@@ -6167,23 +6167,24 @@ void SiLoadServerCfg(SERVER *s, FOLDER *f)
 			UINT i;		
 			for (i = 0;i < sslVersions->NumTokens;i++)
 			{
-				if (strcmp(tmp, NAME_SSL_VERSION_SSL_V2)) {
+				char *sslVersion=sslVersions->Token[i];
+				if (StrCmp(sslVersion, NAME_SSL_VERSION_SSL_V2)==0) {
 					c->DisableSslVersions |= SSL_VERSION_SSL_V2;
 					continue;
 				}
-				if (strcmp(tmp, NAME_SSL_VERSION_SSL_V3)) {
+				if (StrCmp(sslVersion, NAME_SSL_VERSION_SSL_V3)==0) {
 					c->DisableSslVersions |= SSL_VERSION_SSL_V3;
 					continue;
 				}
-				if (strcmp(tmp, NAME_SSL_VERSION_TLS_V1_0)) { 
+				if (StrCmp(sslVersion, NAME_SSL_VERSION_TLS_V1_0)==0) { 
 					c->DisableSslVersions |= SSL_VERSION_TLS_V1_0;
 					continue;
 				}
-				if (strcmp(tmp, NAME_SSL_VERSION_TLS_V1_1)) {
+				if (StrCmp(sslVersion, NAME_SSL_VERSION_TLS_V1_1)==0) {
 					c->DisableSslVersions |= SSL_VERSION_TLS_V1_1;
 					continue;
 				}
-				if (strcmp(tmp, NAME_SSL_VERSION_TLS_V1_2)) {
+				if (StrCmp(sslVersion, NAME_SSL_VERSION_TLS_V1_2)==0) {
 					c->DisableSslVersions |= SSL_VERSION_TLS_V1_2;
 					continue;
 				}
@@ -6500,7 +6501,40 @@ void SiWriteServerCfg(FOLDER *f, SERVER *s)
 
 		CfgAddBool(f, "AcceptOnlyTls", c->AcceptOnlyTls);
 
-		CfgAddStr(f, "DisableSslVersions", c->DisableSslVersions);
+		{
+			char tmp[MAX_SIZE];
+			tmp[0] = 0;
+			if (c->DisableSslVersions & SSL_VERSION_SSL_V2) {
+				StrCat(tmp, sizeof(tmp), NAME_SSL_VERSION_SSL_V2);
+				StrCat(tmp, sizeof(tmp), ",");
+			}
+			if (c->DisableSslVersions & SSL_VERSION_SSL_V3) {
+				StrCat(tmp, sizeof(tmp), NAME_SSL_VERSION_SSL_V3);
+				StrCat(tmp, sizeof(tmp), ",");
+			}
+			if (c->DisableSslVersions & SSL_VERSION_TLS_V1_0) {
+				StrCat(tmp, sizeof(tmp), NAME_SSL_VERSION_TLS_V1_0);
+				StrCat(tmp, sizeof(tmp), ",");
+			}
+			if (c->DisableSslVersions & SSL_VERSION_TLS_V1_1) {
+				StrCat(tmp, sizeof(tmp), NAME_SSL_VERSION_TLS_V1_1);
+				StrCat(tmp, sizeof(tmp), ",");
+			}
+			if (c->DisableSslVersions & SSL_VERSION_TLS_V1_2) {
+				StrCat(tmp, sizeof(tmp), NAME_SSL_VERSION_TLS_V1_2);
+				StrCat(tmp, sizeof(tmp), ",");
+			}
+                        if (StrLen(tmp) >= 1)
+                        {
+                                if (tmp[StrLen(tmp) - 1] == ',')
+                                {
+                                        tmp[StrLen(tmp) - 1] = 0;
+                                }
+                        }
+			CfgAddStr(f, "DisableSslVersions", tmp);
+		}
+
+		
 
 		// Disable session reconnect
 		CfgAddBool(f, "DisableSessionReconnect", GetGlobalServerFlag(GSF_DISABLE_SESSION_RECONNECT));