লিনাক্স ব্যবহারকারীদের যাচাই করার জন্য রেজেেক্স কী?


21

নতুন ব্যবহারকারী যুক্ত করার সময়, স্ট্রিংটি কীভাবে বৈধ হয়?

আমি মনে করি একটি নিয়মিত প্রকাশ আছে। নিয়মিত প্রকাশটি কী?

উত্তর:


12

ব্যবহারকারীর নামটির জন্য সাধারণ নিয়মটি এর দৈর্ঘ্যটি অবশ্যই 32 টি অক্ষরের চেয়ে কম হবে। বৈধ ব্যবহারকারীর নামটি কী তা তৈরি করতে এটি আপনার বিতরণের উপর নির্ভর করে।

ডেবিয়ানে, shadow-utils 4.1এখানে একটি is_valid_nameফাংশন রয়েছে chkname.c:

static bool is_valid_name (const char *name)
{
    /*
     * User/group names must match [a-z_][a-z0-9_-]*[$]
     */
    if (('\0' == *name) ||
        !((('a' <= *name) && ('z' >= *name)) || ('_' == *name))) {
        return false;
    }

    while ('\0' != *++name) {
        if (!(( ('a' <= *name) && ('z' >= *name) ) ||
              ( ('0' <= *name) && ('9' >= *name) ) ||
              ('_' == *name) ||
              ('-' == *name) ||
              ( ('$' == *name) && ('\0' == *(name + 1)) )
             )) {
            return false;
        }
    }

    return true;
}

এবং ব্যবহারকারীর দৈর্ঘ্য আগে পরীক্ষা করা হয়েছিল:

bool is_valid_user_name (const char *name)
{
    /*
     * User names are limited by whatever utmp can
     * handle.
     */
    if (strlen (name) > USER_NAME_MAX_LENGTH) {
        return false;
    }

    return is_valid_name (name);
}

15

ব্যবহারের ম্যান পৃষ্ঠা থেকে (8) :

সাধারণত কেবলমাত্র এমন ব্যবহারকারীর নাম ব্যবহার করার পরামর্শ দেওয়া হয় যা ছোট হাতের অক্ষর বা আন্ডারস্কোর দিয়ে শুরু হয়, তারপরে ছোট হাতের অক্ষর, অঙ্কগুলি, আন্ডারস্কোরগুলি বা ড্যাশগুলি অনুসরণ করে। তারা ডলারের সাইন দিয়ে শেষ করতে পারে। নিয়মিত অভিব্যক্তি শর্তাবলী: [a-z _] [a-z0-9 _-] * [$]?

ডেবিয়ানে, কেবলমাত্র সীমাবদ্ধতা হ'ল ব্যবহারকারীর নাম অবশ্যই ড্যাশ ('-') দিয়ে শুরু করা উচিত নয় বা কোনও কোলন (':') বা একটি শ্বেত স্পেস (স্পেস: '', রেখার শেষ: '\ n', ট্যাবুলেশন: ' \ t 'ইত্যাদি)। মনে রাখবেন যে স্ল্যাশ ('/') ব্যবহার করা ব্যবহারকারীর হোম ডিরেক্টরিটির সংজ্ঞা দেওয়ার জন্য ডিফল্ট অ্যালগরিদমকে ভেঙে দিতে পারে।

ব্যবহারকারীর নামগুলি কেবলমাত্র 32 টি অক্ষর পর্যন্ত দীর্ঘ হতে পারে।

সুতরাং, একটি সাধারণ সুপারিশ আছে। আসল সীমাবদ্ধতাগুলি আপনার প্রয়োগ / বিতরণের নির্দিষ্টকরণের উপর নির্ভর করে। ডেবিয়ান-ভিত্তিক সিস্টেমগুলিতে, দৃশ্যত খুব শক্ত বাধা নেই। আসলে, আমি কেবল useradd '€'আমার উবুন্টু বাক্সে চেষ্টা করেছি, এবং এটি কার্যকর হয়েছে। অবশ্যই, এটি এমন কিছু অ্যাপ্লিকেশন ভেঙে ফেলতে পারে যা এই জাতীয় অস্বাভাবিক ব্যবহারকারীর নাম আশা করে না। এই জাতীয় সমস্যা এড়াতে, সাধারণ সুপারিশটি অনুসরণ করা ভাল।


12

প্রায় 4 বছরের পুরানো এই প্রশ্নটি নেক্রোবাম্পিংয়ের জন্য দুঃখিত, তবে এটি ইন্টারনেট অনুসন্ধানের ফলাফলগুলির উপরে উঠে আসে এবং এটি আরও কিছুটা মনোযোগ দেওয়ার জন্য সতর্ক করে।

আরও সঠিক রেগেক্স হ'ল (হ্যাঁ, আমি জানি, ম্যান পেজ থাকা সত্ত্বেও):

