🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: be.comp.programming
4 messages
4 total messages Started by Sven Vermeulen Sun, 03 Nov 2002 12:11
[C] gethostbyname en setenv werken niet samen
#6922
Author: Sven Vermeulen
Date: Sun, 03 Nov 2002 12:11
62 lines
2821 bytes
Voor een opgave moeten we in C een programma schrijven die een hosts-file
(zoals in /etc/hosts of %windowsroot%system32\drivers\etc\hosts) inleest
alsook een alias (e.g. "localhost") en er de IP van retourneert (e.g.
"127.0.0.1").

Het is echter wel de bedoeling dat niet de normale (i.e.
systeemgedefinieerde) hosts-file _en_ DNS-server(s) worden geraadpleegt, maar
enkel een zelf-te-definieren hosts-file.

Nu had ik geen goesting om nen ganse functie te schrijven die zo'n file
inleest, de nodige struct's aanmaakt e.d. dus wou ik gebruik maken van
gethostbyname. In de manpage van gethostnyname staat dat het mogelijk is om
de hosts-file van een andere plaats te raadplegen als deze gedefinieerd is in
de globale (omgevings)variabele HOSTALIASES. Dus wou ik via setenv die
variabele instellen op een andere locatie, maar zonder success :( Blijkbaar
wordt er niet naar die setenv geluisterd...

Kent er iemand een andere manier of ben ik toch verplicht om manueel de
hosts-file te gaan inlezen e.d. ?

De code:

/* 
 * Opgave 2 - Oefening 4 : Parse a hosts-file and query it
 *
 * 		Sven Vermeulen <sven.vermeulen@rug.ac.be>
 *
 */

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

struct hostent *host;

int main(void) {
	char alias[251];
	int count = 0;
	
	printf("Alias: ");
	scanf("%250s", alias);

	setenv("HOSTALIASES", "/home/swift/work/rug/pii/oef4/opgave2/hosts");

	if ((host = gethostbyname(alias)) == NULL) {
		perror("No IP found for that alias.\n");
		exit(1);
	}

	printf("The hosts IP(s) is/are: \n");
	
	while(host->h_addr_list[count]) {
		printf(" \n   %u.%u.%u.%u",
			(unsigned char) host->h_addr_list[count][0],
			(unsigned char) host->h_addr_list[count][1],
			(unsigned char) host->h_addr_list[count][2],
			(unsigned char) host->h_addr_list[count][3]);
		count++;
	}

	return 0;
}
Re: [C] gethostbyname en setenv werken niet samen
#6923
Author: Wimjan
Date: Sun, 03 Nov 2002 16:27
43 lines
2555 bytes
Sven Vermeulen schreef:

> In de manpage van gethostnyname staat dat het mogelijk is om
> de hosts-file van een andere plaats te raadplegen als deze gedefinieerd is in
> de globale (omgevings)variabele HOSTALIASES. Dus wou ik via setenv die
> variabele instellen op een andere locatie, maar zonder success :( Blijkbaar
> wordt er niet naar die setenv geluisterd...
> 

> De code:
[...]
> 	setenv("HOSTALIASES", "/home/swift/work/rug/pii/oef4/opgave2/hosts");

Ik lees in de manual van setenv dat je drie parameters kunt meegeven:

int setenv(const char *name, const char *value, int overwrite);

waarbij de laatste ervoor zorgt dat de omgevingsvariabele wordt 
overschreven mocht die bestaan:

The setenv() function inserts or resets the environment variable name in 
the current environment list.  If the variable name does not exist in the 
list, it is inserted with the given value.  If the variable does exist, 
the argument overwrite is tested; if overwrite is zero, the variable is 
not reset, otherwise it is reset to the given value.

Citaat van <http://netbsd.gw.com/cgi-bin/man-cgi?setenv+3>.

Wellicht dat je omgevingsvariabele dus al bestaat?

Verder staat in de documentatie van gethostbyname dat alleen "If the name 
contains no dot, and if the environment variable ``HOSTALIASES'' contains 
the name of an alias file, the alias file will first be searched for an 
alias matching the input name." Dus je alias-bestand wordt blijkbaar 
alleen geraadpleegd als er geen punt in je hostname staat.

Groet,

Wimjan

-- 
Iemands e-mailadres kwijt? Probeer m'n meta e-mail zoeker eens op 
<http://inventio.nl/metanamesearch/>
Re: [C] gethostbyname en setenv werken niet samen
#6924
Author: Sven Vermeulen
Date: Sun, 03 Nov 2002 17:53
24 lines
2028 bytes
On Sun, 3 Nov 2002 17:27:21 +0100, Wimjan <news+@inventio.nl> wrote:
>  
>  int setenv(const char *name, const char *value, int overwrite);
>  
>  waarbij de laatste ervoor zorgt dat de omgevingsvariabele wordt 
>  overschreven mocht die bestaan:

Just, ja, is ook aangepast in de code... khad een oude versie getoond.  

>  Citaat van <http://netbsd.gw.com/cgi-bin/man-cgi?setenv+3>.
>  
>  Wellicht dat je omgevingsvariabele dus al bestaat?
>  
>  Verder staat in de documentatie van gethostbyname dat alleen "If the name 
>  contains no dot, and if the environment variable ``HOSTALIASES'' contains 
>  the name of an alias file, the alias file will first be searched for an 
>  alias matching the input name." Dus je alias-bestand wordt blijkbaar 
>  alleen geraadpleegd als er geen punt in je hostname staat.

De gegeven alias is zonder punten en de setenv() is aangepast zodat er een
derde argument, 1, bijstaat.

Mvg,
	Sven Vermeulen
Re: [C] gethostbyname en setenv werken niet samen
#6925
Author: Wimjan
Date: Sun, 03 Nov 2002 21:31
56 lines
3188 bytes
Sven Vermeulen schreef:
> On Sun, 3 Nov 2002 17:27:21 +0100, Wimjan <news+@inventio.nl> wrote:
> >  
> >  int setenv(const char *name, const char *value, int overwrite);
> >  
> >  waarbij de laatste ervoor zorgt dat de omgevingsvariabele wordt 
> >  overschreven mocht die bestaan:
> 
> Just, ja, is ook aangepast in de code... khad een oude versie getoond.  
>
Prima.
 
> >  Citaat van <http://netbsd.gw.com/cgi-bin/man-cgi?setenv+3>.
> >  
> >  Wellicht dat je omgevingsvariabele dus al bestaat?
> >  
> >  Verder staat in de documentatie van gethostbyname dat alleen "If the name 
> >  contains no dot, and if the environment variable ``HOSTALIASES'' contains 
> >  the name of an alias file, the alias file will first be searched for an 
> >  alias matching the input name." Dus je alias-bestand wordt blijkbaar 
> >  alleen geraadpleegd als er geen punt in je hostname staat.
> 
> De gegeven alias is zonder punten en de setenv() is aangepast zodat er een
> derde argument, 1, bijstaat.
>
En, werkt het nu?

Zo niet: wellicht mag je scriptje (als het al een script is, dat meld 
je niet) geen omgevingsvariabelen zetten? Ik zou me kunnen voorstellen 
dat als het scriptje bijvoorbeeld als nobody draait zoiets niet is 
toegestaan maar 'k weet er echter te weinig van af om hier meer over te 
kunnen zeggen.

Het lijkt me makkelijk te testen of je omgevingsvariabele gezet is: lees 
het verderop in je programma eens uit en kijk of het de door jou gezette 
waarde heeft. Als dit het probleem blijkt dan is er vast wel iemand die 
voor jouw besturingssysteem (dat je helaas niet noemt) een oplossing 
heeft hier. Of anders in een andere groep die speciaal over dat 
besturingssysteem gaat.

Als dit niet het probleem is dan ligt het misschien toch aan de 
implementatie van gethostbyname op jouw OS. Wellicht helpt 
<http://groups.google.com/groups?th=95dfda3e77c890da> of 
<http://groups.google.com/groups?th=ecf1bb59b4a97ba4> of een andere 
thread op <http://groups.google.com/groups?q=setenv+HOSTALIASES>?

> Mvg,
> 	Sven Vermeulen

Groet,

Wimjan

-- 
Iemands e-mailadres kwijt? Probeer m'n meta e-mail zoeker eens op 
<http://inventio.nl/metanamesearch/>
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads