Hi, Sorry for the delay, here it's the patch.
regards, guillem
Index: net-retriever.c =================================================================== RCS file: /cvs/debian-boot/debian-installer/retriever/net/net-retriever.c,v retrieving revision 1.3 diff -u -r1.3 net-retriever.c --- net-retriever.c 12 Nov 2002 22:53:48 -0000 1.3 +++ net-retriever.c 19 Dec 2002 03:52:11 -0000 @@ -8,37 +8,62 @@ #include <stdlib.h> #include <stdio.h> -/* Base of the debconf question hierary used by this program. */ +/* Base of the debconf question hierarchy used by this program. */ #define DEBCONF_BASE "mirror/" +/* + * Get a protocol question value from the debconf mirror hierarchy. + * Returns the result in the value field of debconfclient. + */ +void get_mirror_protocol_value(struct debconfclient *debconf, char *protocol, + char *string) +{ + char *question; + + asprintf(&question, DEBCONF_BASE "%s/%s", protocol, string); + debconf->command(debconf, "GET", question, NULL); + free(question); +} + int main(int argc, char **argv) { int ret; char *src; char *hostname, *directory, *command; struct debconfclient *debconf = debconfclient_new(); - + if (argc < 2) exit(1); if (strcmp(argv[1], "retrieve") == 0) { + char *protocol; + if (argc < 4) exit(1); + + debconf->command(debconf, "GET", DEBCONF_BASE "protocol", NULL); + protocol = strdup(debconf->value); + /* Suck in data from the debconf database, which will be primed * with the mirror to use by choose-mirror */ - // TODO: what about ftp? - debconf->command(debconf, "GET", DEBCONF_BASE "http/hostname", NULL); + get_mirror_protocol_value(debconf, protocol, "hostname"); hostname = strdup(debconf->value); - debconf->command(debconf, "GET", DEBCONF_BASE "http/directory", NULL); + + get_mirror_protocol_value(debconf, protocol, "directory"); directory = strdup(debconf->value); - debconf->command(debconf, "GET", DEBCONF_BASE "http/proxy", NULL); + + get_mirror_protocol_value(debconf, protocol, "proxy"); if (debconf->value && strcmp(debconf->value,"") != 0) { - if (setenv("http_proxy", debconf->value, 1) == -1) + char *env_variable; + + asprintf(&env_variable, "%s_proxy", protocol); + if (setenv(env_variable, debconf->value, 1) == -1) exit(1); + free(env_variable); } - src=argv[2]; - asprintf(&command, "wget -c -q http://%s%s/%s -O %s", hostname, - directory, src, argv[3]); - fprintf(stderr,"wget: %s\n", command); - ret=system(command); + src = argv[2]; + asprintf(&command, "wget -c -q %s://%s%s/%s -O %s", protocol, + hostname, directory, src, argv[3]); + fprintf(stderr, "wget: %s\n", command); + ret = system(command); if (ret == 256) return 1; return ret; @@ -47,3 +72,4 @@ return 1; } } +