2010-06-21 7 views
7

सी ++ का उपयोग कर लिनक्स में उपयोगकर्ता/समूह जोड़ने का सबसे अच्छा तरीका क्या एक पुस्तकालय है जिसे मैं कॉल कर सकता हूं? मैं चीजों को शुरू करना नहीं चाहता हूं:सी ++ लिनक्स उपयोगकर्ता जोड़ें

fopen("/etc/passwd", "a"); 
fprintf(tmp, "%s:x:%d:1:%s:/%s/%s:/bin/ksh\n", username, usernumber, commentfield, userdir, username); 
fclose(tmp); 

fopen("/etc/shadow", "a"); 
fprintf(stmp, "%s:*LK*:::::::\n", username); 
fclose(stmp); 

धन्यवाद!

उत्तर

5

मैंने देखा है कि उपयोगकर्ताओं को जोड़ने और बदलने में सबसे बड़ी उपयोगिताएं अक्सर अलग-अलग तरीकों से होती हैं। passwd और छाया फ़ाइलों को संशोधित करने के लिए आप जिन फ़ंक्शंस का उपयोग कर सकते हैं उन्हें <pwd.h> और <sys/types.h> और they're part of glibc में उजागर किया गया है।

fgetpwent, getpwnam, getpw, getpwent_r, putpwent, setpwent

हम कैसे बिजीबॉक्स (TinyLogin के माध्यम से) यह होता है, एक उदाहरण के रूप में देख सकते हैं। busybox/loginutils/adduser.c में, उन्होंने passwd संरचना बनाकर एक उपयोगकर्ता को passwd फ़ाइल में रखा और फिर putpwent पर कॉल करें। छाया फ़ाइल में उपयोगकर्ता का पासवर्ड जोड़ने के लिए, वे बस fprintf पर कॉल करें और सीधे स्ट्रिंग लिखें।

उपयोगकर्ताओं को आधुनिक तरीके से प्रमाणीकृत करने के लिए, Linux-PAM है। लेकिन जहां तक ​​उपयोगकर्ता जोड़ते हैं, आप pam_unix_passwd.c में देख सकते हैं कि वे unix_update_db() पर कॉल करते हैं, जो libpwdb में विभिन्न कार्यों को कॉल करते हैं, जिन्हें आप इसका उपयोग करते समय अपनी परियोजना पर निर्भरता के रूप में जोड़ना चाहते हैं।

कहा जा रहा है कि, मैं पासवाड और छाया डेटाबेस को पार्स करने और उन्हें संशोधित करने के लिए कुछ उपयोगिताएं लिखने के दोषी हूं। यह ठीक काम करता था, लेकिन यह एक एम्बेडेड सिस्टम पर था जहां मैं सब कुछ कसकर नियंत्रित कर सकता था। मुझे passwd डीबी संशोधित अन्य कार्यक्रमों के साथ दौड़ की स्थिति जैसी चीजों के बारे में चिंता करने की ज़रूरत नहीं थी।

यदि आपको कोई समूह जोड़ने की आवश्यकता है, तो group database के लिए भी जाना जाता है।

3

उपयोगकर्ता को जोड़ने के लिए एक सिस्टम कॉल होने के लिए थोड़ा उच्च स्तर है। जहां तक ​​मुझे पता है, इसके लिए किसी भी व्यापक रूप से उपयोग की जाने वाली पुस्तकालय नहीं हैं। आपकी सबसे अच्छी शर्त शायद system कॉल का उपयोग useradd उचित विकल्प के साथ प्रोग्राम करने के लिए करेगी।

+0

कुछ चीजें: * सिस्टम() का उपयोग न करें जब तक कि आप सुनिश्चित न हों कि आपके द्वारा पास की जाने वाली चीज़ों को शैल द्वारा विशेष वर्णों के रूप में व्याख्या नहीं किया जाएगा। * उपयोगकर्ता बैंड विशेष रूप से पोर्टेबल नहीं है (और कुछ सिस्टमों पर आप "सामान्य" उपयोगकर्ता बनाने में सक्षम नहीं हो सकते हैं, उदाहरण के लिए जहां उपयोगकर्ता एलडीएपी/एनआईएस/एडी/आदि में हैं सामान्यतः, एक-ऑफ उपयोगकर्ता के लिए निर्माण मैं एक खोल स्क्रिप्ट का उपयोग करेंगे। –

4

आप libuser लाइब्रेरी का उपयोग करने का प्रयास कर सकते हैं।

libuser के साथ वितरित किए गए अनुप्रयोगों में से एक luseradd है, एक प्रोग्राम जो क्रॉस-प्लेटफ़ॉर्म useradd उपयोगिता प्रतीत होता है। इसके मूल पर, luseradd उपयोगकर्ता को भौतिक रूप से बनाने के लिए libuser के lu_user_add फ़ंक्शन का उपयोग करता है।

प्रलेखन के लिए स्रोत वितरण में docs/html फ़ोल्डर देखें।

संबंधित मुद्दे