Salve.. di nuovo :-p Devo cercare un nome di un utente in un file di testo, e in caso di successo ritornare 1, altrimenti -1. Il nome di ogni utente è salvato in una struct (oltre alla sua password e al suo permesso).

Allego il codice e l'errore che ho in output:

Aggiunta di un utente al file:
codice:
int registraUtente(Utente utente) {
	
	//Cerco se utente è già presente, in tal caso ritorna -1
	int esito = cercaNome(utente);
	if(esito == 1) {
		printf("\nNome utente già presente, sceglierne un'altro.\n");
		return -1;
	}
	
	else {
	
		int ds = open("login",O_WRONLY|O_APPEND);
		if(ds == -1) {
			return -1;
		}
	
		int w = write(ds,&utente,sizeof(utente));
		if(w == -1) {
			return -1;
		}
		
		close(ds);
		return 1;
	}
}
Ricerca del nome utente nel file:
codice:
int cercaNome(Utente utente) {
	
	Utente temp;
	
	memset(temp.nickname,0,sizeof(temp.nickname));
	memset(temp.password,0,sizeof(temp.password));
	
	int cont = 0;
	
	//Apro il file login
	
	FILE *f;
	f = fopen("login","r");
	if(f == NULL) {
		printf("Errore apertura elenco utenti\n");
		chiudiServer();
	}
	
	//Conteggio gli utenti presenti
	
	else {
		while(fscanf(f,"%s %s %d",temp.nickname,temp.password,&temp.permesso) == -1) {
			if(errno != EINTR) {
				printf("\nErrore fscanf\n");
				chiudiServer();
			}
		}
		while(!feof(f)) {
			while(fscanf(f,"%s %s %d",temp.nickname,temp.password,&temp.permesso) == -1) {
				if(errno != EINTR) {
					printf("\nErrore fscanf\n");
					chiudiServer();
				}
			}
			++cont;
		}
		
		rewind(f); //Riposizionamento indice del file
		
		//Ricerca dell'utente
		int i;
		for(i=0; i<cont; i++) {
			while(fscanf(f,"%s %s %d",temp.nickname,temp.password,&temp.permesso) == -1) {
				if(errno != EINTR) {
					printf("\nErrore fscanf\n");
					chiudiServer();
				}
			}
			if(strcmp(utente.nickname,temp.nickname) == 0) { //Utente trovato
				while(fclose(f) != 0) {
					if(errno != EINTR) {
						printf("\nErrore fclose\n");
						chiudiServer();
					}
				}
				return 1;
			}
		}
		
		while(fclose(f) != 0){
            if(errno != EINTR){
                printf("\nErrore fclose\n");
                chiudiServer();
            }
        }
        
        return -1;	
	}
}
Errore che capita quando dal client ho inserito nickname e password e premo invio. L'errore avviene nel terminale che simula il server, quindi è sicuramente riferito a questo codice, di preciso alla seconda funzione qui riportata.

*** stack smashing detected ***: ./server terminated
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(__fortify_fail+0x37)[0x7f00f2465007]
/lib/x86_64-linux-gnu/libc.so.6(__fortify_fail+0x0)[0x7f00f2464fd0]
./server[0x4015ac]
======= Memory map: ========
00400000-00402000 r-xp 00000000 08:06 2622024 /home/loris/Scrivania/TesinaC/server
00602000-00603000 r--p 00002000 08:06 2622024 /home/loris/Scrivania/TesinaC/server
00603000-00604000 rw-p 00003000 08:06 2622024 /home/loris/Scrivania/TesinaC/server
01da7000-01dc8000 rw-p 00000000 00:00 0 [heap]
7f00f2146000-7f00f215b000 r-xp 00000000 08:06 3673778 /lib/x86_64-linux-gnu/libgcc_s.so.1
7f00f215b000-7f00f235a000 ---p 00015000 08:06 3673778 /lib/x86_64-linux-gnu/libgcc_s.so.1
7f00f235a000-7f00f235b000 r--p 00014000 08:06 3673778 /lib/x86_64-linux-gnu/libgcc_s.so.1
7f00f235b000-7f00f235c000 rw-p 00015000 08:06 3673778 /lib/x86_64-linux-gnu/libgcc_s.so.1
7f00f235c000-7f00f250f000 r-xp 00000000 08:06 3677066 /lib/x86_64-linux-gnu/libc-2.15.so
7f00f250f000-7f00f270e000 ---p 001b3000 08:06 3677066 /lib/x86_64-linux-gnu/libc-2.15.so
7f00f270e000-7f00f2712000 r--p 001b2000 08:06 3677066 /lib/x86_64-linux-gnu/libc-2.15.so
7f00f2712000-7f00f2714000 rw-p 001b6000 08:06 3677066 /lib/x86_64-linux-gnu/libc-2.15.so
7f00f2714000-7f00f2719000 rw-p 00000000 00:00 0
7f00f2719000-7f00f273b000 r-xp 00000000 08:06 3677068 /lib/x86_64-linux-gnu/ld-2.15.so
7f00f2921000-7f00f2924000 rw-p 00000000 00:00 0
7f00f2937000-7f00f293b000 rw-p 00000000 00:00 0
7f00f293b000-7f00f293c000 r--p 00022000 08:06 3677068 /lib/x86_64-linux-gnu/ld-2.15.so
7f00f293c000-7f00f293e000 rw-p 00023000 08:06 3677068 /lib/x86_64-linux-gnu/ld-2.15.so
7fff326c8000-7fff326e9000 rw-p 00000000 00:00 0 [stack]
7fff327ff000-7fff32800000 r-xp 00000000 00:00 0 [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]
Annullato (core dump creato)

O.O Grazie per l'aiuto