Module Name: src Committed By: nia Date: Mon Jan 10 12:17:48 UTC 2022
Modified Files: src/usr.sbin/sysinst: msg.mi.de msg.mi.en msg.mi.es msg.mi.fr msg.mi.pl net.c Log Message: sysinst(8): Add initial support for connecting to Wi-Fi networks by spawning wpa_supplicant. Reviewed by martin. To generate a diff of this commit: cvs rdiff -u -r1.34 -r1.35 src/usr.sbin/sysinst/msg.mi.de cvs rdiff -u -r1.36 -r1.37 src/usr.sbin/sysinst/msg.mi.en \ src/usr.sbin/sysinst/msg.mi.pl src/usr.sbin/sysinst/net.c cvs rdiff -u -r1.30 -r1.31 src/usr.sbin/sysinst/msg.mi.es cvs rdiff -u -r1.35 -r1.36 src/usr.sbin/sysinst/msg.mi.fr Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.sbin/sysinst/msg.mi.de diff -u src/usr.sbin/sysinst/msg.mi.de:1.34 src/usr.sbin/sysinst/msg.mi.de:1.35 --- src/usr.sbin/sysinst/msg.mi.de:1.34 Sat Sep 25 08:54:31 2021 +++ src/usr.sbin/sysinst/msg.mi.de Mon Jan 10 12:17:48 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: msg.mi.de,v 1.34 2021/09/25 08:54:31 maya Exp $ */ +/* $NetBSD: msg.mi.de,v 1.35 2022/01/10 12:17:48 nia Exp $ */ /* * Copyright 1997 Piermont Information Systems Inc. @@ -641,6 +641,12 @@ message net_defroute message net_media {Art der Netzwerkverbindung} +message net_ssid +{WLAN-SSID?} + +message net_passphrase +{WLAN-Passwort?} + message netok {Nachfolgend sehen Sie die aktuellen Netzwerkeinstellungen. Index: src/usr.sbin/sysinst/msg.mi.en diff -u src/usr.sbin/sysinst/msg.mi.en:1.36 src/usr.sbin/sysinst/msg.mi.en:1.37 --- src/usr.sbin/sysinst/msg.mi.en:1.36 Sat Sep 25 08:54:31 2021 +++ src/usr.sbin/sysinst/msg.mi.en Mon Jan 10 12:17:48 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: msg.mi.en,v 1.36 2021/09/25 08:54:31 maya Exp $ */ +/* $NetBSD: msg.mi.en,v 1.37 2022/01/10 12:17:48 nia Exp $ */ /* * Copyright 1997 Piermont Information Systems Inc. @@ -616,6 +616,12 @@ message net_defroute message net_media {Network media type} +message net_ssid +{Wi-Fi SSID?} + +message net_passphrase +{Wi-Fi passphrase?} + message netok {The following are the values you entered. Index: src/usr.sbin/sysinst/msg.mi.pl diff -u src/usr.sbin/sysinst/msg.mi.pl:1.36 src/usr.sbin/sysinst/msg.mi.pl:1.37 --- src/usr.sbin/sysinst/msg.mi.pl:1.36 Sat Sep 25 08:54:31 2021 +++ src/usr.sbin/sysinst/msg.mi.pl Mon Jan 10 12:17:48 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: msg.mi.pl,v 1.36 2021/09/25 08:54:31 maya Exp $ */ +/* $NetBSD: msg.mi.pl,v 1.37 2022/01/10 12:17:48 nia Exp $ */ /* Based on english version: */ /* NetBSD: msg.mi.pl,v 1.36 2004/04/17 18:55:35 atatat Exp */ @@ -611,6 +611,12 @@ message net_defroute message net_media {Typ interfejsu sieciowego} +message net_ssid +{Wi-Fi SSID?} + +message net_passphrase +{Wi-Fi passphrase?} + message netok {Ponizej sa wartosci, ktore wprowadziles. Index: src/usr.sbin/sysinst/net.c diff -u src/usr.sbin/sysinst/net.c:1.36 src/usr.sbin/sysinst/net.c:1.37 --- src/usr.sbin/sysinst/net.c:1.36 Sun Jan 31 22:45:46 2021 +++ src/usr.sbin/sysinst/net.c Mon Jan 10 12:17:48 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: net.c,v 1.36 2021/01/31 22:45:46 rillig Exp $ */ +/* $NetBSD: net.c,v 1.37 2022/01/10 12:17:48 nia Exp $ */ /* * Copyright 1997 Piermont Information Systems Inc. @@ -79,6 +79,8 @@ static char net_mask[SSTRSIZE]; char net_namesvr[STRSIZE]; static char net_defroute[STRSIZE]; static char net_media[STRSIZE]; +static char net_ssid[STRSIZE]; +static char net_passphrase[STRSIZE]; static char sl_flags[STRSIZE]; static int net_dhcpconf; #define DHCPCONF_IPADDR 0x01 @@ -100,8 +102,11 @@ static char *url_encode (char *dst, cons static void write_etc_hosts(FILE *f); #define DHCPCD "/sbin/dhcpcd" +#define WPA_SUPPLICANT "/usr/sbin/wpa_supplicant" #include <signal.h> +static int config_eth_medium(char *); static int config_dhcp(char *); +static int config_wlan(char *); #ifdef INET6 static int is_v6kernel (void); @@ -562,45 +567,8 @@ again: /* domain and host */ msg_display(MSG_netinfo); - /* ethernet medium */ - for (;;) { - msg_prompt_add(MSG_net_media, net_media, net_media, - sizeof net_media); - - /* - * ifconfig does not allow media specifiers on - * IFM_MANUAL interfaces. Our UI gives no way - * to set an option back - * to null-string if it gets accidentally set. - * Check for plausible alternatives. - */ - if (strcmp(net_media, "<default>") == 0 || - strcmp(net_media, "default") == 0 || - strcmp(net_media, "<manual>") == 0 || - strcmp(net_media, "manual") == 0 || - strcmp(net_media, "<none>") == 0 || - strcmp(net_media, "none") == 0 || - strcmp(net_media, " ") == 0) { - *net_media = '\0'; - } - - if (*net_media == '\0') - break; - /* - * We must set the media type here - to give dhcp - * a chance - */ - if (run_program(0, "/sbin/ifconfig %s media %s", - net_dev, net_media) == 0) - break; - /* Failed to set - output the supported values */ - if (collect(T_OUTPUT, &textbuf, "/sbin/ifconfig -m %s |" - "while IFS=; read line;" - " do [ \"$line\" = \"${line#*media}\" ] || " - "echo $line;" - " done", net_dev ) > 0) - msg_display(textbuf); - free(textbuf); + if (!config_wlan(net_dev)) { + config_eth_medium(net_dev); } net_dhcpconf = 0; @@ -1092,6 +1060,10 @@ mnt_net_config(void) if (net_namesvr[0] != '\0') dup_file_into_target("/etc/resolv.conf"); + /* Copy wpa_supplicant.conf to target. */ + if (net_ssid[0] != '\0') + dup_file_into_target("/etc/wpa_supplicant.conf"); + /* * bring the interface up, it will be necessary for IPv6, and * it won't make trouble with IPv4 case either @@ -1149,6 +1121,11 @@ mnt_net_config(void) add_rc_conf("dhcpcd_flags=\"-qM %s\"\n", net_dev); } + if (net_ssid[0] != '\0') { + add_rc_conf("wpa_supplicant=YES\n"); + add_rc_conf("wpa_supplicant_flags=\"-B -s -i %s -D bsd -c /etc/wpa_supplicant.conf\"\n", net_dev); + } + if (ifconf) fclose(ifconf); @@ -1156,6 +1133,62 @@ mnt_net_config(void) } int +config_wlan(char *inter) +{ + FILE *wpa_conf = NULL; + char wpa_cmd[256]; + + if (!file_mode_match(WPA_SUPPLICANT, S_IFREG)) + return 0; + + msg_prompt_add(MSG_net_ssid, net_ssid, net_ssid, + sizeof net_ssid); + if (net_ssid[0] == '\0') + return 0; + + msg_prompt_noecho(MSG_net_passphrase, net_passphrase, net_passphrase, + sizeof net_passphrase); + + wpa_conf = fopen("/etc/wpa_supplicant.conf", "a"); + if (wpa_conf == NULL) + return 0; + + scripting_fprintf(NULL, + "cat <<EOF >>%s/etc/wpa_supplicant.conf\n", + target_prefix()); + scripting_fprintf(wpa_conf, "\n#\n"); + scripting_fprintf(wpa_conf, "# Added by NetBSD sysinst\n"); + scripting_fprintf(wpa_conf, "#\n"); + scripting_fprintf(wpa_conf, "network={\n"); + scripting_fprintf(wpa_conf, + "\tssid=\"%s\"\n", net_ssid); + if (net_passphrase[0] != '\0') { + scripting_fprintf(wpa_conf, "\tpsk=\"%s\"\n", + net_passphrase); + } else { + scripting_fprintf(wpa_conf, "\tkey_mgmt=NONE\n"); + } + scripting_fprintf(wpa_conf, "}\n"); + (void)fclose(wpa_conf); + scripting_fprintf(NULL, "EOF\n"); + + if (run_program(RUN_DISPLAY | RUN_PROGRESS, + "/sbin/ifconfig %s up", inter) != 0) + return 0; + + /* + * have to use system() here to avoid the server process dying + */ + if (snprintf(wpa_cmd, sizeof(wpa_cmd), + WPA_SUPPLICANT + " -B -s -i %s -D bsd -c /etc/wpa_supplicant.conf", inter) < 0) + return 0; + (void)do_system(wpa_cmd); + + return 1; +} + +int config_dhcp(char *inter) { int dhcpautoconf; @@ -1176,3 +1209,51 @@ config_dhcp(char *inter) } return 0; } + + +int +config_eth_medium(char *inter) +{ + char *textbuf = NULL; + + for (;;) { + msg_prompt_add(MSG_net_media, net_media, net_media, + sizeof net_media); + + /* + * ifconfig does not allow media specifiers on + * IFM_MANUAL interfaces. Our UI gives no way + * to set an option back + * to null-string if it gets accidentally set. + * Check for plausible alternatives. + */ + if (strcmp(net_media, "<default>") == 0 || + strcmp(net_media, "default") == 0 || + strcmp(net_media, "<manual>") == 0 || + strcmp(net_media, "manual") == 0 || + strcmp(net_media, "<none>") == 0 || + strcmp(net_media, "none") == 0 || + strcmp(net_media, " ") == 0) { + *net_media = '\0'; + } + + if (*net_media == '\0') + break; + /* + * We must set the media type here - to give dhcp + * a chance + */ + if (run_program(0, "/sbin/ifconfig %s media %s", + net_dev, net_media) == 0) + break; + /* Failed to set - output the supported values */ + if (collect(T_OUTPUT, &textbuf, "/sbin/ifconfig -m %s |" + "while IFS=; read line;" + " do [ \"$line\" = \"${line#*media}\" ] || " + "echo $line;" + " done", net_dev ) > 0) + msg_display(textbuf); + free(textbuf); + } + return 0; +} Index: src/usr.sbin/sysinst/msg.mi.es diff -u src/usr.sbin/sysinst/msg.mi.es:1.30 src/usr.sbin/sysinst/msg.mi.es:1.31 --- src/usr.sbin/sysinst/msg.mi.es:1.30 Sat Sep 25 08:54:31 2021 +++ src/usr.sbin/sysinst/msg.mi.es Mon Jan 10 12:17:48 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: msg.mi.es,v 1.30 2021/09/25 08:54:31 maya Exp $ */ +/* $NetBSD: msg.mi.es,v 1.31 2022/01/10 12:17:48 nia Exp $ */ /* * Copyright 1997 Piermont Information Systems Inc. @@ -632,6 +632,12 @@ message net_defroute message net_media {Tipo de medio de la red} +message net_ssid +{Wi-Fi SSID?} + +message net_passphrase +{Wi-Fi passphrase?} + message netok {Ha introducido los siguientes valores. Index: src/usr.sbin/sysinst/msg.mi.fr diff -u src/usr.sbin/sysinst/msg.mi.fr:1.35 src/usr.sbin/sysinst/msg.mi.fr:1.36 --- src/usr.sbin/sysinst/msg.mi.fr:1.35 Sat Sep 25 08:54:31 2021 +++ src/usr.sbin/sysinst/msg.mi.fr Mon Jan 10 12:17:48 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: msg.mi.fr,v 1.35 2021/09/25 08:54:31 maya Exp $ */ +/* $NetBSD: msg.mi.fr,v 1.36 2022/01/10 12:17:48 nia Exp $ */ /* * Copyright 1997 Piermont Information Systems Inc. @@ -626,6 +626,12 @@ message net_defroute message net_media {Type de réseau (média)} +message net_ssid +{Wi-Fi SSID?} + +message net_passphrase +{Wi-Fi passphrase?} + message netok {Vous avez spécifié les valeurs suivantes :