rcmd(3)

الاسم
rcmd, rresvport, iruserok, ruserok, rcmd_af, rresvport_af, iruserok_af, ruserok_af - دوال لإرجاع دفق من أمر بعيد

المكتبة
مكتبة سي المعيارية (libc، -lc)

موجز
#include <netdb.h>    /* أو <unistd.h> في بعض الأنظمة */

int rcmd(char **restrict ahost, unsigned short inport,
            const char *restrict locuser,
            const char *restrict remuser,
            const char *restrict cmd, int *restrict fd2p);

int rresvport(int *port);

int iruserok(uint32_t raddr, int superuser,
            const char *ruser, const char *luser);
int ruserok(const char *rhost, int superuser,
            const char *ruser, const char *luser);

int rcmd_af(char **restrict ahost, unsigned short inport,
            const char *restrict locuser,
            const char *restrict remuser,
            const char *restrict cmd, int *restrict fd2p,
            sa_family_t af);

int rresvport_af(int *port, sa_family_t af);

int iruserok_af(const void *restrict raddr, int superuser,
            const char *restrict ruser, const char *restrict luser,
            sa_family_t af);
int ruserok_af(const char *rhost, int superuser,
            const char *ruser, const char *luser,
            sa_family_t af);

    متطلبات ماكروات اختبار الميزات لـ glibc (انظر feature_test_macros(7)):

rcmd(), rcmd_af(), rresvport(), rresvport_af(), iruserok(), iruserok_af(), ruserok(), ruserok_af():
    منذ glibc 2.19:
        _DEFAULT_SOURCE
    glibc 2.19 وما قبله:
        _BSD_SOURCE

الوصف
تستخدم الدالة rcmd() من قبل المستخدم الممتاز لتنفيذ أمر على جهاز بعيد باستخدام مخطط استيثاق يعتمد على أرقام المنافذ المميزة. تعيد الدالة rresvport() واصف ملف إلى مقبس بعنوان في فضاء المنفذ المميز. تستخدم الدالتان iruserok() و ruserok() من قبل الخوادم للاستيثاق من العملاء الذين يطلبون الخدمة مع rcmd(). تُستخدم جميع الدوال الأربع من قبل خادم rshd(8) (من بين آخرين).

  rcmd()
تبحث الدالة rcmd() عن المضيف *ahost باستخدام gethostbyname(3)، وتعيد -1 إذا لم يكن المضيف موجودًا. بخلاف ذلك، يُضبط *ahost إلى الاسم المعياري للمضيف ويُؤسس اتصال بخادم موجود في منفذ الإنترنت المعروف inport.

إذا نجح الاتصال، يُعاد مقبس في نطاق الإنترنت من نوع SOCK_STREAM إلى المستدعي، ويُعطى للأمر البعيد كـ stdin و stdout. إذا كان fd2p غير صفري، فسيُؤسس قناة مساعدة لعملية تحكم، ويُوضع واصف ملف لها في *fd2p. ستعيد عملية التحكم المخرجات التشخيصية من الأمر (الوحدة 2) على هذه القناة، وستقبل أيضًا بايتات على هذه القناة كأرقام إشارات UNIX، لتُمرر إلى مجموعة عملية الأمر. إذا كان fd2p هو 0، فسيُجعل stderr (الوحدة 2 من الأمر البعيد) مماثلاً لـ stdout ولا يُوفر أي ترتيب لإرسال إشارات عشوائية إلى العملية البعيدة، على الرغم من أنك قد تستطيع جذب انتباهها باستخدام بيانات خارج النطاق.

يُوصف البروتوكول بالتفصيل في rshd(8).

  rresvport()
تُستخدم الدالة rresvport() للحصول على مقبس بمنفذ مميز مربوط به. هذا المقبس مناسب للاستخدام من قبل rcmd() وعدة دوال أخرى. المنافذ المميزة هي تلك في النطاق من 0 إلى 1023. يُسمح فقط لعملية مميزة (على لينكس، عملية تمتلك القدرة CAP_NET_BIND_SERVICE في فضاء المستخدم الذي يحكم فضاء الشبكة الخاص بها) بربط منفذ مميز. في تنفيذ glibc، تقيد هذه الدالة بحثها إلى المنافذ من 512 إلى 1023. وسيط port هو قيمة-نتيجة: القيمة التي يزودها للاستدعاء تُستخدم كنقطة بداية لبحث دائري لنطاق المنفذ؛ عند العودة (الناجحة)، يحتوي على رقم المنفذ الذي تم ربطه.

  iruserok() و ruserok()
