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
Author: Sven Vermeulen
Date: Sun, 03 Nov 2002 12:11
Date: Sun, 03 Nov 2002 12:11
62 lines
2821 bytes
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
Author: Wimjan
Date: Sun, 03 Nov 2002 16:27
Date: Sun, 03 Nov 2002 16:27
43 lines
2555 bytes
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
Author: Sven Vermeulen
Date: Sun, 03 Nov 2002 17:53
Date: Sun, 03 Nov 2002 17:53
24 lines
2028 bytes
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
Author: Wimjan
Date: Sun, 03 Nov 2002 21:31
Date: Sun, 03 Nov 2002 21:31
56 lines
3188 bytes
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