Altro programmino

Ciao bimbi del lugbz, oggi vi propongono una nuova kikka; dopo il front-end
per nmap, ho fatto un adduser tutto speciale, + facile da usare di quello
comune, e pure migliore, perchè ha il supporto per le password shadow.
Come tutti sanno quando si fa il comando: useradd username -p pasword la
password digitata non viene crittata, e per riuscire ad usera il vostro
nuovo account DOVRETE crittarla digitando passwd e cambiare la password;
passwd shadow-erà la nuova password digitata.
Con il mio programmino, riuscirete ad impostare: username, shell, home dir
e password, e la password sarà CRITTATA e non dovrete digitare passwd per
usare il nuovo account.

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

#define HISHOME "mkdir "
#define _XOPEN_SOURCE

const char usera[9] = "useradd ";
const char d[4] = " -d";
const char s[4] = " -s";
const char p[4] = " -p";
const char sp[2] = " ";

main()

{

     char homme[23];
     char utent[20];
     char dire[20];
     char shellocia[10];
     char allone[60];
     char* passcrypt;
     char pass[20];

     printf("\n\n\nNome utente: ");
     scanf("%s", utent);
     printf("\nHome dir (es. /home/you): ");
     scanf("%s", dire);
     printf("\nShell (es. /bin/bash): ");
     scanf("%s", shellocia);
     printf("\nPassWord: ");
     scanf("%s", pass);
     passcrypt = crypt(pass, "it");

     strcpy(allone, usera);
     strcat(allone, utent);
     strcat(allone, d);
     strcat(allone, sp);
     strcat(allone, dire);
     strcat(allone, s);
     strcat(allone, sp);
     strcat(allone, shellocia);
     strcat(allone, p);
     strcat(allone, sp);
     strcat(allone, passcrypt);

     strcpy(homme, HISHOME);
     strcat(homme, dire);

     printf("\n\n\n");

     system(allone);
     system(homme);

}

/* WestMan adduser */

per compilare questo programma: gcc addut.c -lcrypt -o addut

È un programmino bello, però c'è un piccolo problema (o bug?):
se la password contiene dei spazi (0x20), scanf la legge solo fino allo
primo spazio. Se invece usi char *getpass (char*) (unistd.h), questo problema
sarà risolto e inoltre la password non è visibile sullo schermo.

bye
benjamin