XDG-DBUS-PROXY(1) User Commands XDG-DBUS-PROXY(1)

xdg-dbus-proxy - پروکسی فیلترکننده اتصالات D-Bus

xdg-dbus-proxy [OPTION...] [ADDRESS PATH [OPTION...]...]

دستور xdg-dbus-proxy یک پروکسی فیلترکننده برای اتصالات D-Bus است. آرگومان‌های آن یک یا چند جفت ADDRESS-PATH هستند که گذرگاه‌های مورد نظر برای پروکسی شدن را به همراه گزینه‌های تعیین‌کننده فیلترینگ مشخص می‌کنند.

پروکسی به سوکت دامنه یونیکس در PATH گوش می‌دهد و به ازای هر کلاینتی که به سوکت متصل شود، یک اتصال جدید به ADDRESS مشخص‌شده D-Bus (معمولاً گذرگاه نشست) باز می‌کند و داده‌ها را میان آن دو هدایت می‌نماید. در طول مرحله احراز هویت، تمام داده‌ها به همان صورت دریافتی هدایت می‌شوند و همچنین برای اولین بایت صفر (1 byte zero)، اعتبارنامه‌های پروکسی نیز به گذرگاه ارسال می‌شود.

پس از احراز هویت اتصال، دو حالت وجود دارد: فیلترشده و فیلترنشده. در حالت فیلترنشده، همه پیام‌ها همان‌طور که دریافت می‌شوند ارسال می‌گردند. در حالت فیلترشده، سیاست‌های مشخص اعمال می‌شوند تا تعیین کنند کدام پیام‌ها مجاز هستند و کدام پیام‌ها باید دور ریخته شوند.

فیلترینگ تنها بر سیگنال‌های خروجی، فراخوانی‌های متد و سیگنال‌های همگانی ورودی اعمال می‌شود. تمامی پاسخ‌ها (خطاها یا بازگشت‌های متد) تنها یک بار برای هر فراخوانی متدِ در انتظار مجاز شمرده می‌شوند و در غیر این صورت هرگز مجاز نیستند.

اگر یک کلاینت پیامی از همتای دیگری در گذرگاه دریافت کند، نام یکتای فرستنده نمایان می‌شود تا کلاینت بتواند چرخه عمر فراخواننده را از طریق سیگنال‌های NameOwnerChanged دنبال کند. اگر کلاینتی متدی را روی یک نام فراخوانی کند یا سیگنال همگانی از آن دریافت نماید (حتی اگر به زیرمجموعه‌ای از مسیرها یا رابط‌ها فیلتر شده باشد)، سیاست پایه آن نام از آن پس (حداقل) TALK در نظر گرفته می‌شود.

سیاست فیلترینگ شامل نگاشتی از نام‌های شناخته‌شده به یکی از سیاست‌های SEE، TALK یا OWN است. سیاست اولیه پیش‌فرض این است که کاربر تنها مجاز به ارتباط (TALK) با خود گذرگاه (org.freedesktop.DBus، یا بدون تعیین مقصد) و ارتباط (TALK) با شناسه یکتای خود است. تمامی کلاینت‌های دیگر نامرئی هستند.

در ادامه توضیحات مربوط به سطوح سیاست‌ها آمده است (هر سطح شامل سطوح پیش از خود نیز می‌شود):

SEE

نام/شناسه در پاسخ ListNames قابل مشاهده است

نام/شناسه در پاسخ ListActivatableNames قابل مشاهده است

می‌توانید GetNameOwner را روی نام فراخوانی کنید

می‌توانید NameHasOwner را روی نام فراخوانی کنید

سیگنال‌های NameOwnerChanged را روی نام مشاهده می‌کنید

هنگام قطع اتصال کلاینت، سیگنال‌های NameOwnerChanged را روی شناسه مشاهده می‌کنید

می‌توانید متدهای GetXXX را روی نام/شناسه فراخوانی کنید تا به عنوان مثال pid همتا را به دست آورید

هنگام ارسال پیام به نام/شناسه، به جای NameHasNoOwner خطای AccessDenied دریافت می‌کنید

TALK

می‌توانید هرگونه فراخوانی متد و سیگنال را به نام/شناسه ارسال کنید

سیگنال‌های همگانی را از نام/شناسه دریافت خواهید کرد (در صورتی که قاعده تطبیق برای آن‌ها داشته باشید)

می‌توانید StartServiceByName را روی نام فراخوانی کنید

