| PGSQL_TABLE(5) | File Formats Manual | PGSQL_TABLE(5) |
نام (NAME)
pgsql_table - پیکربندی کلاینت PostgreSQL در Postfix
خلاصه دستور (SYNOPSIS)
postmap -q "string" pgsql:/etc/postfix/filename postmap -q - pgsql:/etc/postfix/filename <inputfile
توضیحات (DESCRIPTION)
سیستم ایمیل Postfix از جدولهای اختیاری برای بازنویسی نشانی یا مسیریابی ایمیل استفاده میکند. این جدولها معمولاً در قالبهای lmdb:، cdb:، hash: یا dbm: هستند.
بهعنوان روش جایگزین، جدولهای جستجو میتوانند بهصورت پایگاههای داده PostgreSQL مشخص شوند. برای اطلاع از اینکه سیستم Postfix شما از چه نوع جدولهای جستجویی پشتیبانی میکند، از دستور "postconf -m" استفاده کنید.
بهمنظور استفاده از جستجوهای PostgreSQL، یک منبع PostgreSQL را بهصورت جدول جستجو در main.cf تعریف کنید، برای نمونه:
alias_maps = pgsql:/etc/postfix/pgsql-aliases.cf
فایل /etc/postfix/pgsql-aliases.cf همان قالبی را دارد که فایل main.cf در Postfix داراست، و میتواند پارامترهای شرحدادهشده در زیر را مشخص کند.
عضویت در فهرست (LIST MEMBERSHIP)
هنگام استفاده از SQL برای ذخیره فهرستهایی نظیر $mynetworks، $mydestination، $relay_domains، $local_recipient_maps و غیره، درک این نکته اهمیت دارد که جدول باید هر عضو فهرست را بهصورت یک کلید جداگانه ذخیره کند. جستجوی جدول *وجود داشتن* کلید را اعتبارسنجی میکند. برای بحث بیشتر، به بخش "Postfix lists versus tables" در سند DATABASE_README مراجعه کنید.
جدولهایی ایجاد نکنید که فهرست کامل دامنهها را در $mydestination یا $relay_domains و غیره، یا نشانیهای IP را در $mynetworks بازگردانند.
جدولها را با قرار دادن هر مورد منطبق بهصورت یک کلید و با یک مقدار دلخواه ایجاد کنید. در پایگاههای داده SQL غیرمعمول نیست که خود کلید یا یک مقدار ثابت بازگردانده شود.
پارامترهای PGSQL (PGSQL PARAMETERS)
- hosts
- میزبانهایی
که Postfix تلاش
خواهد کرد
به آنها
متصل شده و
پرسوجو
انجام دهد.
علاوه بر URI
اتصال PostgreSQL،
این تنظیم
از شکلهای
قدیمی unix:/pathname
برای
سوکتهای
دامنه
یونیکس (UNIX-domain) و
inet:host:port برای
اتصالهای
TCP پشتیبانی
میکند، که
در آنها
پیشوندهای
unix: و inet:
پذیرفته
شده و برای
سازگاری با
گذشته
نادیده
گرفته
میشوند.
نمونهها:
hosts = postgresql://username@example.com/databasename?sslmode=require hosts = postgres://user:secret@localhost hosts = inet:host1.some.domain inet:host2.some.domain:port hosts = host1.some.domain host2.some.domain:port hosts = unix:/file/name
برای نحو پشتیبانیشده URI اتصال، به نشانی https://www.postgresql.org/docs/current/libpq-connect.html مراجعه کنید.
میزبانها به ترتیب تصادفی آزمایش میشوند. اتصالها پس از حدود ۱ دقیقه بیکار بودن بهطور خودکار بسته میشوند و در صورت نیاز مجدداً باز خواهند شد. برای جزئیات بیشتر به idle_interval مراجعه کنید.
نکته: اگر تنظیم hosts یک URI اتصال PostgreSQL را مشخص کند، کلاینت PostgreSQL در Postfix تنظیمات dbname، user و password را برای آن اتصال نادیده خواهد گرفت.
نکته: اگر تنظیم hosts تنها یک سرور را مشخص کند، این کلاینت فرض میکند که مقصد یک متعادلکننده بار (load balancer) است و پس از یک خرابی منفرد بلافاصله دوباره متصل میشود. در نسخههای 3.9 و پیشین Postfix، همان سرور را دوبار مشخص کنید.
- user
- password
- نام کاربری
و گذرواژه
برای ورود
به سرور pgsql.
نمونه:
user = someone password = some_password
تنظیمات user و password برای اتصالهای hosts که بهصورت یک URI مشخص شدهاند، نادیده گرفته میشوند.
- dbname
- نام پایگاه
داده روی
سرورها.
نمونه:
dbname = customer_database
تنظیم dbname برای اتصالهای hosts که بهصورت یک URI مشخص شدهاند، نادیده گرفته میشود.
تنظیم dbname در Postfix نسخه 3.10 و بالاتر، هنگامی که hosts هرگونه اتصال غیر URI را مشخص کرده باشد، الزامی است؛ این تنظیم در نسخههای پیشین Postfix همواره الزامی است.
- encoding
- کدگذاری
مورداستفاده
توسط
کلاینت
پایگاه
داده. تنظیم
پیشفرض
عبارت است
از:
encoding = UTF8
از نظر تاریخی، کلاینت پایگاه داده بهصورت ثابت برای استفاده از LATIN1 کدنویسی شده بود تا پشتیبانی از نویسههای چندبایتی غیرفعال شود.
این قابلیت در Postfix نسخه 3.8 و بالاتر در دسترس است.
- idle_interval (پیشفرض: 60)
- تعداد
ثانیههایی
که پس از آن
یک اتصال
پایگاه
داده بیکار
بسته خواهد
شد.
این قابلیت در Postfix نسخه 3.9 و بالاتر در دسترس است.
- retry_interval (پیشفرض: 60)
- تعداد
ثانیههایی
که پس از
بروز یک
خطا، از
اتصال
پایگاه
داده
صرفنظر
خواهد شد.
نکته: اگر تنظیم hosts تنها یک سرور را مشخص کند، این کلاینت فرض میکند که مقصد یک متعادلکننده بار است و پس از یک خرابی منفرد بلافاصله دوباره متصل میشود. در نسخههای 3.9 و پیشین Postfix، همان سرور را دوبار مشخص کنید.
این قابلیت در Postfix نسخه 3.9 و بالاتر در دسترس است.
- query
- الگوی
پرسوجوی SQL
مورداستفاده
برای جستجو
در پایگاه
داده، که در
آن %s
جایگزینی
برای
نشانیای
است که Postfix در
تلاش برای
تحلیل آن
است، برای
نمونه:
query = SELECT replacement FROM aliases WHERE mailbox = '%s'
این پارامتر از بسطهای '%' زیر پشتیبانی میکند:
- %%
- این مورد با یک نویسه پیشپاافتاده '%' جایگزین میشود. (Postfix 2.2 و بالاتر)
- %s
- این مورد با کلید ورودی جایگزین میشود. نقلقولگذاری SQL (SQL quoting) استفاده میشود تا اطمینان حاصل گردد که کلید ورودی نویسههای متا (metacharacters) غیرمنتظره اضافه نمیکند.
- %u
- هنگامی که کلید ورودی یک نشانی به شکل user@domain باشد، %u با بخش محلی (local part) نشانی که نقلقولگذاری SQL شده جایگزین میشود. در غیر این صورت، %u با کل رشته جستجو جایگزین میشود. اگر بخش محلی خالی باشد، پرسوجو متوقف شده و هیچ نتیجهای برنمیگرداند.
- %d
- هنگامی که کلید ورودی یک نشانی به شکل user@domain باشد، %d با بخش دامنه نشانی که نقلقولگذاری SQL شده جایگزین میشود. در غیر این صورت، پرسوجو متوقف شده و هیچ نتیجهای برنمیگرداند.
- %[SUD]
- معادلهای با حروف بزرگ بسطهای بالا در پارامتر query رفتاری کاملاً همسان با همتایان حروف کوچک خود دارند. با پارامتر result_format (زیر را ببینید)، آنها بهجای مقدار نتیجه، کلید ورودی را بسط میدهند.
- بسطهای %S، %U و %D بالا در Postfix نسخه 2.2 و بالاتر در دسترس هستند.
- %[1-9]
- الگوهای %1، %2، ... %9 با مؤلفه متناظر با بیشترین اهمیت از دامنه کلید ورودی جایگزین میشوند. اگر کلید ورودی user@mail.example.com باشد، آنگاه %1 برابر با com، %2 برابر با example و %3 برابر با mail است. اگر کلید ورودی بدون صلاحیت (unqualified) باشد یا مؤلفههای دامنه کافی برای برآورده کردن تمام الگوهای مشخصشده نداشته باشد، پرسوجو متوقف شده و هیچ نتیجهای برنمیگرداند.
- بسطهای %1، ... %9 بالا در Postfix نسخه 2.2 و بالاتر در دسترس هستند.
- پارامتر domain
شرح داده
شده در زیر،
کلیدهای
ورودی را به
نشانیهای
دامنههای
منطبق
محدود
میکند.
هنگامی که
پارامتر domain
خالی
نباشد،
پرسوجوهای
SQL برای
نشانیهای
فاقد نام
دامنه کامل
یا
نشانیهای
موجود در
دامنههای
غیرمنطبق
متوقف شده و
هیچ
نتیجهای
بازنمیگردانند.
تقدم این پارامتر با Postfix نسخه 2.2 تغییر کرده است؛ در نسخههای پیشین تقدم از بالاترین به پایینترین عبارت بود از: select_function، query، select_field، ...
با Postfix نسخه 2.2 پارامتر query بالاترین تقدم را دارد، به بخش رابطهای پرسوجوی منسوخ در زیر مراجعه کنید.
نکته: دور پارامتر query علامت نقلقول قرار ندهید.
- result_format (پیشفرض: %s)
- الگوی قالب اعمالشده بر ویژگیهای نتیجه. معمولاً برای افزودن متن به انتها (یا ابتدا) نتیجه استفاده میشود. این پارامتر از بسطهای '%' زیر پشتیبانی میکند:
- %%
- این مورد با یک نویسه پیشپاافتاده '%' جایگزین میشود.
- %s
- این مورد با مقدار ویژگی نتیجه جایگزین میشود. هنگامی که نتیجه خالی باشد، از آن صرفنظر میشود.
- %u
- هنگامی که مقدار ویژگی نتیجه نشانیای به شکل user@domain باشد، %u با بخش محلی نشانی جایگزین میشود. هنگامی که نتیجه بخش محلی خالی داشته باشد، از آن صرفنظر میشود.
- %d
- هنگامی که مقدار ویژگی نتیجه نشانیای به شکل user@domain باشد، %d با بخش دامنه مقدار ویژگی جایگزین میشود. هنگامی که نتیجه فاقد دامنه باشد، از آن صرفنظر میشود.
- %[SUD1-9]
- بسطهای حروف بزرگ و ارقام دهدهی بهجای نتیجه، بخشهایی از کلید ورودی را در متن درج میکنند. رفتار آنها مشابه همان است که در مورد query شرح داده شد، و در واقع از آنجا که کلید ورودی از قبل مشخص است، پرسوجوهایی که کلید آنها شامل تمام اطلاعات مشخصشده در الگوی نتیجه نباشد متوقف شده و هیچ نتیجهای برنمیگردانند.
- برای
نمونه،
استفاده از
"result_format = smtp:[%s]"
امکان
استفاده از
ویژگی mailHost را
بهعنوان
مبنایی
برای جدول
transport(5) فراهم
میکند. پس
از اعمال
قالب
نتیجه،
مقادیر
چندگانه
بهصورت
رشتههای
جداشده با
کاما به هم
متصل
میشوند.
پارامتر expansion_limit
که در ادامه
توضیح داده
شده است،
اجازه
میدهد
تعداد
مقادیر در
نتیجه
محدود شود،
که بهویژه
برای
نگاشتهایی
که باید
حداکثر یک
مقدار
بازگردانند
مفید است.
مقدار پیشفرض %s مشخص میکند که هر مقدار نتیجه باید همانگونه که هست استفاده شود.
این پارامتر در Postfix نسخه 2.2 و بالاتر در دسترس است.
نکته: دور قالب نتیجه (result format) نقلقول قرار ندهید!
- domain (پیشفرض: بدون فهرست دامنه)
- این
گزینهای
است شامل
فهرستی از
نامهای
دامنه،
مسیرهای
فایلها،
یا
پایگاههای
داده "type:table". در
صورت
تعیین،
تنها
کلیدهای
جستجوی
واجد شرایط
کامل با بخش
محلی
*غیرخالی* و
دامنه
منطبق،
واجد شرایط
جستجو
هستند:
جستجوهای
'user'،
جستجوهای
صرفاً
دامنه و
جستجوهای
"@domain" انجام
نمیشوند.
این امر
میتواند
بار
پرسوجو
روی سرور PostgreSQL
را بهطور
چشمگیری
کاهش دهد.
domain = postfix.org, hash:/etc/postfix/searchdomains
بهتر است از SQL برای ذخیره دامنههای واجد شرایط جستجوهای SQL استفاده نشود.
این پارامتر در Postfix نسخه 2.2 و بالاتر در دسترس است.
نکته: این پارامتر را برای نامهای مستعار local(8) تعریف نکنید، زیرا کلیدهای ورودی همیشه بدون صلاحیت (unqualified) هستند.
- expansion_limit (پیشفرض: 0)
- محدودیتی برای تعداد کل عناصر نتیجه بازگرداندهشده (بهصورت یک فهرست جداشده با کاما) توسط یک جستجو در نگاشت. مقدار صفر محدودیت را غیرفعال میکند. در صورت فراتر رفتن از حد مجاز، جستجوها با یک خطای موقت مواجه میشوند. تنظیم این محدودیت روی 1 تضمین میکند که جستجوها مقادیر چندگانه بازنگردانند.
پارامترهای منسوخ MAIN.CF (OBSOLETE MAIN.CF PARAMETERS)
برای سازگاری با سایر جدولهای جستجوی Postfix، پارامترهای PostgreSQL را میتوان در main.cf نیز تعریف کرد. برای این کار، بهعنوان منبع PostgreSQL نامی را مشخص کنید که با یک اسلش یا نقطه شروع نشود. سپس پارامترهای PostgreSQL با نامی که برای منبع در تعریف آن تعیین کردهاید، یک زیرخط (_) و نام پارامتر در دسترس خواهند بود. برای نمونه، اگر نگاشت بهصورت "pgsql:pgsqlname" مشخص شود، پارامتر "hosts" در main.cf بهصورت "pgsqlname_hosts" تعریف خواهد شد.
نکته: با این شیوه، گذرواژههای منابع PostgreSQL در main.cf نوشته میشوند که معمولاً برای همگان قابل خواندن است. پشتیبانی از این شیوه در نسخههای آینده Postfix حذف خواهد شد.
رابطهای پرسوجوی منسوخ (OBSOLETE QUERY INTERFACES)
این بخش رابطهای پرسوجویی را شرح میدهد که از نسخه 2.2 به بعد Postfix منسوخ شدهاند. لطفاً به رابط جدید query مهاجرت کنید زیرا رابطهای قدیمی در آستانه حذف تدریجی قرار دارند.
- select_function
- این
پارامتر
نام تابع
پایگاه
داده را
مشخص
میکند.
نمونه:
select_function = my_lookup_user_alias
این معادل است با:
query = SELECT my_lookup_user_alias('%s')این پارامتر فیلدهای قدیمی مرتبط با جدول (که در زیر آمده) را بازنویسی و لغو میکند. در نسخههای پیش از 2.2 Postfix، پارامتر query را نیز لغو میکرد. از نسخه 2.2 Postfix، پارامتر query بالاترین تقدم را دارد و پارامتر select_function منسوخ شده است.
پارامترهای زیر (با اولویت پایینتر نسبت به رابط select_function شرح داده شده در بالا) میتوانند برای ساخت عبارت select در SQL بهصورت زیر استفاده شوند:
SELECT [select_field]
FROM [table]
WHERE [where_field] = '%s'
[additional_conditions]
مشخصکننده %s در هر جستجو با کلید جستجو جایگزین میشود و اسکیپ میشود تا در صورتی که شامل علامت نقلقول تکی یا سایر نویسههای غیرمعمول باشد، باعث بروز خطای تجزیه و بدتر از آن، مشکل امنیتی نگردد.
با شروع از Postfix 2.2، این رابط با رابط عمومیتر query که در بالا شرح داده شد جایگزین و منسوخ شده است. در صورت تعریف پارامترهای با تقدم بالاتر query یا select_function شرح داده شده در بالا، پارامترهای شرحدادهشده در اینجا نادیده گرفته میشوند.
- select_field
- پارامتر
"select" در SQL.
نمونه:
select_field = forw_addr
- table
- نام جدول "select ..
from" در SQL. نمونه:
table = mxaliases
- where_field
- پارامتر "select ..
where" در SQL.
نمونه:
where_field = alias
- additional_conditions
- شرایط
اضافی برای
پرسوجوی SQL.
نمونه:
additional_conditions = AND status = 'paid'
همچنین ببینید (SEE ALSO)
postmap(1)، مدیر جدولهای جستجوی Postfix postconf(5)، پارامترهای پیکربندی ldap_table(5)، جدولهای جستجوی LDAP mysql_table(5)، جدولهای جستجوی MySQL sqlite_table(5)، جدولهای جستجوی SQLite
فایلهای README (README FILES)
از "postconf readme_directory" یا "postconf html_directory" برای یافتن مکان این اطلاعات استفاده کنید.
DATABASE_README، نمای کلی جدول جستجوی Postfix PGSQL_README، راهنمای کلاینت PostgreSQL در Postfix
مجوز (LICENSE)
مجوز نرمافزار ایمن (Secure Mailer license) باید همراه با این نرمافزار توزیع شود.
تاریخچه (HISTORY)
پشتیبانی از PgSQL با نسخه 2.1 نرمافزار Postfix معرفی شد.
نویسندگان (AUTHORS)
بر پایه کلاینت MySQL توسط: Scott Cotton, Joshua Marcus IC Group, Inc. پورتشده به PostgreSQL توسط: Aaron Sethman بهبودهای بعدی توسط: Liviu Daia Institute of Mathematics of the Romanian Academy P.O. BOX 1-764 RO-014700 Bucharest, ROMANIA