Question

Quelle est la meilleure façon d'ajouter un utilisateur / groupe sous Linux en C ++ est-il une bibliothèque que je peux faire appel? Je ne veux pas commencer à faire des choses comme:

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

Merci!

Était-ce utile?

La solution

Je l'ai remarqué que la plupart des grandes compagnies d'électricité qui ajoutent et les utilisateurs de changement font directement, souvent de différentes façons. Les fonctions que vous pouvez utiliser pour modifier le passwd et les fichiers d'ombre sont exposés dans <pwd.h> et <sys/types.h> et ils font partie de la glibc .

fgetpwent , getpwnam , getpw , getpwent_r , putpwent , setpwent

On peut se pencher sur la façon dont busybox (via TinyLogin ) le fait, à titre d'exemple. busybox/loginutils/adduser.c , ils ont mis un utilisateur dans le fichier passwd en construisant la structure passwd puis appel putpwent. Pour ajouter le mot de passe de l'utilisateur dans le fichier d'ombre, ils appellent simplement fprintf et d'écrire la chaîne directement.

Pour l'authentification des utilisateurs la façon moderne, il y a pam_unix_passwd.c qu'ils appellent unix_update_db () , qui appelle diverses fonctions dans libpwdb , que vous auriez à ajouter une dépendance à votre projet si vous l'utilisez.

Cela étant dit, je suis coupable d'avoir écrit Deux utilitaires pour analyser les bases de données passwd et ombre et les modifier directement. Il a bien fonctionné, mais c'était sur un système embarqué où je pouvais contrôler étroitement tout. Je ne l'ai pas à vous soucier des choses comme des conditions de course avec d'autres programmes modifiant le passwd db.

Si vous avez besoin d'ajouter un groupe, même pour les base de données de groupe .

Autres conseils

Vous pouvez essayer d'utiliser la bibliothèque libuser .

L'une des applications qui sont distribués avec libuser est luseradd, un programme qui semble être un utilitaire de useradd multi-plateforme. À la base, luseradd utilise la fonction de lu_user_add libuser pour créer physiquement l'utilisateur.

Voir le dossier docs/html dans la distribution source de documentation.

Ajout d'un utilisateur est un peu trop haut niveau pour qu'il y ait un appel système pour elle. Pour autant que je sache, il n'y a pas de bibliothèques largement utilisées pour ce soit. Votre meilleur pari sera probablement d'utiliser l'appel de system pour invoquer le programme de useradd avec des options appropriées.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top