MCPcopy Create free account
hub / github.com/FirebirdSQL/firebird / checkPrivileges

Method checkPrivileges

src/jrd/trace/TraceService.cpp:343–389  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

341}
342
343bool TraceSvcJrd::checkPrivileges(TraceSession& session)
344{
345 // Our service run in embedded mode and have no auth info - trust user name as is
346 if (m_admin || (m_user.hasData() && (m_user == session.ses_user)))
347 return true;
348
349 // Other session is fully authorized - try to map our auth info using other's
350 // security database
351 if (session.ses_auth.hasData())
352 {
353 AuthReader::Info info;
354 for (AuthReader rdr(session.ses_auth); rdr.getInfo(info); rdr.moveNext())
355 {
356 string s_user, t_role;
357
358 PathName dummy;
359 RefPtr<const Config> config;
360 expandDatabaseName(info.secDb.hasData() ?
361 info.secDb.ToPathName() : m_svc.getExpectedDb(), dummy, &config);
362
363 Mapping mapping(Mapping::MAP_NO_FLAGS, m_svc.getCryptCallback());
364 UserId::Privileges priv;
365 mapping.needSystemPrivileges(priv);
366 mapping.setAuthBlock(m_authBlock);
367 mapping.setErrorMessagesContextName("services manager");
368 mapping.setSqlRole(m_svc.getRoleName());
369 mapping.setSecurityDbAlias(config->getSecurityDatabase(), nullptr);
370
371 if (mapping.mapUser(s_user, t_role) & Mapping::MAP_ERROR_NOT_THROWN)
372 {
373 // Error in mapUser() means missing context, therefore...
374 continue;
375 }
376
377 t_role.upper();
378
379 // TODO: add privileges for list\manage sessions and check it here
380 if (s_user == DBA_USER_NAME || t_role == ADMIN_ROLE || s_user == session.ses_user)
381 return true;
382 }
383 }
384 // Other session's service run in embedded mode - check our user name as is
385 else if (m_svc.getUserName() == session.ses_user || m_svc.getUserAdminFlag())
386 return true;
387
388 return false;
389}
390
391// service entrypoint
392int TRACE_main(UtilSvc* arg)

Callers

nothing calls this directly

Calls 15

expandDatabaseNameFunction · 0.85
ToPathNameMethod · 0.80
needSystemPrivilegesMethod · 0.80
setAuthBlockMethod · 0.80
setSecurityDbAliasMethod · 0.80
mapUserMethod · 0.80
upperMethod · 0.80
getUserAdminFlagMethod · 0.80
hasDataMethod · 0.45
getInfoMethod · 0.45
moveNextMethod · 0.45

Tested by

no test coverage detected