SLAPD-SOCK(5) File Formats Manual SLAPD-SOCK(5)

slapd-sock - بکاند یا روکش سوکت IPC/شبکه برای slapd

/etc/openldap/slapd.conf

بکاند سوکت (Socket) برای slapd(8) جهت مدیریت پرس‌وجوها از یک برنامه خارجی استفاده می‌کند که به یک سوکت دامنه یونیکس (Unix domain socket) گوش می‌دهد. این امر امکان داشتن یک استخر (pool) از فرآیندها را فراهم می‌سازد که بین درخواست‌ها پایدار می‌مانند. این موضوع امکان عملیات چندنخی (multithreaded) و سطح بالایی از کارایی را فراهم می‌کند. برنامه خارجی باید به‌طور مستقل راه‌اندازی شده باشد؛ slapd(8) خودش آن را راه‌اندازی نخواهد کرد.

این ماژول همچنین می‌تواند به عنوان یک روکش (overlay) بر روی پایگاه‌های داده دیگر استفاده شود. استفاده به عنوان روکش اجازه می‌دهد اقدامات خارجی در پاسخ به عملیات‌های پایگاه داده اصلی آغاز (trigger) شوند.

این گزینه‌های slapd.conf برای پایگاه داده بکاند SOCK اعمال می‌شوند. به این معنا که آن‌ها باید پس از یک خط "database sock" و قبل از هر خط "backend" یا "database" بعدی قرار گیرند. سایر گزینه‌های پایگاه داده در صفحه راهنمای slapd.conf(5) توضیح داده شده‌اند.

همچنین، برای استفاده از این ماژول به عنوان یک روکش (overlay)، این دستورالعمل‌ها باید پس از یک خط "overlay sock" در تعریف یک پایگاه داده موجود قرار گیرند.

ارسال ویژگی‌های فراداده (meta-attributes) اضافی را با هر درخواست فعال می‌کند.
binddn: <bound DN>
peername: IP=<address>:<port>
ssf: <SSF value>
connid: <connection ID>
مسیر یک سوکت دامنه یونیکس را مشخص می‌کند که دستورات به آن ارسال می‌شوند و پاسخ‌ها از آن دریافت می‌گردند.

هنگامی که به عنوان روکش استفاده می‌شود، این دستورالعمل‌های اضافی تعریف می‌شوند:

مشخص می‌کند کدام انواع درخواست به برنامه خارجی ارسال شوند. حالت پیش‌فرض خالی است (هیچ درخواستی ارسال نمی‌شود).
مشخص می‌کند کدام انواع پاسخ به برنامه خارجی ارسال شوند. گزینه "result" تنها نتایج یک عملیات را ارسال می‌کند. گزینه "search" تمام مدخل‌هایی را که پایگاه داده برای یک درخواست جستجو بازگردانده ارسال می‌کند. حالت پیش‌فرض خالی است (هیچ پاسخی ارسال نمی‌شود).
الگوهای DN را مشخص می‌کند که روکش برای آن‌ها عمل خواهد کرد. تنها عملیات روی DNهایی که با عبارت باقاعده (regular expression) مشخص‌شده مطابقت داشته باشند پردازش خواهند شد. حالت پیش‌فرض خالی است (تمام DNها پردازش می‌شوند).

این پروتکل از یک خط جدید (newline) برای خاتمه دادن به پارامترهای دستور استفاده می‌کند. دستورات زیر ارسال می‌شوند:

ADD
msgid: <message id>
<repeat { "suffix:" <database suffix DN> }>
<entry in LDIF format>
<blank line>
BIND
msgid: <message id>
<repeat { "suffix:" <database suffix DN> }>
dn: <DN>
method: <method number>
credlen: <length of <credentials>>
cred: <credentials>
<blank line>
COMPARE
msgid: <message id>
<repeat { "suffix:" <database suffix DN> }>
dn: <DN>
<attribute>: <value>
<blank line>
DELETE
msgid: <message id>
<repeat { "suffix:" <database suffix DN> }>
dn: <DN>
<blank line>
EXTENDED
msgid: <message id>
<repeat { "suffix:" <database suffix DN> }>
oid: <OID>
value: <base64-value>
<blank line>
MODIFY
msgid: <message id>
<repeat { "suffix:" <database suffix DN> }>
dn: <DN>
<repeat {
    <"add"/"delete"/"replace">: <attribute>
    <repeat { <attribute>: <value> }>
    -
}>
<blank line>
MODRDN
msgid: <message id>
<repeat { "suffix:" <database suffix DN> }>
dn: <DN>
newrdn: <new RDN>
deleteoldrdn: <0 or 1>
<if new superior is specified: "newSuperior: <DN>">
<blank line>
SEARCH
msgid: <message id>
<repeat { "suffix:" <database suffix DN> }>
base: <base DN>
scope: <0-2, see ldap.h>
deref: <0-3, see ldap.h>
sizelimit: <size limit>
timelimit: <time limit>
filter: <filter>
attrsonly: <0 or 1>
attrs: <"all" or space-separated attribute list>
<blank line>
UNBIND
msgid: <message id>
<repeat { "suffix:" <database suffix DN> }>
<blank line>

