Mode console de linux

Description

Ce programme fait une simulation de la gestion d?utilisateur sous linux et se présente comme suit:
A la première utilisation on crée root, pour cela on demande le son mot de passe, son nom et
son prénom. Le login sera ??root?? et, l?uid ainsi que le gid sont à 0.
Quand le user se connecte pour la première fois le manuel est affiché et ,après l?appui
d?une touche il a une ligne de commande ou il pourra effectuer ses différentes
opérations.
MANUEL
Processus : commande paramètre
Pour
L?ajout d'un utilisateur: adduser <nom_user>
Suppression d'1 user: deluser <nom_user>
recherche d'1 user: search <nom_user>
affichage des users: ls
affichage par groupe: lsgid
changer de user: su <nom_user>
changer de groupe: sg
changer de mot de passe(user connecté): passwd
deconnexion : shutdown
nombre de users: nbuser
manuel des cmdes: man
effacer l'écran: clear
QUITTER: exit

NB :
Les cmdes dont les parametres ne sont pas specifies s?exécutent sans paramètres.

Source / Exemple :


 
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#include<dos.h>
#include<time.h>
typedef struct user{
char id[20];
int uid;
char mp[20];
int gid;
char nom[20];
char prenom[20];
user *suiv;
}user;
user *tete,*corps,*queue;
int uid=500;
char ncmd[20],pcmd[20];
void remplir()
{char c;
int i=0,x,y;
queue->uid=++uid;
randomize();
queue->gid=rand()%1000;
printf("Mot de passe:");
while((c=getch())!='\r')
{
if(c=='\b')
{
if(i!=0)
i--;
printf("\b");
clreol();
}
else
{
queue->mp[i]=c;
printf("*");
i++;
}
}
queue->mp[i]='\0';
printf("\n NOM :");
scanf("%s",queue->nom);
printf("PRENOM:");
scanf("%s",queue->prenom);
}
void creation()
{char c;
int i=0,j,x,y;
clrscr();
tete=NULL;
delay(800);
printf("\n\n\n\n\n\n\n\nCr?ation du compte root");
for(j=1;j<=10;j++)
{
printf(". ");delay(100); }
clrscr();
tete=(user*)malloc(sizeof(user));
strcpy(tete->id,"root");
tete->uid=0;
tete->gid=0;
printf("Mot de passe:");
while((c=getch())!='\r')
{
if(c=='\b')
{ if(i!=0)
{
i--;
printf("\b");
clreol();
}
}
else
{
tete->mp[i]=c;
printf("*");
i++;
}
}
tete->mp[i]='\0';
printf("\n NOM :");
scanf("%s",tete->nom);
printf("PRENOM:");
scanf("%s",tete->prenom);
tete->suiv=NULL;
queue=tete;
}

void adduser(char id[20])
{

if(strcmp(tete->id,id)==0)
printf("vous ne pouvez pas recr?er root\n");
else
{
queue->suiv=(user*)malloc(sizeof(user));
queue=queue->suiv;
strcpy(queue->id,id);
remplir();
queue->suiv=NULL;
}
}
int search_user_by_id(char *idr)
{
int bool=0;
corps=tete;
while(corps!=NULL)
{
if(strcmp(corps->id,idr)==0)
{bool=1;
break;
}
else
corps=corps->suiv;
}
return bool;
}

int verification(char *id,char *mp)
{
int bool=0;
corps=tete;
while(corps!=NULL)
{
if((strcmp(corps->id,id)==0)&&(strcmp(corps->mp,mp)==0))
{bool=1;
break;
}
else
corps=corps->suiv;
}
return bool;
}
void deluser(char *supp)
{
user *p1,*p2;
if(strcmp(tete->id,supp)==0)
printf("\nvous ne pouvez pas supprimer root \n");
else
{
if(search_user_by_id(supp)==1)
{
p1=tete; p2=tete->suiv;
while((p2->suiv!=NULL)&&(strcmp(p2->id,supp)!=0))
{
p1=p2; p2=p2->suiv;
}
p1->suiv=p2->suiv;
if(p1->suiv==NULL)
queue=p1;
free(p2);
}
else
printf("Suppression impossible:Ce user n'existe pas");
}
}
void list_user()
{
corps=tete;
printf("id:uid:mot de passe:gid:nom prenom\n");
while(corps!=NULL)
{
printf("%s : %d : %d : %d : %s : %s \n",corps->id,corps->uid,0,corps->gid,corps->nom,corps->prenom);
corps=corps->suiv;
}

}
int nb_user()
{
int i=0;
corps=tete;
while(corps!=queue->suiv)
{
i++;
corps=corps->suiv;
}
return i;
}

