Skip to main content

Module service

Module service 

Source
Expand description

O gerenciador de serviços do Firebird (Service Manager): backup/restore (gbak), estatísticas (gstat), reparos (gfix), gestão de usuários, leitura do log do servidor, etc.

Um anexo de serviço usa o MESMO handshake de uma conexão de banco (connect + SRP + wire-crypt), mas com a operação op_service_attach (82) e o “arquivo” especial service_mgr. Em vez de um DPB, o attach carrega um SPB (Service Parameter Buffer). O fluxo de wire (decodificado de um strace do fbsvcmgr):

  1. op_service_attach (82): op | obj(0) | "service_mgr"(cstring) | spb(cstring). O SPB começa com dois bytes isc_spb_version, isc_spb_current_version (ambos 2) e então clumplets: user_name(28), e a autenticação igual ao DPB — auth_plugin_name(116), auth_plugin_list(117), specific_auth_data(111) (a prova SRP). A resposta traz o handle do serviço.
  2. op_service_info (84): op | handle | incarnation(0) | send_items(cstring) | recv_items(cstring) | buffer_length(i32). A resposta é um op_response cujo p_resp_data é um buffer de info clássico (tag | len(2 LE) | valor … terminado por isc_info_end). É usada tanto para consultas (versão do servidor, ambiente) quanto para drenar a saída textual de uma ação.
  3. op_service_start (85): op | handle | incarnation(0) | spb(cstring). O primeiro byte do SPB é o código da ação (isc_action_svc_*), seguido de seus argumentos. Dispara a ação; a saída é lida depois via op_service_info.
  4. op_service_detach (83): op | handle.

Codificação do SPB de uma ação (decodificada de straces de fbsvcmgr action_backup/action_db_stats): difere tanto do SPB de attach quanto dos DPBs de banco. O primeiro byte é o código da ação; em seguida os argumentos, onde:

  • argumento string (ex.: isc_spb_dbname 106, isc_spb_bkp_file 5): tag(1) | comprimento(2, little-endian) | bytes — note o prefixo de 2 bytes, não o de 1 byte dos clumplets de attach;
  • argumento inteiro (ex.: isc_spb_bkp_factor 6, isc_spb_options 108): tag(1) | valor(4, little-endian), sem prefixo de comprimento;
  • flag isolada (ex.: isc_spb_verbose 107): apenas tag(1).

As opções de backup/restore/estatísticas são um bitmask carregado em um único isc_spb_options (o servidor o lê como máscara de bits).

Structs§

ServiceManager
Um anexo autenticado ao gerenciador de serviços de um servidor Firebird.
UserInfo
Um usuário do banco de segurança, devolvido por ServiceManager::display_users/display_user.
UserParams
Parâmetros para criar (add_user) ou alterar (modify_user) um usuário. Construa com UserParams::new e os métodos encadeáveis; só os campos definidos entram no SPB (em modify_user, os ausentes ficam intactos).