.\" -*- mode: troff; coding: utf-8 -*- .\" Automatically generated by Pod::Man 5.0102 (Pod::Simple 3.45) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. .ie n \{\ . ds C` "" . ds C' "" 'br\} .el\{\ . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "TINYLEAF 8" .TH TINYLEAF 8 2022-07-10 "INN 2.7.4" "InterNetNews Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "نام (NAME)" tinyleaf \- سرور ساده پروتکل NNTP برای انتقال مقالات .SH "خلاصه دستور (SYNOPSIS)" .IX Header "SYNOPSIS" \&\fBtinyleaf\fR \fIspool\fR [\fIprocessor\fR] .SH "توضیحات (DESCRIPTION)" .IX Header "DESCRIPTION" برنامه \&\fBtinyleaf\fR به‌گونه‌ای طراحی شده است که ساده‌ترین سرور انتقال اخبار ممکن باشد و در عین حال عملکردی سودمند ارائه دهد. این برنامه باید تحت inetd(8) یا برنامه‌ای معادل آن اجرا شود و تنها سه دستور (HELP، IHAVE و QUIT) را پیاده‌سازی می‌کند. هنگامی که مقاله‌ای دریافت می‌شود، آن را در دایرکتوری \fIspool\fR ذخیره کرده و چنانچه \fIprocessor\fR مشخص شده باشد، اطلاعات مربوط به مقاله را از طریق یک لوله (pipe) به \fIprocessor\fR ارسال می‌کند. نام فایل مقاله برابر با هش MD5 شناسه پیام (message-ID) آن خواهد بود و در صورتی که فایلی با این نام از پیش موجود باشد، \&\fBtinyleaf\fR از پذیرش مقاله خودداری کرده و آن را به عنوان پیام تکراری گزارش می‌دهد. .PP چنانچه \fIprocessor\fR مشخص شده باشد، باید مسیر یک برنامه را تعیین کند. آن برنامه هنگام شروع به کار \&\fBtinyleaf\fR اجرا می‌شود و دایرکتوری کاری جاری آن \fIspool\fR خواهد بود. به ازای هر مقاله دریافت‌شده توسط \&\fBtinyleaf\fR، یک خط به ورودی استاندارد \fIprocessor\fR ارسال خواهد شد. این خط شامل نام فایل مقاله دریافت‌شده (به‌صورت نسبی نسبت به \fIspool\fR)، یک فاصله، و شناسه پیام (message-ID) مقاله دریافتی خواهد بود. توجه داشته باشید که شناسه پیام از آرگومان دستور IHAVE گرفته می‌شود و ممکن است با فیلد سرآیند Message-ID درون مقاله مطابقت نداشته باشد. هنگامی که \&\fBtinyleaf\fR متوقف شود، ورودی استاندارد \fIprocessor\fR بسته خواهد شد. .PP برنامه \&\fBtinyleaf\fR هیچ‌گونه اعتبارسنجی ساختاری روی مقالات دریافتی انجام نمی‌دهد؛ این برنامه صرفاً آن‌ها را ذخیره کرده و در صورت نیاز به \fIprocessor\fR تحویل می‌دهد. همچنین هرگز مقاله‌ها را حذف نمی‌کند؛ معمولاً هنگامی که عملیات مورد نیاز روی مقاله پایان یافت، \fIprocessor\fR باید اقدام به حذف آن نماید. .PP برنامه \&\fBtinyleaf\fR دستورات NNTP را از ورودی استاندارد دریافت کرده و پاسخ‌ها را به خروجی استاندارد می‌فرستد. اطلاعات وضعیت و هرگونه پیام خطا به خطای استاندارد ارسال می‌شوند. این برنامه هیچ‌گونه احراز هویتی انجام نمی‌دهد؛ هر نوع احراز هویت باید توسط inetd(8) یا برنامه‌های پوششی انجام پذیرد. (یک سازوکار ساده احراز هویت این است که \&\fBtinyleaf\fR از طریق tcpd(8) برگرفته از پوشش‌های TCP فراخوانی شده و از \fI/etc/hosts.allow\fR و \fI/etc/hosts.deny\fR برای محدود کردن کاربرانی که می‌توانند با سرور ارتباط برقرار کنند، استفاده شود.) .PP برنامه \&\fBtinyleaf\fR دارای حداکثر اندازه پیام ۱ مگابایت (در حال حاضر ثابت در کد) و محدودیت زمانی ده دقیقه (به‌طور مشابه ثابت در کد) برای هر دستور یا قطعه‌ای از داده‌های مقاله است. .SH "مثال (EXAMPLE)" .IX Header "EXAMPLE" فرض کنید می‌خواهید مقالات خبری را روی یک میزبان خاص (مانند سرور FTP برای بایگانی گروه‌های خبری) بایگانی کنید که در آن بار و سربار راه‌اندازی یک سرور خبری کامل را نمی‌خواهید. برنامه‌ای بنویسید که در هر بار یک خط از ورودی استاندارد بخواند و هر آنچه پیش از نخستین فاصله قرار دارد را به عنوان نام فایل یک مقاله خبری برای بایگانی در نظر بگیرد. هر بار که برنامه یک خط را می‌خواند، باید آن فایل را بایگانی کرده و سپس حذف کند، و هنگام دریافت انتهای فایل (EOF) در ورودی استاندارد، خارج شود. .PP سپس، خطی مانند زیر اضافه کنید: .PP .Vb 2 \& nntp stream tcp nowait archive /usr/sbin/tcpd \e \& /tinyleaf /tinyleaf /archive .Ve .PP (همگی در یک خط \-\- کاراکتر بک‌اسلش و شکستن خط در اینجا صرفاً برای خوانایی بهتر است) که در آن \f(CW\*(C`archive\*(C'\fR کاربری است که مالک بایگانی است، \&\fI/usr/sbin/tcpd\fR مسیر tcpd(8) است، \fIpathbin\fR/tinyleaf مسیر این برنامه است، \&\fIpathspool\fR/tinyleaf یک دایرکتوری موقت است که کاربر \f(CW\*(C`archive\*(C'\fR به آن دسترسی نوشتن دارد، و \fIpathbin\fR/archive مسیر اسکریپت \fBarchive\fR شما است. .PP اکنون می‌توانید با استفاده از \f(CW\*(C`/etc/hosts.allow\*(C'\fR و \f(CW\*(C`/etc/hosts.deny\*(C'\fR دسترسی به \&\fBtinyleaf\fR را تنها به سرور خبری محلی خود محدود کرده و یک فید عادی از سرور به میزبان بایگانی، درست مانند هر سرور خبری دیگر، تنها برای گروه خبری که می‌خواهید بایگانی شود راه‌اندازی کنید. .PP توجه داشته باشید که اسکریپت بایگانی احتمالاً باید بررسی‌های اولیه ساختار و اعتبارسنجی را روی ورودی انجام دهد، زیرا \&\fBtinyleaf\fR این کار را انجام نمی‌دهد. .PP این کاربرد، انگیزه‌بخش توسعه اولیه این برنامه بوده است. .SH "اشکالات (BUGS)" .IX Header "BUGS" محدودیت زمانی و حداکثر اندازه پیام واقعاً باید قابل پیکربندی باشند. همچنین \&\fBtinyleaf\fR احتمالاً نباید به هر دستوری به جز HELP، IHAVE و QUIT صرفاً پاسخ ۵۰۰ بدهد؛ کدهای خطای مفیدتر (و مورد انتظارتر) دیگری وجود دارند که می‌توانستند بازگردانده شوند. .PP وجود گزینه‌ای برای بررسی دایرکتوری spool هنگام راه‌اندازی به منظور یافتن فایل‌های باقیمانده و ارسال آن‌ها به پردازنده (processor) می‌تواند مفید باشد. .SH "تاریخچه (HISTORY)" .IX Header "HISTORY" نوشته‌شده توسط Russ Allbery برای InterNetNews. .SH "همچنین ببینید (SEE ALSO)" .IX Header "SEE ALSO" hosts_access(5), inetd(8), tcpd(8).