تأخذ الدالتان iruserok() و ruserok() عنوان IP أو اسم المضيف البعيد على التوالي، واسمي مستخدمين، وعلمًا يشير إلى ما إذا كان اسم المستخدم المحلي هو اسم المستخدم الممتاز. ثم، إذا كان المستخدم ليس المستخدم الممتاز، تتحقق من ملف /etc/hosts.equiv. إذا لم يُجرَ هذا البحث، أو كان غير ناجح، يُفحص ملف .rhosts في دليل المستخدم المحلي الرئيسي لمعرفة ما إذا كان طلب الخدمة مسموحًا به.

إذا لم يكن هذا الملف موجودًا، أو لم يكن ملفًا عاديًا، أو كان مملوكًا لشخص آخر غير المستخدم أو المستخدم الممتاز، أو كان قابلاً للكتابة من قبل أي شخص آخر غير المالك، أو كان مرتبطًا بشدة في أي مكان، يفشل الفحص آليًا. يُعاد صفر إذا كان اسم الآلة مدرجًا في ملف hosts.equiv، أو إذا وُجد المضيف واسم المستخدم البعيد في ملف .rhosts؛ بخلاف ذلك، تعيد iruserok() و ruserok() -1. إذا كان النطاق المحلي (كما يُحصل عليه من gethostname(2)) هو نفسه النطاق البعيد، فيجب تحديد اسم الآلة فقط.

إذا كان عنوان IP للمضيف البعيد معروفًا، فيجب استخدام iruserok() بدلاً من ruserok()، لأنها لا تتطلب الثقة في خادم DNS لنطاق المضيف البعيد.

  *_af() متغيرات
جميع الدوال الموصوفة أعلاه تعمل مع مقابس IPv4 (AF_INET). تأخذ متغيرات "_af" وسيطًا إضافيًا يسمح بتحديد عائلة عنوان المقبس. بالنسبة لهذه الدوال، يمكن تحديد الوسيط af كـ AF_INET أو AF_INET6. بالإضافة إلى ذلك، تدعم rcmd_af() استخدام AF_UNSPEC.

قيمة الإرجاع
ترجع الدالة rcmd() واصف مقبس صالح عند النجاح. ترجع -1 عند الخطأ وتطبع رسالة تشخيصية على الخطأ المعياري.

ترجع الدالة rresvport() واصف مقبس صالح ومربوط عند النجاح. عند الفشل، ترجع -1 وتضبط errno للإشارة إلى الخطأ. يُحمّل رمز الخطأ EAGAIN ليعني: "جميع منافذ الشبكة قيد الاستخدام".

لمعلومات حول القيمة المرجعة من ruserok() و iruserok()، انظر أعلاه.

السمات
للاطلاع على شرح للمصطلحات المستخدمة في هذا القسم، انظر attributes(7).
الواجهة | السمة | القيمة
rcmd(), rcmd_af() | سلامة الخيوط | غير آمن لتعدد الخيوط (MT-Unsafe)
rresvport(), rresvport_af() | سلامة الخيوط | MT-Safe
iruserok(), ruserok(), iruserok_af(), ruserok_af() | سلامة الخيوط | المنطقة (locale) آمنة لتعدد المسالك (MT-Safe)

المعايير
BSD.

التاريخ

iruserok_af()
rcmd_af()
rresvport_af()
ruserok_af()
    glibc 2.2.

Solaris، 4.2BSD. متغيرات "_af" هي إضافات أحدث، ولا توجد على نطاق واسع من الأنظمة.

العلل
iruserok() و iruserok_af() مُعلنتان في رؤوس glibc فقط منذ glibc 2.12.

انظر أيضًا
rlogin(1)، rsh(1)، rexec(3)، rexecd(8)، rlogind(8)، rshd(8)

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.