View Single Post
Old 13-03-2010, 18:14   #1
Manugal
Senior Member
 
L'Avatar di Manugal
 
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
[C] Permessi di root su demone

Ciao a tutti!

Sto programmando un mail server sotto Linux. Nel momento in cui vado a fare la bind() sulla porta 110 mi ritorna l'errore Permission Denied. Leggendo su vari thread ho scoperto che per le porte sotto la 1024 bisogna essere root (però su Windows questo non accade, infatti la bind() funziona normalmente anche sulla porta 110). Ora siccome ho creato un demone per eseguire l'intero mail server, vorrei capire se c'è la possibilità di fare il bind di questa porta (ho letto che bisognerebbe mettere il demone sotto /etc/init.d ma non ho capito bene cosa devo fare).

Edit: Questo è il codice con il quale configuro i socket:

Codice:
void setMTSocket()
{
	#ifdef _WIN32	
	WSADATA WSStartData;
	if(WSAStartup(MAKEWORD (2,2), &WSStartData) != 0)
		PrintError("Can't support WinSock v2.2: ");
	#endif	
	struct sockaddr_in POP3SAddr;
	memset(&POP3SAddr,0,sizeof(POP3SAddr));
	POP3Socket = socket(PF_INET,SOCK_STREAM,0);
	if(POP3Socket == INVALID_SOCKET)
		PrintError("Failed POP3 socket() call: ");
	POP3SAddr.sin_family = AF_INET;
	POP3SAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
	POP3SAddr.sin_port = htons((uint16_t) cfgParams->POP3Port);
	if(bind(POP3Socket,(struct sockaddr *)&POP3SAddr,sizeof(struct sockaddr_in)) == SOCKET_ERROR)
		PrintError("Failed POP3 bind() call: ");
	if (listen(POP3Socket,cfgParams->numOfThrds) != 0)		
		PrintError("Failed POP3 listen() call: ");
	struct sockaddr_in SMTPSAddr;
	memset(&SMTPSAddr,0,sizeof(SMTPSAddr));
	SMTPSocket = socket(PF_INET,SOCK_STREAM,0);
	if(SMTPSocket == INVALID_SOCKET)
		PrintError("Failed SMTP socket() call: ");
	SMTPSAddr.sin_family = AF_INET;
	SMTPSAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
	SMTPSAddr.sin_port = htons((uint16_t) cfgParams->SMTPPort);
	if(bind(SMTPSocket,(struct sockaddr *)&SMTPSAddr,sizeof(struct sockaddr_in)) == SOCKET_ERROR)
		PrintError("Failed SMTP bind() call: ");
	if(listen(SMTPSocket,cfgParams->numOfThrds) != 0)
		PrintError("Failed SMTP listen() call: ");
	return;
}
__________________
Intel Core 2 Duo Q6600 G0, 4GB DDR2-800 A-Data, ABIT AB9, XFX GeForce 8800 GTS 320MB, Sound Blaster X-Fi Extreme Music, Seagate 320GB SATA2, Maxtor 80GB ATA-133, Western Digital 1TB SATA2

Ho concluso affari positivamente con: scandalf, Sinclair63, mstella, checcodag, wilson

Ultima modifica di Manugal : 13-03-2010 alle 18:22.
Manugal è offline   Rispondi citando il messaggio o parte di esso