////////////////////////
void list_by_gid()
{int n1,n=nb_user(),i=0,t[20],j,k;
corps=tete;
while(corps!=NULL)
{t[i]=corps->gid; corps=corps->suiv;
i++;
}
n1=n=i;
for(k=0;k<n-1;k++)
{
for(i=k+1;i<n;i++)
if(t[k]==t[i])
{
for(j=i;j<n;j++)
{
t[j]=t[j+1];
n1--;
}
}
}
printf("\n------------------------------- \n");
i=0;
while(i<n1)
{
corps=tete;
printf("Groupe %d: ",t[i]);
do
{
if(corps->gid==t[i])
printf("%s \t",corps->id);
corps=corps->suiv;
}
while(corps!=NULL);
printf("\n-------------------------------\n");
i++;
}
}

void menu()
{
clrscr();
printf(" MANUEL\n");
printf(" processus : commande\n\n");
printf(" ajout d'un user: adduser <nom_user>\n");
printf(" suppression d'1 user: deluser <nom_user>\n");
printf(" recherche d'1 user: search <nom_user>\n");
printf(" affichage des users: ls\n");
printf(" affichage par groupe: lsgid\n");
printf(" changer de user: su <nom_user>\n");
printf(" changer de groupe: sg\n");
printf(" changer de mot de passe: passwd\n");
printf(" deconnexion: shutdown\n");
printf(" nombre de users: nbuser\n");
printf(" manuel des cmdes: man\n");
printf(" effacer l'ecran: clear\n");
printf(" QUITTER: exit\n");
}
////////////
void presentation()
{
int i=0;
clrscr();
printf("\n\n\n\n\n\n\n\n\n\n\n\ **************");delay(500);
printf(" BIENVENUE ");delay(500);printf("**************");delay(500);
clrscr(); printf("\n\n\n\n\n\nPROJET ALGO\n\n"); delay(500);clrscr();
printf("\n\n\n\THEME:GESTION D'UTILISATEURS SOUS LINUX\n\n");delay(1000);
printf("\n\n\nAPPUYER SUR 1 TOUCHE POUR CONTINUER:");
getch();
clrscr();
for(i=1;i<=10;i++)
{
printf(". ");delay(100); }
clrscr();
}
////////////////////
void goodbye()
{int i;
clrscr();
printf("\n\n\n\n\n\n\n\n\n");
for(i=1;i<=7;i++)
{
printf(". ");delay(200); }
printf("fermeture");
for(i=1;i<=7;i++)
{
printf(". ");delay(200); } delay(2000);
clrscr();
printf("\n\n\n\n\n\n\n\n\n\n A\n");
delay(100); gotoxy(wherex()+1,wherey()-1);
printf(" U");
delay(100); gotoxy(wherex()+1,wherey()-1);
printf(" R");
delay(100); gotoxy(wherex()+1,wherey()-1);
textcolor(142);
printf(" E");
delay(100); gotoxy(wherex()+1,wherey()-1);
printf(" V");
delay(100); gotoxy(wherex()+1,wherey()-1);
printf(" O");
delay(100); gotoxy(wherex()+1,wherey()-1);
printf(" I");
delay(100); gotoxy(wherex()+1,wherey()-1);
printf(" R");
delay(500);
clrscr();
printf("\n\n\n\n\n\n\n A\n");
delay(100);
printf(" U\n");
delay(100);
printf(" R\n");
delay(100);
textcolor(130);
printf(" E\n");
delay(100);
printf(" V\n");
textcolor(132);
delay(100);
printf(" O\n");
delay(100);
printf(" I\n");
delay(100);
printf(" R\n");
delay(2000);
}
///////////////////
void main()
{
char *c,*supp,*p,*idr,a,b,*log;
int i,j,k,x=0;
clrscr();
textmode(1);textcolor(15);
presentation();
printf("\n\n\n\n\n\n\n Vs devez cr?er Root pour commencer\n");
printf("\n\n\nAPPUYER SUR 1 TOUCHE POUR CONTINUER:");
getch();

creation();
clrscr();
textmode(2);textcolor(15);
printf("login:");
scanf("%s",c);
do
{
i=0;
printf("Mot de passe:");
while((a=getch())!='\r')
{
if(a=='\b')
{ if(i!=0)
i--;
printf("\b");
clreol();
}
else
{
p[i]=a;
printf("*");
i++;
}
}
p[i]='\0';
if(verification(c,p)!=1)
{
printf("\nlogin ou mot de passe incorrect\n");
printf("login:");
scanf("%s",c);
}
else
{
if(x==0)
{
for(i=1;i<=11;i++)
{
printf(". ");delay(200); }
printf("\n");
textcolor(15);
menu();
printf("\nAPPUYER SUR 1 TOUCHE POUR CONTINUER:");
getch();
printf("\n\n please wait:");
for(i=1;i<=40;i++)
{
printf(". ");delay(200); }
clrscr();
x=1;
}
else printf("\n");
do
{
cprintf("#%s@localhost:\\>",c);
j=0;
while(((b=getchar())!=' ')&&(b!='\n'))
{ncmd[j]=b;j++;
}
ncmd[j]='\0';
{
if(strcmp(ncmd,"adduser")==0)
{if(strcmp(c,"root")==0)
{k=0;
while((a=getchar())!='\n')
{pcmd[k]=a;k++;
}
pcmd[k]='\0';
adduser(pcmd); getch();
strcpy(ncmd,"\0");
}
else
{printf("Seul root dispose des autorisations necessaires\n"); getch(); }

}
else
if(strcmp(ncmd,"deluser")==0)
{
clrscr();
if(strcmp(c,"root")==0)
{
k=0;
while((a=getchar())!='\n')
{pcmd[k]=a;k++;
}
pcmd[k]='\0';
strcpy(supp,pcmd);
deluser(supp);
}
else {printf("Seul root dispose des autorisations necessaires\n");
getch(); }
}
if(strcmp(ncmd,"search")==0)
{
k=0;
while((b=getchar())!='\n')
{pcmd[k]=b;k++;
}
pcmd[k]='\0';
strcpy(idr,pcmd);
if(search_user_by_id(idr)!=1)
printf("\nUtilisateur non pr?sent\n");
else
printf("\nUtilisateur pr?sent\n");
getch();
}
else
if(strcmp(ncmd,"ls")==0)
{list_user(); getch();}
else
if(strcmp(ncmd,"lsgid")==0)
{list_by_gid();getch();}
else
if(strcmp(ncmd,"nbuser")==0)
{printf("Le nombre de users est: %d \n",nb_user());getch();}
else
if(strcmp(ncmd,"sg")==0)
{printf("entrez votre nouveau gid:");
if(search_user_by_id(c)==1)
scanf("%d",&corps->gid);
getch();}
else
if(strcmp(ncmd,"passwd")==0)
{printf("entrez votre ancien mot passe:");
i=0;
while((a=getch())!='\r')
{
if(a=='\b')
{ if(i!=0)
i--;
printf("\b");
clreol();
}
else
{
p[i]=a;
printf("*");
i++;
}
}
p[i]='\0';
if(search_user_by_id(c)==1)
{
if(strcmp(corps->mp,p)==0)
{
printf("\nentrez votre nouveau mot passe:");
i=0;
while((a=getch())!='\r')
{
if(a=='\b')
{ if(i!=0)
i--;
printf("\b");
clreol();
}
else
{
p[i]=a;
printf("*");
i++;
}
}
p[i]='\0';
strcpy(corps->mp,p);
printf("\n");
}
else
printf("\nle mot de passe n'est pa bon r?essayer une autre fois\n");
}
getch();}
else
if((strcmp(ncmd,"su"))==0)
{ k=0;
while((a=getchar())!='\n')
{pcmd[k]=a;k++;
}
pcmd[k]='\0';
if(k==0)
{strcpy(c,"root");break;}
else
{strcpy(log,c);
strcpy(c,pcmd);
if(strcmp(log,"root")!=0)
break;}
}
else
if((strcmp(ncmd,"man"))==0)
{menu();getch();}
else
if((strcmp(ncmd,"shutdown"))==0)
{clrscr(); printf("login:");scanf("%s",c);break; }
else
if((strcmp(ncmd,"clear"))==0)
clrscr();
else
if((strcmp(ncmd,"exit"))==0)
{textmode(1);textcolor(130);goodbye();exit(0);}
else
if((strcmp(ncmd,""))==0)
{gotoxy(1,wherey());clreol();
}
else
printf("command not found\n");
}
}while((strcmp(ncmd,"shutdown"))!=0);
}
}while((strcmp(ncmd,"exit"))!=0);

}

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.