OWN

مجاز به فراخوانی RequestName/ReleaseName/ListQueuedOwners روی نام هستید

سیاست با گزینه‌های --see، --talk و --own مشخص می‌شود. نام‌های شناخته‌شده در این گزینه‌ها می‌توانند دارای پسوند '.*' باشند. نام "org.foo.*" با "org.foo"، "org.foo.bar" و "org.foo.bar.gazonk" مطابقت دارد، اما با "org.foobar" مطابقت ندارد.

سیاست‌ها برای نام‌های شناخته‌شده تعیین می‌شوند، اما بر مالک آن نام نیز تأثیر می‌گذارند، به طوری که سیاست مربوط به یک شناسه یکتا، اجتماع سیاست‌های تمام نام‌هایی است که مالک آن‌هاست. به دلایل فنی، سیاست برای یک نام یکتا «چسبنده» (sticky) است؛ بدین معنا که بالاترین سیاست اعطا شده توسط نامی که زمانی در مالکیت بوده حفظ می‌شود، حتی زمانی که کلاینت آن نام را آزاد کند. جلوگیری از این امر در یک پروکسی به شیوه‌ای عاری از شرایط رقابتی (race-free) غیرممکن است. اما در عمل به ندرت مشکل‌ساز می‌شود، زیرا کلاینت‌های اندکی نام‌ها را آزاد کرده و در گذرگاه باقی می‌مانند.

علاوه بر سیاست پایه SEE/TALK/OWN، می‌توان قواعد پیچیده‌تری را در مورد فراخوانی‌های متد مجاز و سیگنال‌های همگانی قابل دریافت از نام‌های شناخته‌شده تعیین کرد. یک قاعده می‌تواند فراخوانی‌ها/سیگنال‌های مجاز را به یک مسیر شیء خاص یا زیردرختی از مسیرهای شیء محدود کند، و می‌تواند رابط مجاز را تا یک متد یا نام سیگنال منفرد محدود سازد.

قواعد با گزینه‌های --call و --broadcast مشخص می‌شوند. مقدار RULE در این گزینه‌ها رابط‌ها، متدها و مسیرهای شیء مجاز را تعیین می‌کند. این مقدار باید به فرمت [METHOD][@PATH] باشد، که در آن METHOD می‌تواند '*' یا یک رابط D-Bus (احتمالاً با پسوند '.*') یا یک نام متد کاملاً واجد شرایط باشد، و PATH یک مسیر شیء D-Bus است (احتمالاً با پسوند '/*').

هنگامی که گزینه‌ها چندین بار استفاده شوند، آخرین گزینه اعمال می‌شود، مگر اینکه خلاف آن مشخص شده باشد.

گزینه‌های عمومی:

--help

نمایش راهنما و خروج

--version

نمایش نسخه

--fd=FD

هنگام آماده بودن پروکسی‌ها در FD می‌نویسد، و با بسته شدن آن متوقف می‌شود.

--args=FD

آرگومان‌های جداشده با نویسه تهی (nul) را از توصیف‌کننده فایل داده‌شده می‌خواند. این گزینه می‌تواند چندین بار برای خواندن گزینه‌ها از چندین منبع استفاده شود.

گزینه‌های پروکسی:

این گزینه‌ها فقط بعد از یک ADDRESS قابل استفاده هستند و برای پروکسی آن نشانی اعمال می‌شوند.

--filter

فعال‌سازی فیلترینگ

--log

فعال‌سازی ثبت گزارش (لاگ)

--sloppy-names

نمایان کردن تمام نام‌های یکتا.

--see=NAME

تنظیم سیاست SEE برای نام داده‌شده.

--talk=NAME

تنظیم سیاست TALK برای نام داده‌شده.

--own=NAME

تنظیم سیاست OWN برای نام داده‌شده.

--call=NAME=RULE

تنظیم یک قاعده برای فراخوانی‌ها روی نام داده‌شده.

--broadcast=NAME=RULE

تنظیم یک قاعده برای سیگنال‌های همگانی از نام داده‌شده.

$ xdg-dbus-proxy --fd=26 unix:path=/run/usr/1000/bus /run/usr/1000/.dbus-proxy/session-bus-proxy --filter --own=org.gnome.ghex.* --talk=ca.desrt.dconf --call=org.freedesktop.portal.*=* --broadcast=org.freedesktop.portal.*=@/org/freedesktop/portal/*

flatpak