Frage

Was ist der beste Weg, um einen Benutzer / Gruppe in Linux mit C ++ hinzuzufügen gibt es eine Bibliothek, die ich anrufen kann? Ich möchte nicht, Dinge zu tun wie starten:

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);

Danke!

War es hilfreich?

Lösung

Ich habe bemerkt, dass die meisten großen Dienstprogramme, die hinzufügen und ändern Benutzer tun so direkt, oft auf unterschiedliche Weise. Die Funktionen können Sie ändern verwenden Sie die passwd und Schattendateien werden in <pwd.h> und in <sys/types.h> und sie sind ein Teil von glibc .

fgetpwent , getpwnam , getpw getpwent_r , putpwent , setpwent

Wir können prüfen, wie busybox (via tinylogin ) tut es, als Beispiel. In busybox/loginutils/adduser.c , setzten sie die passwd-Struktur durch den Aufbau und dann Aufruf putpwent einen Benutzer in der passwd-Datei. Für das Hinzufügen das Kennwort des Benutzers in der Schattendatei, rufen sie einfach fprintf und die Zeichenfolge direkt schreiben.

Für Anwender, die moderne Art der Authentifizierung, da ist pam_unix_passwd.c , dass sie unix_update_db () , die verschiedene Funktionen in libpwdb , die Sie als eine Abhängigkeit zu Ihrem Projekt hinzufügen müssen, würde, wenn Sie es verwenden.

That being said, ich bin schuldig, ein paar Dienstprogramme geschrieben zu haben, die passwd und Schattendatenbanken und ändern Sie sie direkt zu analysieren. Es funktionierte gut, aber das war auf einem Embedded-System, in dem ich fest alles kontrollieren konnte. Ich habe nicht über Dinge wie Rennbedingungen mit anderen Programmen zur Sorge haben die passwd db ändern.

Wenn Sie eine Gruppe hinzufügen müssen, das gleiche gilt für die Gruppe Datenbank .

Andere Tipps

Sie könnten versuchen, mit der libuser Bibliothek.

Eine der Anwendungen, die mit libuser verteilt ist luseradd, ein Programm, das ein plattformübergreifende useradd Dienstprogramm zu sein scheint. Im Kern luseradd verwendet libuser die lu_user_add Funktion physisch den Benutzer erstellen.

Sehen Sie die docs/html Ordner in der Source-Distribution für die Dokumentation.

das Hinzufügen eines Benutzers ist ein bisschen zu hoher Ebene für ein Systemaufruf für sie sein. Soweit mir bekannt ist, gibt es keine weit verbreitete Bibliotheken entweder dafür. Ihre beste Wette wird wahrscheinlich die system Aufruf zu verwenden, um das useradd Programm mit entsprechenden Optionen aufzurufen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top