3131
3232-behaviour (ejabberd_auth ).
3333
34- -export ([start /1 , set_password /3 , check_password /3 ,
35- check_password /5 , try_register /3 ,
34+ -export ([start /1 , set_password /3 , check_password /4 ,
35+ check_password /6 , try_register /3 ,
3636 dirty_get_registered_users /0 , get_vh_registered_users /1 ,
3737 get_vh_registered_users /2 ,
3838 get_vh_registered_users_number /1 ,
@@ -76,16 +76,20 @@ plain_password_required() -> true.
7676
7777store_type () -> external .
7878
79- check_password (User , Server , Password ) ->
79+ check_password (User , AuthzId , Server , Password ) ->
80+ if AuthzId /= <<>> andalso AuthzId /= User ->
81+ false ;
82+ true ->
8083 case get_cache_option (Server ) of
81- false -> check_password_extauth (User , Server , Password );
84+ false -> check_password_extauth (User , AuthzId , Server , Password );
8285 {true , CacheTime } ->
83- check_password_cache (User , Server , Password , CacheTime )
86+ check_password_cache (User , AuthzId , Server , Password , CacheTime )
87+ end
8488 end .
8589
86- check_password (User , Server , Password , _Digest ,
90+ check_password (User , AuthzId , Server , Password , _Digest ,
8791 _DigestGen ) ->
88- check_password (User , Server , Password ).
92+ check_password (User , AuthzId , Server , Password ).
8993
9094set_password (User , Server , Password ) ->
9195 case extauth :set_password (User , Server , Password ) of
@@ -178,44 +182,44 @@ get_cache_option(Host) ->
178182 CacheTime -> {true , CacheTime }
179183 end .
180184
181- % % @spec (User, Server, Password) -> true | false
182- check_password_extauth (User , Server , Password ) ->
185+ % % @spec (User, AuthzId, Server, Password) -> true | false
186+ check_password_extauth (User , _AuthzId , Server , Password ) ->
183187 extauth :check_password (User , Server , Password ) andalso
184188 Password /= <<" " >>.
185189
186190% % @spec (User, Server, Password) -> true | false
187191try_register_extauth (User , Server , Password ) ->
188192 extauth :try_register (User , Server , Password ).
189193
190- check_password_cache (User , Server , Password , 0 ) ->
191- check_password_external_cache (User , Server , Password );
192- check_password_cache (User , Server , Password ,
194+ check_password_cache (User , AuthzId , Server , Password , 0 ) ->
195+ check_password_external_cache (User , AuthzId , Server , Password );
196+ check_password_cache (User , AuthzId , Server , Password ,
193197 CacheTime ) ->
194198 case get_last_access (User , Server ) of
195199 online ->
196- check_password_internal (User , Server , Password );
200+ check_password_internal (User , AuthzId , Server , Password );
197201 never ->
198- check_password_external_cache (User , Server , Password );
202+ check_password_external_cache (User , AuthzId , Server , Password );
199203 mod_last_required ->
200204 ? ERROR_MSG (" extauth is used, extauth_cache is enabled "
201205 " but mod_last is not enabled in that "
202206 " host" ,
203207 []),
204- check_password_external_cache (User , Server , Password );
208+ check_password_external_cache (User , AuthzId , Server , Password );
205209 TimeStamp ->
206210 case is_fresh_enough (TimeStamp , CacheTime ) of
207211 % % If no need to refresh, check password against Mnesia
208212 true ->
209- case check_password_internal (User , Server , Password ) of
213+ case check_password_internal (User , AuthzId , Server , Password ) of
210214 % % If password valid in Mnesia, accept it
211215 true -> true ;
212216 % % Else (password nonvalid in Mnesia), check in extauth and cache result
213217 false ->
214- check_password_external_cache (User , Server , Password )
218+ check_password_external_cache (User , AuthzId , Server , Password )
215219 end ;
216220 % % Else (need to refresh), check in extauth and cache result
217221 false ->
218- check_password_external_cache (User , Server , Password )
222+ check_password_external_cache (User , AuthzId , Server , Password )
219223 end
220224 end .
221225
@@ -241,8 +245,8 @@ get_password_cache(User, Server, CacheTime) ->
241245 end .
242246
243247% % Check the password using extauth; if success then cache it
244- check_password_external_cache (User , Server , Password ) ->
245- case check_password_extauth (User , Server , Password ) of
248+ check_password_external_cache (User , AuthzId , Server , Password ) ->
249+ case check_password_extauth (User , AuthzId , Server , Password ) of
246250 true ->
247251 set_password_internal (User , Server , Password ), true ;
248252 false -> false
@@ -256,9 +260,9 @@ try_register_external_cache(User, Server, Password) ->
256260 _ -> {error , not_allowed }
257261 end .
258262
259- % % @spec (User, Server, Password) -> true | false
260- check_password_internal (User , Server , Password ) ->
261- ejabberd_auth_internal :check_password (User , Server ,
263+ % % @spec (User, AuthzId, Server, Password) -> true | false
264+ check_password_internal (User , AuthzId , Server , Password ) ->
265+ ejabberd_auth_internal :check_password (User , AuthzId , Server ,
262266 Password ).
263267
264268% % @spec (User, Server, Password) -> ok | {error, invalid_jid}
0 commit comments