.TH REGEXP_TABLE 5 .ad .fi .SH "نام (NAME)" regexp_table \- قالب جدول‌های عبارات باقاعده در Postfix .SH "خلاصه دستور (SYNOPSIS)" .na .nf \fBpostmap \-q "\fIstring\fB" regexp:/etc/postfix/\fIfilename\fR \fBpostmap \-q \- regexp:/etc/postfix/\fIfilename\fB <\fIinputfile\fR .SH "توضیحات (DESCRIPTION)" .ad .fi سیستم ایمیل Postfix از جدول‌های اختیاری برای بازنویسی نشانی‌ها یا مسیریابی نامه‌ها استفاده می‌کند. این جدول‌ها معمولاً در قالب‌های \fBlmdb:\fR، \fBcdb:\fR، \fBhash:\fR، یا \fBdbm:\fR هستند. به‌عنوان جایگزین، جدول‌های جستجو می‌توانند در قالب عبارات باقاعده POSIX مشخص شوند. در این حالت، هر ورودی با فهرستی از الگوها مقایسه می‌شود. هنگام یافتن تطابق، نتیجه متناظر بازگردانده می‌شود و جستجو خاتمه می‌یابد. برای آگاهی از انواع جدول‌های جستجوی پشتیبانی‌شده در سیستم Postfix خود، از دستور "\fBpostconf \-m\fR" استفاده کنید. برای آزمودن جدول‌های جستجو، از دستور "\fBpostmap \-q\fR" مطابق آنچه در خلاصه دستور در بالا آمده استفاده کنید. از "\fBpostmap \-hmq \-\fR <\fIfile\fR" برای الگوهای header_checks(5)، و از "\fBpostmap \-bmq \-\fR <\fIfile\fR" برای body_checks(5) (در Postfix نسخه 2.6 و بالاتر) استفاده کنید. .SH "سازگاری (COMPATIBILITY)" .na .nf .ad .fi در نسخه 2.2 و پیشین Postfix، گزینه "\fBpostmap \-fq\fR" را برای پرس‌وجو از جدولی شامل الگوهای حساس به حروف بزرگ و کوچک مشخص کنید. الگوها به‌طور پیش‌فرض به بزرگی و کوچکی حروف حساس نیستند. .SH "قالب جدول (TABLE FORMAT)" .na .nf .ad .fi شکل کلی یک جدول عبارت باقاعده Postfix به صورت زیر است: .IP "\fB/\fIpattern\fB/\fIflags result\fR" هنگامی که \fIpattern\fR با رشته ورودی مطابقت داشته باشد، مقدار متناظر \fIresult\fR را استفاده کن. .IP "\fB!/\fIpattern\fB/\fIflags result\fR" هنگامی که \fIpattern\fR با رشته ورودی مطابقت \fBنداشته باشد\fR، مقدار متناظر \fIresult\fR را استفاده کن. .IP "\fBif /\fIpattern\fB/\fIflags\fR" .IP "\fBendif\fR" اگر رشته ورودی با /\fIpattern\fR/ مطابقت داشته باشد، آن رشته ورودی را با الگوهای میان \fBif\fR و \fBendif\fR مقایسه کن. بلوک‌های \fBif\fR..\fBendif\fR می‌توانند تودرتو باشند. .sp نکته: در الگوهای داخل \fBif\fR..\fBendif\fR فاصله خالی در ابتدا اضافه نکنید. .sp این قابلیت در Postfix نسخه 2.1 و بالاتر در دسترس است. .IP "\fBif !/\fIpattern\fB/\fIflags\fR" .IP "\fBendif\fR" اگر رشته ورودی با /\fIpattern\fR/ مطابقت نداشته باشد، آن رشته ورودی را با الگوهای میان \fBif\fR و \fBendif\fR مقایسه کن. بلوک‌های \fBif\fR..\fBendif\fR می‌توانند تودرتو باشند. .sp نکته: در الگوهای داخل \fBif\fR..\fBendif\fR فاصله خالی در ابتدا اضافه نکنید. .sp این قابلیت در Postfix نسخه 2.1 و بالاتر در دسترس است. .IP "خطوط خالی و توضیحات" خطوط خالی و خطوطی که فقط حاوی فاصله سفید هستند نادیده گرفته می‌شوند، همچنین خطوطی که نخستین نویسه غیرفاصله آن‌ها `#' باشد. .IP "متن چندخطی" یک خط منطقی با متنی غیر از فاصله سفید آغاز می‌شود. خطی که با فاصله سفید آغاز گردد، خط منطقی قبلی را ادامه می‌دهد. .PP هر الگو یک عبارت باقاعده POSIX است که در میان دو نویسه جداکننده قرار می‌گیرد. نحو عبارات باقاعده در \fBre_format\fR(7) در 4.4BSD، در \fBregex\fR(5) در Solaris، و در \fBregex\fR(7) در Linux مستند شده است. سیستم‌های دیگر ممکن است از نام‌های اسناد دیگری استفاده کنند. جداکننده عبارت می‌تواند هر نویسه غیرالفبایی\-عددی باشد، به‌جز فاصله سفید یا نویسه‌هایی با معنای خاص (به‌طور سنتی از اسلش استفاده می‌شود). عبارت باقاعده می‌تواند حاوی فاصله سفید باشد. به‌طور پیش‌فرض، تطابق به بزرگی و کوچکی حروف حساس نیست و خطوط جدید به‌عنوان نویسه‌های خاص تلقی نمی‌شوند. این رفتار توسط فلگ‌ها کنترل می‌شود که با افزودن یک یا چند مورد از نویسه‌های زیر پس از الگو تغییر می‌یابند: .IP "\fBi\fR (پیش‌فرض: روشن)" فلگ حساسیت به بزرگی و کوچکی حروف را تغییر می‌دهد. به‌طور پیش‌فرض، تطابق حساس به حروف نیست. .IP "\fBm\fR (پیش‌فرض: خاموش)" فلگ حالت چندخطی را تغییر می‌دهد. هنگام روشن بودن این فلگ، نویسه‌های خاص \fB^\fR و \fB$\fR علاوه بر تطابق در ابتدا و انتهای رشته ورودی، به‌ترتیب بلافاصله پس از و بلافاصله پیش از یک نویسه خط جدید نیز مطابقت می‌یابند. .IP "\fBx\fR (پیش‌فرض: روشن)" فلگ نحو عبارات گسترده را تغییر می‌دهد. به‌طور پیش‌فرض، پشتیبانی از نحو عبارات گسترده فعال است. .SH "ترتیب جستجوی جدول (TABLE SEARCH ORDER)" .na .nf .ad .fi الگوها به ترتیبی که در جدول مشخص شده‌اند اعمال می‌شوند، تا زمانی که الگویی منطبق با رشته ورودی پیدا شود. هر الگو روی کل رشته ورودی اعمال می‌شود. بسته به کاربرد، این رشته کل نام میزبان کلاینت، کل نشانی IP کلاینت، یا کل نشانی ایمیل است. بنابراین، هیچ جستجویی در دامنه والد یا شبکه والد انجام نمی‌شود، و نشانی‌های ایمیل \fIuser@domain\fR به بخش‌های تشکیل‌دهنده \fIuser\fR و \fIdomain\fR تجزیه نمی‌شوند، و همچنین \fIuser+foo\fR به \fIuser\fR و \fIfoo\fR تفکیک نمی‌گردد. .SH "جایگزینی متن (TEXT SUBSTITUTION)" .na .nf .ad .fi جایگزینی زیررشته‌ها (متنی که با الگوهای درون "()" مطابقت دارد) از عبارت منطبق‌شده در رشته نتیجه با $1، $2 و غیره درخواست می‌شود؛ برای تولید نویسه $ در خروجی، $$ را مشخص کنید. اگر ماکروها در رشته نتیجه با فاصله سفید دنبال نشوند، ممکن است نیاز باشد به‌صورت ${n} یا $(n) نوشته شوند. نکته: از آنجا که الگوهای نفی‌شده (آن‌هایی که پیش از آن‌ها \fB!\fR قرار دارد) زمانی که عبارت تطابق ندارد نتیجه را بازمی‌گردانند، جایگزینی‌ها برای الگوهای نفی‌شده در دسترس نیستند. .SH "مشخص‌سازی درون‌خطی (INLINE SPECIFICATION)" .na .nf .ad .fi محتوای یک جدول ممکن است در نام جدول مشخص شود (در Postfix نسخه 3.7 و بالاتر). نحو پایه عبارت است از: .nf main.cf: \fIparameter\fR \fB= .. regexp:{ { \fIrule\-1\fB }, { \fIrule\-2\fB } .. } ..\fR master.cf: \fB.. \-o { \fIparameter\fR \fB= .. regexp:{ { \fIrule\-1\fB }, { \fIrule\-2\fB } .. } .. } ..\fR .fi نرم‌افزار Postfix به‌طور بازگشتی نمونه‌های \fi$parametername\fR در مقدار پارامتر فوق را بسط می‌دهد، فاصله‌های خالی بعد از '{' و قبل از '}' را نادیده می‌گیرد، و هر \fIrule\fR را به‌عنوان یک خط متنی در یک فایل درون‌حافظه می‌نویسد: .nf in\-memory file: rule\-1 rule\-2 .. .fi سپس Postfix نتیجه را طوری تجزیه می‌کند که گویی فایلی در /etc/postfix است. .SH "هشدارهای مشخص‌سازی درون‌خطی (INLINE SPECIFICATION CAVEATS)" .na .nf .ad .fi .IP \(bu از استفاده از \fI$parametername\fR در داخل یک الگوی درون‌خطی :regexp خودداری کنید. این الگو در صورت وجود نویسه‌های خاص مانند '.' در بسط \fI$parametername\fR ممکن است تطابق‌های غیرمنتظره‌ای ایجاد کند. برای جلوگیری از تطابق‌های غیرمنتظره، از یک جدول :pcre استفاده کرده و \eQ\fI$parametername\fR\eE را مشخص کنید. .IP \(bu هنگامی که یک قاعده درون‌خطی باید شامل \fB$\fR باشد، \fB$$\fR را مشخص کنید تا مانع از تلاش Postfix برای انجام بسط \fI$name\fR هنگام ارزیابی مقدار پارامتر شود. برای بررسی یک پیکربندی درون‌خطی، از گزینه "\fBpostconf \-x\fR" به‌صورت زیر استفاده کنید: .RS .IP \(bu هنگامی که تنظیم "\fIparametername = \fI value\fR" در main.cf شامل یک جدول درون‌خطی :regexp باشد، از دستور "\fBpostconf \-x \fIparametername\fR" استفاده کنید. بررسی کنید که هیچ هشدار "undefined parameter" وجود نداشته باشد، و خروجی دارای نحوی باشد که در یک فایل :regexp غیردرون‌خطی Postfix استفاده می‌شود. .IP \(bu هنگامی که بازنویسی "\fB\-o { \fIparametername = value\fB }\fR" در master.cf شامل یک جدول درون‌خطی :regexp باشد، از دستور "\fBpostconf \-Px '*/*/\fIparametername\fB' \fR" استفاده کنید. بررسی کنید که هیچ هشدار "undefined parameter" وجود نداشته باشد، و خروجی دارای نحوی باشد که در یک فایل :regexp غیردرون‌خطی Postfix استفاده می‌شود. .RE .SH "مثال نگاشت دسترسی SMTPD (EXAMPLE SMTPD ACCESS MAP)" .na .nf # عدم اجازه به مسیریابی مشخص‌شده توسط فرستنده. در صورت رله ایمیل # برای دامنه‌های دیگر، این مورد الزامی است. /[%!@].*[%!@]/ 550 Sender\-specified routing rejected # نشانی postmaster مشکلی ندارد، تا بتوانند درباره نحوه رفع # مشکل خود با ما گفتگو کنند. /^postmaster@/ OK # محافظت از گسترش‌دهنده‌های majordomo خروجی شما if !/^owner\-/ /^(.*)\-outgoing@(.*)$/ 550 Use ${1}@${2} instead endif .SH "مثال نگاشت فیلتر سرایند (EXAMPLE HEADER FILTER MAP)" .na .nf # این موارد زمانی در ایمیل‌های هرزنامه رایج بودند. /^Subject: make money fast/ REJECT /^To: friend@public\\.com/ REJECT .SH "مثال نگاشت فیلتر بدنه (EXAMPLE BODY FILTER MAP)" .na .nf # ابتدا متن کدگذاری‌شده base 64 را برای صرفه‌جویی در چرخه‌های CPU نادیده بگیرید. ~^[[:alnum:]+/]{60,}$~ OK # الگوهای بدنه خود را اینجا قرار دهید. .SH "همچنین ببینید (SEE ALSO)" .na .nf postmap(1), Postfix lookup table manager pcre_table(5), format of PCRE tables cidr_table(5), format of CIDR tables .SH "فایل‌های README (README FILES)" .na .nf .ad .fi از "\fBpostconf readme_directory\fR" یا "\fBpostconf html_directory\fR" برای یافتن مکان این اطلاعات استفاده کنید. .na .nf DATABASE_README, Postfix lookup table overview .SH "نویسندگان (AUTHOR(S))" .na .nf کد جستجوی جدول regexp در ابتدا توسط: LaMont Jones lamont@hp.com نوشته شده است. آن کد بر پایه دیکشنری PCRE اهدایی از طرف: Andrew McNamara andrewm@connect.com.au connect.com.au Pty. Ltd. Level 3, 213 Miller St North Sydney, NSW, Australia بوده است. پذیرفته‌شده و انطباق‌یافته توسط: Wietse Venema IBM T.J. Watson Research P.O. Box 704 Yorktown Heights, NY 10598, USA Wietse Venema Google, Inc. 111 8th Avenue New York, NY 10011, USA