^[a-z_]([a-z0-9_-]{0,31}|[a-z0-9_-]{0,30}\$)$

আশা করি এটি সন্ধানকারীদের কয়েকজনকে সহায়তা করে।

এটি ভেঙে ফেলার জন্য:

  1. এটি করা উচিত শুরু ( ^) শুধুমাত্র ছোট হাতের অক্ষর বা একটি আন্ডারস্কোর (সঙ্গে [a-z_])। এটি ঠিক 1 অক্ষর দখল করে ।
  2. তারপর এটি হওয়া উচিত এক এর পারেন ( ( ... )):
    1. থেকে 0 থেকে 31 অক্ষর ( {0,31}এর) চিঠি , সংখ্যা , আন্ডারস্কোর , এবং / অথবা হাইফেন ( [a-z0-9_-]), বা ( |)
    2. থেকে 0 থেকে 30 উপরে অক্ষর প্লাস একটি ডলার চিহ্ন ( \$) শেষে, এবং তারপর
  3. আর কোনো অক্ষর গত এই প্যাটার্ন ( $)।

যারা রেজেক্স প্যাটার্নগুলির সাথে অপরিচিত তাদের জন্য, আপনি ডলার সাইনটিতে কেন 2.2 এ ব্যাকস্ল্যাশ পড়েছিল তা জিজ্ঞাসা করতে পারেন। তবে 3-এ করেন নি কারণ এটি বেশিরভাগ (সমস্ত?) রেজেেক্স রূপগুলিতে ডলারের চিহ্নটি একটি স্ট্রিং (বা লাইন ইত্যাদি) এর সমাপ্তি নির্দেশ করে। ইঞ্জিনটি ব্যবহৃত হচ্ছে তার উপর নির্ভর করে, যদি এটি প্রকৃত স্ট্রিংয়ের অংশ হয় তবে এড়াতে হবে (আমি কোনও রেগেক্স ইঞ্জিনের মাথাটি শীর্ষে ফেলে ভাবতে পারি না যা শুদ্ধ অভিব্যক্তির জন্য ব্যাকস্ল্যাশকে অব্যাহতি হিসাবে ব্যবহার করে না) ।

দ্রষ্টব্য যে দেবিয়ান এবং উবুন্টু পুরোপুরি পসিক্স / ছায়া আপস্ট্রিম অনুগত ব্যবহারকারী নামটির জন্য কিছু বিধিনিষেধ অপসারণ করে (উদাহরণস্বরূপ, এবং এটি ঠিক করা হয়েছে কিনা তা আমি জানি না, তবে তারা ব্যবহারকারীর নামটি একটি সংখ্যার সাথে শুরু করার অনুমতি দেয় - যা আসলে এই কারণটি হয়েছিল বাগ ) যদি আপনি ক্রস-প্ল্যাটফর্মের গ্যারান্টি দিতে চান তবে আমি দেবিয়ান, উবুন্টু এবং অন্যদের যা যা পরীক্ষা করে / পাস করতে ব্যর্থ হয় তার চেয়ে উপরের রেজেক্স প্যাটার্নটি সুপারিশ করব।


দুর্দান্ত উত্তর। জাভাতেও খুব সহজেই প্রয়োগ করা যেতে পারেjava.util.regex.Pattern.matches("^[a-z_]([a-z0-9_-]{0,31}|[a-z0-9_-]{0,30}\\$)$", user);
ডকস্পার

এটি এর [abcdefghijklmnopqrstuvwxyz]পরিবর্তে হওয়া উচিত [a-z][a-z]অনেক regexp ইঞ্জিন এছাড়াও ভালো জিনিস মিলে যায় é, œবা এমনকি কখনও কখনও বহু-চরিত্র ক্রমানুসারে সাজানো মত উপাদান dszহাঙ্গেরীয় লোকেলে।
স্টাফেন চেজেলাস

লিনাক্স ব্যবহারকারীর নামগুলি ইউনিকোড গ্রহণ করে না (যদি না তারা POSIX সম্মতি - 1 2 ভঙ্গ করার জন্য স্পষ্টভাবে কনফিগার করা থাকে )। এই চেকটি রিজেক্সের বাইরে করা উচিত, কারণ এটি কোনও ইনপুট / পরিবেশ / স্থানীয়করণ বৈধকরণ, স্ট্রিং বৈধতা নয়। আরও, আমি এমন একটি রেজেক্স ইঞ্জিনের উদাহরণ শুনতে পছন্দ করব যা এটি করে। আমি ASCII এর সাথে ম্যাচ সম্পর্কে জানি এবং এগুলি সমর্থিত থাকলে একটি স্পষ্টভাবে ইউনিকোড সক্ষম করতে হবে।
ব্রেন্ট স্যানার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.