3030-behaviour (ejabberd_auth ).
3131
3232% % External exports
33- -export ([start /1 , set_password /3 , check_password /3 ,
34- check_password /5 , try_register /3 ,
33+ -export ([start /1 , set_password /3 , check_password /4 ,
34+ check_password /6 , try_register /3 ,
3535 dirty_get_registered_users /0 , get_vh_registered_users /1 ,
3636 get_vh_registered_users /2 ,
3737 get_vh_registered_users_number /1 ,
@@ -75,16 +75,20 @@ plain_password_required() -> true.
7575
7676store_type () -> external .
7777
78- check_password (User , Server , Password ) ->
79- case get_cache_option (Server ) of
80- false -> check_password_extauth (User , Server , Password );
81- {true , CacheTime } ->
82- check_password_cache (User , Server , Password , CacheTime )
78+ check_password (User , AuthzId , Server , Password ) ->
79+ if AuthzId /= <<>> andalso AuthzId /= User ->
80+ false ;
81+ true ->
82+ case get_cache_option (Server ) of
83+ false -> check_password_extauth (User , AuthzId , Server , Password );
84+ {true , CacheTime } ->
85+ check_password_cache (User , AuthzId , Server , Password , CacheTime )
86+ end
8387 end .
8488
85- check_password (User , Server , Password , _Digest ,
89+ check_password (User , AuthzId , Server , Password , _Digest ,
8690 _DigestGen ) ->
87- check_password (User , Server , Password ).
91+ check_password (User , AuthzId , Server , Password ).
8892
8993set_password (User , Server , Password ) ->
9094 case extauth :set_password (User , Server , Password ) of
@@ -177,44 +181,44 @@ get_cache_option(Host) ->
177181 CacheTime -> {true , CacheTime }
178182 end .
179183
180- % % @spec (User, Server, Password) -> true | false
181- check_password_extauth (User , Server , Password ) ->
184+ % % @spec (User, AuthzId, Server, Password) -> true | false
185+ check_password_extauth (User , _AuthzId , Server , Password ) ->
182186 extauth :check_password (User , Server , Password ) andalso
183187 Password /= <<" " >>.
184188
185189% % @spec (User, Server, Password) -> true | false
186190try_register_extauth (User , Server , Password ) ->
187191 extauth :try_register (User , Server , Password ).
188192
189- check_password_cache (User , Server , Password , 0 ) ->
190- check_password_external_cache (User , Server , Password );
191- check_password_cache (User , Server , Password ,
193+ check_password_cache (User , AuthzId , Server , Password , 0 ) ->
194+ check_password_external_cache (User , AuthzId , Server , Password );
195+ check_password_cache (User , AuthzId , Server , Password ,
192196 CacheTime ) ->
193197 case get_last_access (User , Server ) of
194198 online ->
195- check_password_internal (User , Server , Password );
199+ check_password_internal (User , AuthzId , Server , Password );
196200 never ->
197- check_password_external_cache (User , Server , Password );
201+ check_password_external_cache (User , AuthzId , Server , Password );
198202 mod_last_required ->
199203 ? ERROR_MSG (" extauth is used, extauth_cache is enabled "
200204 " but mod_last is not enabled in that "
201205 " host" ,
202206 []),
203- check_password_external_cache (User , Server , Password );
207+ check_password_external_cache (User , AuthzId , Server , Password );
204208 TimeStamp ->
205209 case is_fresh_enough (TimeStamp , CacheTime ) of
206210 % % If no need to refresh, check password against Mnesia
207211 true ->
208- case check_password_internal (User , Server , Password ) of
212+ case check_password_internal (User , AuthzId , Server , Password ) of
209213 % % If password valid in Mnesia, accept it
210214 true -> true ;
211215 % % Else (password nonvalid in Mnesia), check in extauth and cache result
212216 false ->
213- check_password_external_cache (User , Server , Password )
217+ check_password_external_cache (User , AuthzId , Server , Password )
214218 end ;
215219 % % Else (need to refresh), check in extauth and cache result
216220 false ->
217- check_password_external_cache (User , Server , Password )
221+ check_password_external_cache (User , AuthzId , Server , Password )
218222 end
219223 end .
220224
@@ -240,8 +244,8 @@ get_password_cache(User, Server, CacheTime) ->
240244 end .
241245
242246% % Check the password using extauth; if success then cache it
243- check_password_external_cache (User , Server , Password ) ->
244- case check_password_extauth (User , Server , Password ) of
247+ check_password_external_cache (User , AuthzId , Server , Password ) ->
248+ case check_password_extauth (User , AuthzId , Server , Password ) of
245249 true ->
246250 set_password_internal (User , Server , Password ), true ;
247251 false -> false
@@ -255,9 +259,9 @@ try_register_external_cache(User, Server, Password) ->
255259 _ -> {error , not_allowed }
256260 end .
257261
258- % % @spec (User, Server, Password) -> true | false
259- check_password_internal (User , Server , Password ) ->
260- ejabberd_auth_internal :check_password (User , Server ,
262+ % % @spec (User, AuthzId, Server, Password) -> true | false
263+ check_password_internal (User , AuthzId , Server , Password ) ->
264+ ejabberd_auth_internal :check_password (User , AuthzId , Server ,
261265 Password ).
262266
263267% % @spec (User, Server, Password) -> ok | {error, invalid_jid}
0 commit comments