salut a tous
j'ai petit probleme, je fait un programme en c qui rentre le nom d'utilisateur d'une société pour des comptes internet sur un serveur samba (y en a plus de 2000, un peu long à la main). le programme va chercher le nom des utilisateur dans un .txt, le prog fait appel à un .sh pour ajouter les utilisateurs.
voici le programme c :
int main(int argc, char *argv[])
{
int i;
char ajout[20] = "";;
FILE* fichier = NULL;
fichier = fopen("/srv/samba/netlogon/prenom-nom.txt", "r");
if (fichier != NULL)
{
for(i=1;i<2;i++)
{
fgets(chaine, "\n", fichier);
system("/srv/samba/netlogon/ajoutuser.sh [....chaine.....]");
//j'aimerai que le nom de la personne contenu dans [.......chaine.......] s'affiche dans la console mais system() ne veut pas plus d'un argument
}
fclose(fichier);
}
return 0;
voici mon fichier shell :
adduser $1
useradd -G dom_users -m -d /srv/samba/home/$1 -c $1 -s /bin/false $1
echo -e "azerty\nazerty" | smbpasswd -a $1 -s
pdbedit --pwd-can-change-time 0 $1
pdbedit --pwd-must-change-time 0 $1
Est-ce qu'il existe une autre fonction que system() pour ouvrir la console et entré une variable introduite dans mon prog??
Merci d'avance pour vos réponses
# Pourquoi en C ???
Posté par PLuG . Évalué à 7.
tu devrait tout faire en shell, ou en perl c'est le langage le plus indiqué pour ces taches d'admin systeme.
en shell ça pourrait donner:
cat /srv/samba/netlogon/prenom-nom.txt | while read CHAINE
do
/srv/samba/netlogon/ajoutuser.sh "${CHAINE}"
done
plus simple que de compiler un truc en C ...
# Intérêt d'un programme en C ?
Posté par Gyro Gearllose . Évalué à 7.
Je risque de répondre à côté de la plaque, mais quel est l'intérêt de ce programme en C qui appelle un shell ?
Je sais bien que ça ne répond pas à ta question, mais il me semble qu'un simple shell peut faire ça sans soucis. Il suffit de lire un fichier ligne par ligne et d'envoyer chaque entrée à ton script-shell.
Par exemple :
Voilà...
[^] # Re: Intérêt d'un programme en C ?
Posté par PLuG . Évalué à 2.
le shell va remplacer cela par le contenu du fichier. Si le fichier est looooong, cela ne tiendra pas sur la ligne de commande et les derniers enregistrements ne seront pas traités.
amha, il vaut mieux utiliser un | (pipe) comme montré dans mon exemple au dessus.
# merci
Posté par piluc . Évalué à 2.
encore merci je vais essayer cela
# post inutile, mais bon ...
Posté par Cereal Killer . Évalué à 1.
Autrement, pour être logique, faudrait parser le nom d'utilisateur entre fgets() et system(). Bon, ya aussi que tu déclares un ajout[20] et t'utilises un "chaine" qui j'imagine est un char* ou char tab[20].
Pour ta question => oui. man 3 execv.
J'imagine que c'était un truc vite fait a la rache, mais quand même :)
Sinon, d'accord avec les autres, un mini coup de perl ou de bash serais BCP plus simple et adapté pour ce genre de truc.
# utilise perl
Posté par xylo (site web personnel) . Évalué à 1.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.