Procházet zdrojové kódy

Merge pull request #878 from slingamn/issue749_guest_again

fix double-application of guest prefix
tags/v2.1.0-rc1
Shivaram Lingamneni před 4 roky
rodič
revize
1d228eaa92
Žádný účet není propojen s e-mailovou adresou tvůrce revize
1 změnil soubory, kde provedl 19 přidání a 10 odebrání
  1. 19
    10
      irc/client_lookup_set.go

+ 19
- 10
irc/client_lookup_set.go Zobrazit soubor

@@ -117,7 +117,7 @@ func (clients *ClientManager) Resume(oldClient *Client, session *Session) (err e
117 117
 func (clients *ClientManager) SetNick(client *Client, session *Session, newNick string) (setNick string, err error) {
118 118
 	config := client.server.Config()
119 119
 
120
-	var newcfnick, newSkeleton string
120
+	var newCfNick, newSkeleton string
121 121
 
122 122
 	client.stateMutex.RLock()
123 123
 	account := client.account
@@ -139,7 +139,7 @@ func (clients *ClientManager) SetNick(client *Client, session *Session, newNick
139 139
 			return "", errNickAccountMismatch
140 140
 		}
141 141
 		newNick = accountName
142
-		newcfnick = account
142
+		newCfNick = account
143 143
 		newSkeleton, err = Skeleton(newNick)
144 144
 		if err != nil {
145 145
 			return "", errNicknameInvalid
@@ -151,14 +151,23 @@ func (clients *ClientManager) SetNick(client *Client, session *Session, newNick
151 151
 		}
152 152
 
153 153
 		if account == "" && config.Accounts.NickReservation.ForceGuestFormat {
154
-			newNick = strings.Replace(config.Accounts.NickReservation.GuestFormat, "*", newNick, 1)
154
+			newCfNick, err = CasefoldName(newNick)
155
+			if err != nil {
156
+				return "", errNicknameInvalid
157
+			}
158
+			if !config.Accounts.NickReservation.guestRegexpFolded.MatchString(newCfNick) {
159
+				newNick = strings.Replace(config.Accounts.NickReservation.GuestFormat, "*", newNick, 1)
160
+				newCfNick = "" // re-fold it below
161
+			}
155 162
 		}
156 163
 
157
-		newcfnick, err = CasefoldName(newNick)
164
+		if newCfNick == "" {
165
+			newCfNick, err = CasefoldName(newNick)
166
+		}
158 167
 		if err != nil {
159 168
 			return "", errNicknameInvalid
160 169
 		}
161
-		if len(newNick) > config.Limits.NickLen || len(newcfnick) > config.Limits.NickLen {
170
+		if len(newNick) > config.Limits.NickLen || len(newCfNick) > config.Limits.NickLen {
162 171
 			return "", errNicknameInvalid
163 172
 		}
164 173
 		newSkeleton, err = Skeleton(newNick)
@@ -166,11 +175,11 @@ func (clients *ClientManager) SetNick(client *Client, session *Session, newNick
166 175
 			return "", errNicknameInvalid
167 176
 		}
168 177
 
169
-		if restrictedCasefoldedNicks[newcfnick] || restrictedSkeletons[newSkeleton] {
178
+		if restrictedCasefoldedNicks[newCfNick] || restrictedSkeletons[newSkeleton] {
170 179
 			return "", errNicknameInvalid
171 180
 		}
172 181
 
173
-		reservedAccount, method := client.server.accounts.EnforcementStatus(newcfnick, newSkeleton)
182
+		reservedAccount, method := client.server.accounts.EnforcementStatus(newCfNick, newSkeleton)
174 183
 		if method == NickEnforcementStrict && reservedAccount != "" && reservedAccount != account {
175 184
 			return "", errNicknameReserved
176 185
 		}
@@ -192,7 +201,7 @@ func (clients *ClientManager) SetNick(client *Client, session *Session, newNick
192 201
 	clients.Lock()
193 202
 	defer clients.Unlock()
194 203
 
195
-	currentClient := clients.byNick[newcfnick]
204
+	currentClient := clients.byNick[newCfNick]
196 205
 	// the client may just be changing case
197 206
 	if currentClient != nil && currentClient != client && session != nil {
198 207
 		// these conditions forbid reattaching to an existing session:
@@ -225,9 +234,9 @@ func (clients *ClientManager) SetNick(client *Client, session *Session, newNick
225 234
 	}
226 235
 
227 236
 	clients.removeInternal(client)
228
-	clients.byNick[newcfnick] = client
237
+	clients.byNick[newCfNick] = client
229 238
 	clients.bySkeleton[newSkeleton] = client
230
-	client.updateNick(newNick, newcfnick, newSkeleton)
239
+	client.updateNick(newNick, newCfNick, newSkeleton)
231 240
 	return newNick, nil
232 241
 }
233 242
 

Načítá se…
Zrušit
Uložit