@@ -98,9 +98,10 @@ user_login_authorization(Username, AuthProps) ->
9898check_vhost_access (User  =  # auth_user {username  =  Username ,
9999                                     impl      =  # impl {user_dn  =  UserDN }},
100100                   VHost , _Sock ) -> 
101+     ADArgs  =  get_active_directory_args (Username ),
101102    Args  =  [{username , Username },
102103            {user_dn ,  UserDN },
103-             {vhost ,    VHost }],
104+             {vhost ,    VHost }]  ++   ADArgs ,
104105    ? L (" CHECK: ~s  for ~s " log_vhost (Args ), log_user (User )]),
105106    R  =  evaluate_ldap (env (vhost_access_query ), Args , User ),
106107    ? L (" DECISION: ~s  for ~s : ~p " 
@@ -111,12 +112,13 @@ check_resource_access(User = #auth_user{username = Username,
111112                                        impl      =  # impl {user_dn  =  UserDN }},
112113                      # resource {virtual_host  =  VHost , kind  =  Type , name  =  Name },
113114                      Permission ) -> 
115+     ADArgs  =  get_active_directory_args (Username ),
114116    Args  =  [{username ,   Username },
115117            {user_dn ,    UserDN },
116118            {vhost ,      VHost },
117119            {resource ,   Type },
118120            {name ,       Name },
119-             {permission , Permission }],
121+             {permission , Permission }]  ++   ADArgs ,
120122    ? L (" CHECK: ~s  for ~s " log_resource (Args ), log_user (User )]),
121123    R  =  evaluate_ldap (env (resource_access_query ), Args , User ),
122124    ? L (" DECISION: ~s  for ~s : ~p " 
@@ -129,12 +131,13 @@ check_topic_access(User = #auth_user{username = Username,
129131                   Permission ,
130132                   Context ) -> 
131133    OptionsArgs  =  topic_context_as_options (Context , undefined ),
134+     ADArgs  =  get_active_directory_args (Username ),
132135    Args  =  [{username ,   Username },
133136            {user_dn ,    UserDN },
134137            {vhost ,      VHost },
135138            {resource ,   Resource },
136139            {name ,       Name },
137-             {permission , Permission }] ++  OptionsArgs ,
140+             {permission , Permission }] ++  OptionsArgs   ++   ADArgs ,
138141    ? L (" CHECK: ~s  for ~s " log_resource (Args ), log_user (User )]),
139142    R  =  evaluate_ldap (env (topic_access_query ), Args , User ),
140143    ? L (" DECISION: ~s  for ~s : ~p " 
@@ -705,9 +708,10 @@ do_login(Username, PrebindUserDN, Password, VHost, LDAP) ->
705708do_tag_queries (Username , UserDN , User , VHost , LDAP ) -> 
706709    {ok , [begin 
707710              ? L1 (" CHECK: does ~s  have tag ~s ?" Username , Tag ]),
708-               R  =  evaluate (Q , [{username , Username },
709-                                {user_dn ,  UserDN } | vhost_if_defined (VHost )],
710-                            User , LDAP ),
711+               VhostArgs  =  vhost_if_defined (VHost ),
712+               ADArgs  =  get_active_directory_args (Username ),
713+               EvalArgs  =  [{username , Username }, {user_dn , UserDN }] ++  VhostArgs  ++  ADArgs ,
714+               R  =  evaluate (Q , EvalArgs , User , LDAP ),
711715              ? L1 (" DECISION: does ~s  have tag ~s ? ~p " 
712716                  [Username , Tag , R ]),
713717              {Tag , R }
@@ -752,7 +756,8 @@ dn_lookup(Username, LDAP) ->
752756    end .
753757
754758fill_user_dn_pattern (Username ) -> 
755-     fill (env (user_dn_pattern ), [{username , Username }]).
759+     ADArgs  =  get_active_directory_args (Username ),
760+     fill (env (user_dn_pattern ), [{username , Username }] ++  ADArgs ).
756761
757762creds (User ) ->  creds (User , env (other_bind )).
758763
@@ -826,6 +831,15 @@ fill(Fmt, Args) ->
826831    ? L2 (" template result: \" ~s \" " R ]),
827832    R .
828833
834+ get_active_directory_args ([ADUser , ADDomain ]) ->
835+     [{ad_user , ADUser }, {ad_domain , ADDomain }];
836+ get_active_directory_args (Parts ) when  is_list (Parts ) -> 
837+     [];
838+ get_active_directory_args (Username ) when  is_binary (Username ) -> 
839+     %  If Username is in Domain\User format, provide additional fill
840+     %  template arguments
841+     get_active_directory_args (binary :split (Username , <<" \\ " trim_all ])).
842+ 
829843log_result ({ok , # auth_user {}}) ->  ok ;
830844log_result (true )               ->  ok ;
831845log_result (false )              ->  denied ;
0 commit comments