دستورات - به جز unbind - باید خروجی زیر را داشته باشند:

RESULT
code: <integer>
matched: <matched DN>
info: <text>
که در آن تنها RESULT اجباری است، و سپس سوکت را ببندند. نتیجه search (RESULT) باید پیش از خود مدخل‌ها را در قالب LDIF داشته باشد، که هر مدخل با یک خط خالی دنبال می‌شود. خطوطی که با `#' یا `DEBUG:' شروع می‌شوند نادیده گرفته می‌شوند.

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

اگر sockresps شامل result یا search باشد، روکش همچنین پیام‌های پاسخ را به برنامه خارجی ارسال خواهد کرد (همچنین بخش محدودیت‌های شناخته‌شده را ببینید). این پیام‌ها به ترتیب به شکل یک پیام گسترش‌یافته RESULT یا یک پیام ENTRY ظاهر خواهند شد؛ هر دو در زیر تعریف شده‌اند و انتظار نمی‌رود برنامه به این پیام‌ها پاسخ دهد.

پیام گسترش‌یافته RESULT مشابه پیام بالا است، اما همچنین شامل msgid و هرگونه اکستنشن (extension) پیکربندی‌شده می‌باشد:

RESULT
msgid: <message id>
code: <integer>
matched: <matched DN>
info: <text>
<blank line>

معمولاً هم به msgid و هم به connid برای تطبیق پیام نتیجه با یک درخواست نیاز خواهد بود. پیام ENTRY به این شکل است:

ENTRY
msgid: <message id>
<entry in LDIF format>
<blank line>

بکاند sock نتایج عملیات‌های گسترش‌یافته (extended operations) از یک برنامه خارجی را پردازش نمی‌کند.

اگر sockresps پیکربندی شده باشد، روکش sock برای تصمیم‌گیری درباره اینکه کدام پاسخ‌ها به برنامه خارجی فرستاده شوند، sockops یا sockdnpat را در نظر نمی‌گیرد؛ در عوض در حال حاضر همه پاسخ‌ها ارسال می‌شوند.

بکاند sock تمام قواعد معنایی ACL را همان‌طور که در slapd.access(5) توصیف شده رعایت نمی‌کند. به‌طور کلی، دسترسی به اشیاء با استفاده از یک شیء ساختگی (dummy) که فقط شامل DN است بررسی می‌شود؛ بنابراین قواعد دسترسی که به محتوای شیء متکی هستند رعایت نمی‌شوند. به‌طور دقیق:

عملیات add نیازی به دسترسی write (=w) به شبه‌ویژگی (pseudo-attribute) children مدخل والد ندارد.

عملیات bind نیازمند دسترسی auth (=x) به شبه‌ویژگی entry مدخلی است که هویت آن در حال ارزیابی است؛ دسترسی auth (=x) به اعتبارنامه‌ها (credentials) بررسی نمی‌شود، بلکه به برنامه زیرین واگذار می‌گردد.

عملیات compare نیازمند دسترسی compare (=c) به شبه‌ویژگی entry شیئی است که مقدار آن در حال بررسی است؛ دسترسی compare (=c) به ویژگی‌ای که مقدار آن بررسی می‌شود چک نمی‌گردد.

عملیات delete نیازی به دسترسی write (=w) به شبه‌ویژگی children مدخل والد ندارد.

عملیات modify نیازمند دسترسی write (=w) به شبه‌ویژگی entry است؛ دسترسی write (=w) به ویژگی‌های خاصی که تغییر می‌یابند بررسی نمی‌شود.

عملیات modrdn نیازی به دسترسی write (=w) به شبه‌ویژگی children مدخل والد، یا والد جدید در صورت تفاوت ندارد؛ دسترسی write (=w) به مقادیر متمایز ویژگی‌های نام‌گذاری بررسی نمی‌شود.

عملیات search نیازی به دسترسی search (=s) به شبه‌ویژگی entry از searchBase ندارد؛ دسترسی search (=s) به ویژگی‌ها و مقادیر استفاده‌شده در فیلتر بررسی نمی‌شود.

عملیات extended به هیچ حق دسترسی ویژه‌ای نیاز ندارد. برنامه خارجی باید هرگونه کنترل دسترسی را خود پیاده‌سازی کند.

یک اسکریپت نمونه در دایرکتوری slapd/back-sock/ در درخت سورس‌کد OpenLDAP وجود دارد.

/etc/openldap/slapd.conf
فایل پیکربندی پیش‌فرض slapd

slapd.conf(5), slapd-config(5), slapd(8).

Brian Candler، همراه با بهبودهایی توسط Howard Chu

2026/03/09 OpenLDAP 2.6.13