TINYLEAF(8) InterNetNews Documentation TINYLEAF(8)

tinyleaf - سرور ساده پروتکل NNTP برای انتقال مقالات

tinyleaf spool [processor]

برنامه tinyleaf به‌گونه‌ای طراحی شده است که ساده‌ترین سرور انتقال اخبار ممکن باشد و در عین حال عملکردی سودمند ارائه دهد. این برنامه باید تحت inetd(8) یا برنامه‌ای معادل آن اجرا شود و تنها سه دستور (HELP، IHAVE و QUIT) را پیاده‌سازی می‌کند. هنگامی که مقاله‌ای دریافت می‌شود، آن را در دایرکتوری spool ذخیره کرده و چنانچه processor مشخص شده باشد، اطلاعات مربوط به مقاله را از طریق یک لوله (pipe) به processor ارسال می‌کند. نام فایل مقاله برابر با هش MD5 شناسه پیام (message-ID) آن خواهد بود و در صورتی که فایلی با این نام از پیش موجود باشد، tinyleaf از پذیرش مقاله خودداری کرده و آن را به عنوان پیام تکراری گزارش می‌دهد.

چنانچه processor مشخص شده باشد، باید مسیر یک برنامه را تعیین کند. آن برنامه هنگام شروع به کار tinyleaf اجرا می‌شود و دایرکتوری کاری جاری آن spool خواهد بود. به ازای هر مقاله دریافت‌شده توسط tinyleaf، یک خط به ورودی استاندارد processor ارسال خواهد شد. این خط شامل نام فایل مقاله دریافت‌شده (به‌صورت نسبی نسبت به spool)، یک فاصله، و شناسه پیام (message-ID) مقاله دریافتی خواهد بود. توجه داشته باشید که شناسه پیام از آرگومان دستور IHAVE گرفته می‌شود و ممکن است با فیلد سرآیند Message-ID درون مقاله مطابقت نداشته باشد. هنگامی که tinyleaf متوقف شود، ورودی استاندارد processor بسته خواهد شد.

برنامه tinyleaf هیچ‌گونه اعتبارسنجی ساختاری روی مقالات دریافتی انجام نمی‌دهد؛ این برنامه صرفاً آن‌ها را ذخیره کرده و در صورت نیاز به processor تحویل می‌دهد. همچنین هرگز مقاله‌ها را حذف نمی‌کند؛ معمولاً هنگامی که عملیات مورد نیاز روی مقاله پایان یافت، processor باید اقدام به حذف آن نماید.

برنامه tinyleaf دستورات NNTP را از ورودی استاندارد دریافت کرده و پاسخ‌ها را به خروجی استاندارد می‌فرستد. اطلاعات وضعیت و هرگونه پیام خطا به خطای استاندارد ارسال می‌شوند. این برنامه هیچ‌گونه احراز هویتی انجام نمی‌دهد؛ هر نوع احراز هویت باید توسط inetd(8) یا برنامه‌های پوششی انجام پذیرد. (یک سازوکار ساده احراز هویت این است که tinyleaf از طریق tcpd(8) برگرفته از پوشش‌های TCP فراخوانی شده و از /etc/hosts.allow و /etc/hosts.deny برای محدود کردن کاربرانی که می‌توانند با سرور ارتباط برقرار کنند، استفاده شود.)

برنامه tinyleaf دارای حداکثر اندازه پیام ۱ مگابایت (در حال حاضر ثابت در کد) و محدودیت زمانی ده دقیقه (به‌طور مشابه ثابت در کد) برای هر دستور یا قطعه‌ای از داده‌های مقاله است.

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

سپس، خطی مانند زیر اضافه کنید:

nntp stream tcp nowait archive /usr/sbin/tcpd \
  <pathbin>/tinyleaf <pathspool>/tinyleaf <pathbin>/archive

(همگی در یک خط -- کاراکتر بک‌اسلش و شکستن خط در اینجا صرفاً برای خوانایی بهتر است) که در آن "archive" کاربری است که مالک بایگانی است، /usr/sbin/tcpd مسیر tcpd(8) است، pathbin/tinyleaf مسیر این برنامه است، pathspool/tinyleaf یک دایرکتوری موقت است که کاربر "archive" به آن دسترسی نوشتن دارد، و pathbin/archive مسیر اسکریپت archive شما است.

اکنون می‌توانید با استفاده از "/etc/hosts.allow" و "/etc/hosts.deny" دسترسی به tinyleaf را تنها به سرور خبری محلی خود محدود کرده و یک فید عادی از سرور به میزبان بایگانی، درست مانند هر سرور خبری دیگر، تنها برای گروه خبری که می‌خواهید بایگانی شود راه‌اندازی کنید.

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

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

محدودیت زمانی و حداکثر اندازه پیام واقعاً باید قابل پیکربندی باشند. همچنین tinyleaf احتمالاً نباید به هر دستوری به جز HELP، IHAVE و QUIT صرفاً پاسخ ۵۰۰ بدهد؛ کدهای خطای مفیدتر (و مورد انتظارتر) دیگری وجود دارند که می‌توانستند بازگردانده شوند.

وجود گزینه‌ای برای بررسی دایرکتوری spool هنگام راه‌اندازی به منظور یافتن فایل‌های باقیمانده و ارسال آن‌ها به پردازنده (processor) می‌تواند مفید باشد.

نوشته‌شده توسط Russ Allbery <eagle@eyrie.org> برای InterNetNews.

hosts_access(5), inetd(8), tcpd(8).

2022-07-10 INN 2.7.4