| 726 | } |
| 727 | |
| 728 | void validateAccess(thread_db* tdbb, Jrd::Attachment* attachment, SystemPrivilege sp) |
| 729 | { |
| 730 | if (!attachment->locksmith(tdbb, sp)) |
| 731 | { |
| 732 | PreparedStatement::Builder sql; |
| 733 | MetaName missPriv("UNKNOWN"); |
| 734 | sql << "select" << sql("rdb$type_name", missPriv) << "from rdb$types" |
| 735 | << "where rdb$field_name = 'RDB$SYSTEM_PRIVILEGES'" |
| 736 | << " and rdb$type =" << SSHORT(sp); |
| 737 | jrd_tra* transaction = attachment->getSysTransaction(); |
| 738 | AutoPreparedStatement ps(attachment->prepareStatement(tdbb, transaction, sql)); |
| 739 | AutoResultSet rs(ps->executeQuery(tdbb, transaction)); |
| 740 | rs->fetch(tdbb); |
| 741 | |
| 742 | const UserId* const u = attachment->att_user; |
| 743 | Arg::Gds err(isc_adm_task_denied); |
| 744 | err << Arg::Gds(isc_miss_prvlg) << missPriv; |
| 745 | if (u && u->testFlag(USR_mapdown)) |
| 746 | err << Arg::Gds(isc_map_down); |
| 747 | |
| 748 | ERR_post(err); |
| 749 | } |
| 750 | } |
| 751 | |
| 752 | |
| 753 | class DefaultCallback : public AutoIface<ICryptKeyCallbackImpl<DefaultCallback, CheckStatusWrapper> > |
no test coverage detected