diff options
author | Ben Hood <0x6e6562@gmail.com> | 2008-07-06 18:30:05 +0100 |
---|---|---|
committer | Ben Hood <0x6e6562@gmail.com> | 2008-07-06 18:30:05 +0100 |
commit | ccdf9a6065af6fb7523b25b694ea8e62c27a776f (patch) | |
tree | 0caf902f319e877d625d555e8538a165d7b393a5 | |
parent | 4dcea129a99d7523a3173358833818a32f0061b3 (diff) | |
download | rabbitmq-server-ccdf9a6065af6fb7523b25b694ea8e62c27a776f.tar.gz |
Fixed some of the QA notes
-rw-r--r-- | src/rabbit_realm.erl | 19 | ||||
-rw-r--r-- | src/rabbit_ticket.erl | 34 |
2 files changed, 26 insertions, 27 deletions
diff --git a/src/rabbit_realm.erl b/src/rabbit_realm.erl index 959ab546..46071ed5 100644 --- a/src/rabbit_realm.erl +++ b/src/rabbit_realm.erl @@ -110,23 +110,24 @@ list_vhost_realms(VHostPath) -> fun () -> mnesia:read({vhost_realm, VHostPath}) end))]. add(Name = #resource{kind = realm}, R = #resource{name = Resource}) -> - manage_link(link,realm_table_for_resource(R),Name,Resource). + Table = realm_table_for_resource(R), + Fun = fun() -> mnesia:write({Table,Name,Resource}) end, + manage_link(Fun,Name). delete(Name = #resource{kind = realm}, R = #resource{name = Resource}) -> - manage_link(unlink,realm_table_for_resource(R),Name,Resource). + Table = realm_table_for_resource(R), + Fun = fun() -> mnesia:delete_object({Table,Name,Resource}) end, + manage_link(Fun,Name). % This links or unlinks a resource to a realm -manage_link(Action,LinkTable,Realm,Resource) -> +manage_link(Action, Realm) -> rabbit_misc:execute_mnesia_transaction( fun () -> case mnesia:read({realm, Realm}) of [] -> mnesia:abort(not_found); [_] -> - case Action of - link -> mnesia:write({LinkTable,Realm,Resource}); - unlink -> mnesia:delete_object({LinkTable,Realm,Resource}) - end + apply(Action,[]) end end). @@ -137,9 +138,7 @@ parent_table_for_resource(#resource{kind = queue}) -> amqqueue. check(#resource{kind = realm, name = Realm}, Resource = #resource{}) -> - F = qlc:e(qlc:q([R || R <- mnesia:table(realm_table_for_resource(Resource)), - R#realm_resource.realm == Realm, - R#realm_resource.resource == Resource#resource.name])), + F = mnesia:match_object(#realm_resource{resource = Resource#resource.name, realm = Realm}), case mnesia:async_dirty(F) of {atomic,[]} -> false; {atomic,_} -> true; diff --git a/src/rabbit_ticket.erl b/src/rabbit_ticket.erl index 24c5a0af..16475a98 100644 --- a/src/rabbit_ticket.erl +++ b/src/rabbit_ticket.erl @@ -97,23 +97,23 @@ maybe_relax_checks(TicketNumber, Username, VHostPath) -> check_ticket(TicketNumber, FieldIndex, Name = #resource{virtual_host = VHostPath}, Username) -> #ticket{realm_name = RealmName} = - lookup_ticket(TicketNumber, FieldIndex, Username, VHostPath). - % case resource_in_realm(RealmName, Name) of - % false -> - % case rabbit_misc:strict_ticket_checking() of - % true -> - % rabbit_misc:protocol_error( - % access_refused, - % "insufficient permissions in ticket ~w to access ~s in ~s", - % [TicketNumber, rabbit_misc:rs(Name), - % rabbit_misc:rs(RealmName)]); - % false -> - % rabbit_log:warning("Lax ticket check mode: ignoring cross-realm access for ticket ~p~n", [TicketNumber]), - % ok - % end; - % true -> - % ok - % end. + lookup_ticket(TicketNumber, FieldIndex, Username, VHostPath), + case resource_in_realm(RealmName, Name) of + false -> + case rabbit_misc:strict_ticket_checking() of + true -> + rabbit_misc:protocol_error( + access_refused, + "insufficient permissions in ticket ~w to access ~s in ~s", + [TicketNumber, rabbit_misc:rs(Name), + rabbit_misc:rs(RealmName)]); + false -> + rabbit_log:warning("Lax ticket check mode: ignoring cross-realm access for ticket ~p~n", [TicketNumber]), + ok + end; + true -> + ok + end. resource_in_realm(RealmName, ResourceName = #resource{kind = Kind}) -> CacheKey = {resource_cache, RealmName, Kind}, |