summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Hood <0x6e6562@gmail.com>2008-07-06 18:30:05 +0100
committerBen Hood <0x6e6562@gmail.com>2008-07-06 18:30:05 +0100
commitccdf9a6065af6fb7523b25b694ea8e62c27a776f (patch)
tree0caf902f319e877d625d555e8538a165d7b393a5
parent4dcea129a99d7523a3173358833818a32f0061b3 (diff)
downloadrabbitmq-server-ccdf9a6065af6fb7523b25b694ea8e62c27a776f.tar.gz
Fixed some of the QA notes
-rw-r--r--src/rabbit_realm.erl19
-rw-r--r--src/rabbit_ticket.erl34
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},