Sfoglia il codice sorgente

fix #1439

Validate imported databases for confusable nicks
tags/v2.5.0-rc1
Shivaram Lingamneni 3 anni fa
parent
commit
c8c1ddfb41
1 ha cambiato i file con 19 aggiunte e 3 eliminazioni
  1. 19
    3
      irc/import.go

+ 19
- 3
irc/import.go Vedi File

@@ -80,13 +80,24 @@ func doImportDBGeneric(config *Config, dbImport databaseImport, credsType Creden
80 80
 	tx.Set(keyCloakSecret, utils.GenerateSecretKey(), nil)
81 81
 
82 82
 	cfUsernames := make(utils.StringSet)
83
+	skeletonToUsername := make(map[string]string)
84
+	warnSkeletons := false
83 85
 
84 86
 	for username, userInfo := range dbImport.Users {
85 87
 		cfUsername, err := CasefoldName(username)
86
-		if err != nil {
87
-			log.Printf("invalid username %s: %v", username, err)
88
+		skeleton, skErr := Skeleton(username)
89
+		if err != nil || skErr != nil {
90
+			log.Printf("invalid username %s: %v\n", username, err)
88 91
 			continue
89 92
 		}
93
+
94
+		if existingSkelUser, ok := skeletonToUsername[skeleton]; ok {
95
+			log.Printf("Users %s and %s have confusable nicknames; this may render one or both accounts unusable\n", username, existingSkelUser)
96
+			warnSkeletons = true
97
+		} else {
98
+			skeletonToUsername[skeleton] = username
99
+		}
100
+
90 101
 		var certfps []string
91 102
 		for _, certfp := range userInfo.Certfps {
92 103
 			normalizedCertfp, err := utils.NormalizeCertfp(certfp)
@@ -103,7 +114,7 @@ func doImportDBGeneric(config *Config, dbImport databaseImport, credsType Creden
103 114
 		}
104 115
 		marshaledCredentials, err := json.Marshal(&credentials)
105 116
 		if err != nil {
106
-			log.Printf("invalid credentials for %s: %v", username, err)
117
+			log.Printf("invalid credentials for %s: %v\n", username, err)
107 118
 			continue
108 119
 		}
109 120
 		tx.Set(fmt.Sprintf(keyAccountExists, cfUsername), "1", nil)
@@ -178,6 +189,11 @@ func doImportDBGeneric(config *Config, dbImport databaseImport, credsType Creden
178 189
 		}
179 190
 	}
180 191
 
192
+	if warnSkeletons {
193
+		log.Printf("NOTE: you may be able to avoid confusability issues by changing the server casemapping setting to `ascii`\n")
194
+		log.Printf("However, this will prevent the use of non-ASCII Unicode characters in nicknames\n")
195
+	}
196
+
181 197
 	return nil
182 198
 }
183 199
 

Loading…
Annulla
Salva