static int apopcmd(char *arg) { char *resp; resp = nextarg(arg); if(setuser(arg) < 0) return -1; return dologin(resp); }
static int usercmd(char *arg) { if(loggedin) return senderr("already authenticated"); if(*arg == 0) return senderr("USER requires argument"); if(setuser(arg) < 0) return -1; return sendok(""); }
void login(struct USER *me) { int recvd; if (isconnected) { fprintf(stderr, "You are already connected to server at %s:%d\n", SERVERIP, SERVERPORT); return; } sockfd = connect_with_server(); if (sockfd >= 0) { isconnected = 1; me->sockfd = sockfd; if (strcmp(me->user, "Anonymous")) setuser(me); printf("Logged in as %s\n", me->user); printf("Receiver started [%d]...\n", sockfd); struct THREADINFO threadinfo; pthread_create(&threadinfo.thread_ID, NULL, receiver, (void *) &threadinfo); } else { fprintf(stderr, "Connection rejected...\n"); } }
void login(struct USER *me) { int recvd; if(isconnected) { fprintf(stderr, "You are already connected to server at %s:%d\n", SERVERIP, SERVERPORT); return; } sockfd = connect_with_server(); if(sockfd >= 0) { isconnected = 1; me->sockfd = sockfd; if(strcmp(me->user, "default")) setuser(me); printf(pink "Logged in as %s\n" ANSI_COLOR_RESET, me->user); printf(ANSI_COLOR_YELLOW "ready to send and receive messages [%d]\n" ANSI_COLOR_RESET, sockfd); sleep(1); struct THREADINFO threadinfo; pthread_create(&threadinfo.thread_ID, NULL, receiver, (void *)&threadinfo); } else { fprintf(stderr, "Connection rejected...\n"); } }
Xfid * setuser(Xfile *xp, char *user) { Xfid *xf, *xpf; Session *s; xf = xfid(user, xp, 1); if(xf->urfid) return xf; if(xp->parent==xp || !(xpf = setuser(xp->parent, user))) /* assign = */ return xfid(user, xp, -1); s = xp->s; xf->urfid = newfid(s); xf->urfid->owner = &xf->urfid; setfid(s, xpf->urfid); s->f.newfid = xf->urfid - s->fids; s->f.nwname = 1; s->f.wname[0] = xp->name; if(xmesg(s, Twalk) || s->f.nwqid != 1) return xfid(user, xp, -1); return xf; }
int main(int argc, char **argv) { int sockfd, userlen; printf ("********* Welcome to mini chat cote client *********\n"); printf( " Les commande sont : \n" " login puis nom utilisateur pour connecter au serveur \n" " pour envoyer un message a un client taper : send utilisateur puis message \n" " quiter \n\n\n"); printf("-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*Client*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-\n"); memset(&me, 0, sizeof (struct USER)); while (gets(comande)) { if (!strncmp(comande, "quiter", 4)) { logout(&me); break; } /* if (!strncmp(comande, "help", 4)) { FILE *fin = fopen("help.txt", "r"); if (fin != NULL) { while (fgets(comande, LINEBUFF - 1, fin)) puts(comande); fclose(fin); } else { fprintf(stderr, "Help file not found...\n"); } }*/ else if (!strncmp(comande, "login", 5)) { char *ptr = strtok(comande, " "); ptr = strtok(0, " "); memset(me.user, 0, sizeof (char) * USERLEN); if (ptr != NULL) { userlen = strlen(ptr); if (userlen > USERLEN) ptr[USERLEN] = 0; strcpy(me.user, ptr); } else { strcpy(me.user, "Anonymous"); } login(&me); } else if (!strncmp(comande, "user", 5)) { char *ptr = strtok(comande, " "); ptr = strtok(0, " "); memset(me.user, 0, sizeof (char) * USERLEN); if (ptr != NULL) { userlen = strlen(ptr); if (userlen > USERLEN) ptr[USERLEN] = 0; strcpy(me.user, ptr); setuser(&me); } } else if (!strncmp(comande, "send", 5)) { char *ptr = strtok(comande, " "); char temp[USERLEN]; ptr = strtok(0, " "); memset(temp, 0, sizeof (char) * USERLEN); if (ptr != NULL) { userlen = strlen(ptr); if (userlen > USERLEN) ptr[USERLEN] = 0; strcpy(temp, ptr); while (*ptr) ptr++; ptr++; while (*ptr <= ' ') ptr++; sendtouser(&me, temp, ptr); } } else if (!strncmp(comande, "send", 4)) { sendtoall(&me, &comande[5]); } else if (!strncmp(comande, "logout", 6)) { logout(&me); } else fprintf(stderr, "Unknown comande...\n"); } return 0; }
int main(int argc, char **argv) { int sockfd, userlen; memset(&me, 0, sizeof(struct USER)); while(gets(option)) { if(!strncmp(option, "exit", 4)) { logout(&me); break; } else if(!strncmp(option, "login", 5)) { char *ptr = strtok(option, " "); ptr = strtok(0, " ");//set ptr as username memset(me.user, 0, sizeof(char) * userLEN); if(ptr != NULL) { userlen = strlen(ptr);//strlen:calcule la longeur du chaine de caractere if(userlen > userLEN) ptr[userLEN] = 0; strcpy(me.user, ptr);//copy ptr in me.user } else { strcpy(me.user, "default");//copy default to me.user } login(&me); } else if(!strncmp(option, "change", 6)) { char *ptr = strtok(option, " "); ptr = strtok(0, " "); memset(me.user, 0, sizeof(char) * userLEN); if(ptr != NULL) { userlen = strlen(ptr); if(userlen > userLEN) ptr[userLEN] = 0; strcpy(me.user, ptr); setuser(&me); } } else if(!strncmp(option, "specf", 5)) { char *ptr = strtok(option, " "); char temp[userLEN]; ptr = strtok(0, " "); memset(temp, 0, sizeof(char) * userLEN); if(ptr != NULL) { userlen = strlen(ptr); if(userlen > userLEN) ptr[userLEN] = 0; strcpy(temp, ptr); while(*ptr) ptr++; ptr++; while(*ptr <= ' ') ptr++; sendtoclient(&me, temp, ptr); } } else if(!strncmp(option, "sfile", 5)) { char *ptr = strtok(option, " "); char temp[userLEN]; char *buff; ptr = strtok(0, " "); memset(temp, 0, sizeof(char) * userLEN); if(ptr != NULL) { userlen = strlen(ptr); if(userlen > userLEN) ptr[userLEN] = 0; strcpy(temp, ptr); while(*ptr) ptr++; ptr++; while(*ptr <= ' ') ptr++; sendfile(&me, temp, ptr,buff); } } else if(!strncmp(option, "encrypt", 7)) { char *ptr = strtok(option, " "); char temp[userLEN]; ptr = strtok(0, " "); memset(temp, 0, sizeof(char) * userLEN); if(ptr != NULL) { userlen = strlen(ptr); if(userlen > userLEN) ptr[userLEN] = 0; strcpy(temp, ptr); while(*ptr) ptr++; ptr++; while(*ptr <= ' ') ptr++; sendencrypt(&me, temp, ptr); } } else if(!strncmp(option, "broadcast", 9)) { sendtoall(&me, &option[9]); } else if(!strncmp(option, "list", 4)) { } else if(!strncmp(option, "logout", 6)) { logout(&me); } else fprintf(stderr, "Unknown option...\n"); } return 0; }
Xfid * rpc2xfid(Rpccall *cmd, Dir *dp) { char *argptr = cmd->args; Xfile *xp; Xfid *xf; Session *s; char *service; Authunix au; Qid qid; char client[256], *user; Unixidmap *m; int i; uvlong x1, x2; chat("rpc2xfid %.8lux %.8lux %p %p\n", *((ulong*)argptr), *((ulong*)argptr+1), buf, argptr); if(argptr[0] == 0 && argptr[1] == 0){ /* root */ chat("root..."); xp = xfroot(&argptr[2], 0); s = xp ? xp->s : 0; }else{ ulong ul; chat("noroot %.8lux...", *((ulong*)argptr)); if((ul=GLONG()) != starttime){ chat("bad tag %lux %lux...", ul, starttime); return 0; } s = (Session *)GLONG(); x1 = GLONG(); x2 = GLONG(); qid.path = x1 | (x2<<32); qid.vers = 0; qid.type = GBYTE(); xp = xfile(&qid, s, 0); } if(xp == 0){ chat("no xfile..."); return 0; } if(auth2unix(&cmd->cred, &au) != 0){ chat("auth flavor=%ld, count=%ld\n", cmd->cred.flavor, cmd->cred.count); for(i=0; i<cmd->cred.count; i++) chat(" %.2ux", ((uchar *)cmd->cred.data)[i]); chat("..."); return 0; }else{ /* chat("auth: %d %.*s u=%d g=%d", * au.stamp, utfnlen(au.mach.s, au.mach.n), au.mach.s, au.uid, au.gid); * for(i=0; i<au.gidlen; i++) * chat(", %d", au.gids[i]); * chat("..."); */ char *p = memchr(au.mach.s, '.', au.mach.n); chat("%ld@%.*s...", au.uid, utfnlen(au.mach.s, (p ? p-au.mach.s : au.mach.n)), au.mach.s); } if(au.mach.n >= sizeof client){ chat("client name too long..."); return 0; } memcpy(client, au.mach.s, au.mach.n); client[au.mach.n] = 0; service = xp->parent->s->service; cmd->up = m = pair2idmap(service, cmd->host); if(m == 0){ chat("no map for pair (%s,%s)...", service, client); /*chat("getdom %d.%d.%d.%d", cmd->host&0xFF, (cmd->host>>8)&0xFF, (cmd->host>>16)&0xFF, (cmd->host>>24)&0xFF);/**/ /*if(getdom(cmd->host, client, sizeof(client))<0) return 0;/**/ return 0; } /*chat("map=(%s,%s)...", m->server, m->client);/**/ cmd->user = user = id2name(&m->u.ids, au.uid); if(user == 0){ chat("no user for id %ld...", au.uid); return 0; } chat("user=%s...", user);/**/ xf = 0; if(s == xp->parent->s){ if(!s->noauth) xf = setuser(xp, user); if(xf == 0) xf = setuser(xp, "none"); if(xf == 0) chat("can't set user none..."); }else xf = xp->users; if(xf) chat("uid=%s...", xf->uid); if(xf && dp && xfstat(xf, dp) < 0){ chat("can't stat %s...", xp->name); return 0; } return xf; }