+ key_str = GUID_buf_string(®->key.handle.uuid, &key_buf);
+ key_blob = data_blob_string_const(key_str);
+ key = make_tdb_data(key_blob.data, key_blob.length);
+
+ rg = (struct rpcd_witness_registration) {
+ .version = r->in.version,
+ .net_name = r->in.net_name,
+ .share_name = r->in.share_name,
+ .ip_address = r->in.ip_address,
+ .client_computer_name = reg->client.computer_name,
+ .flags = r->in.flags,
+ .timeout = r->in.timeout,
+ .context_handle = reg->key.handle,
+ .server_id = messaging_server_id(p->msg_ctx),
+ .account_name = session_info->info->account_name,
+ .domain_name = session_info->info->domain_name,
+ .account_sid = session_info->security_token->sids[PRIMARY_USER_SID_INDEX],
+ .local_address = tsocket_address_string(server_address, p->mem_ctx),
+ .remote_address = tsocket_address_string(client_address, p->mem_ctx),
+ .registration_time = timeval_to_nttime(&p->dce_call->time),
+ };
+
+ ndr_err = ndr_push_struct_blob(&val_blob, p->mem_ctx, &rg,
+ (ndr_push_flags_fn_t)ndr_push_rpcd_witness_registration);
+ if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
+ status = ndr_map_error2ntstatus(ndr_err);
+ DBG_WARNING("rpcd_witness_registration: key '%s' ndr_push - %s\n",
+ tdb_data_dbg(key),
+ nt_errstr(status));
+ TALLOC_FREE(reg);
+ return WERR_NO_SYSTEM_RESOURCES;
+ }
+ val = make_tdb_data(val_blob.data, val_blob.length);
+
+ status = dbwrap_store(reg->swn->registrations.db, key, val, TDB_INSERT);
+ if (!NT_STATUS_IS_OK(status)) {
+ DBG_WARNING("rpcd_witness_registration: key '%s' store - %s\n",
+ tdb_data_dbg(key),
+ nt_errstr(status));
+ TALLOC_FREE(reg);
+ return WERR_NO_SYSTEM_RESOURCES;
+ }
+
+ if (DEBUGLVL(DBGLVL_DEBUG)) {
+ DBG_DEBUG("rpcd_witness_registration: key '%s' stored\n",
+ tdb_data_dbg(key));
+ NDR_PRINT_DEBUG(rpcd_witness_registration, &rg);
+ }
+