Git-Url:
http://git.frugalware.org/gitweb/gitweb.cgi?p=frugalwareutils.git;a=commitdiff;h=33cb7e09df03f8865a1484b7a6f8833897c16328
commit 33cb7e09df03f8865a1484b7a6f8833897c16328
Author: Miklos Vajna <[EMAIL PROTECTED]>
Date: Mon Nov 19 11:17:08 2007 +0100
netconfig: inital support for wpa_supplicant
diff --git a/doc/netconfig.txt b/doc/netconfig.txt
index 10ef446..006b491 100644
--- a/doc/netconfig.txt
+++ b/doc/netconfig.txt
@@ -118,7 +118,22 @@ be used. If using DHCP, then this directive is ignored.
key = <key>::
Used to manipulate encryption or scrambling keys and security mode for
- wireless networks.
+ wireless networks. Use this for WEP only, use `wpa_psk` for WPA.
+
+wpa_psk = <passphrase>::
+ If this directive is specified, then wpa_supplicant will be invoked to
+ initialize WPA encryption before setting any other parameter (like
ESSID).
+
+wpa_driver = <driver>::
+ The driver to be used by wpa_supplicant. The default is `wext`.
Possible drivers
+ are:
+
+ * wext: Linux wireless extensions (generic)
+ * hostap: Host AP driver (Intersil Prism2/2.5/3)
+ * prism54: Prism54.org driver (Intersil Prism GT/Duette/Indigo)
+ * madwifi: MADWIFI 802.11 support (Atheros, etc.)
+ * atmel: ATMEL AT76C5XXx (USB, PCMCIA)
+ * ndiswrapper: Linux ndiswrapper
dhcp_opts = <options>::
These options are passed to the dhcp client daemon. The default is `-t
diff --git a/libfwnetconfig/Makefile b/libfwnetconfig/Makefile
index c20bc0b..9776b8a 100644
--- a/libfwnetconfig/Makefile
+++ b/libfwnetconfig/Makefile
@@ -25,7 +25,7 @@ LDFLAGS += $(shell pkg-config --libs glib-2.0)
CFLAGS += -I../libfwutil
LDFLAGS += -L../libfwutil -lfwutil
-SUBDIRS = po
+#SUBDIRS = po
LIBNAME = netconfig
-include ../Makefile.inc
diff --git a/libfwnetconfig/libfwnetconfig.c b/libfwnetconfig/libfwnetconfig.c
index 31dd646..1724b23 100644
--- a/libfwnetconfig/libfwnetconfig.c
+++ b/libfwnetconfig/libfwnetconfig.c
@@ -191,6 +191,10 @@ fwnet_profile_t *fwnet_parseprofile(char *fn)
strncpy(iface->mode, ptr, FWNET_MODE_MAX_SIZE);
if(!strcmp(var, "KEY") && !strlen(iface->key))
strncpy(iface->key, ptr, FWNET_ENCODING_TOKEN_MAX);
+ if(!strcmp(var, "WPA_PSK") &&
!strlen(iface->wpa_psk))
+ strncpy(iface->wpa_psk, ptr, PATH_MAX);
+ if(!strcmp(var, "WPA_DRIVER") &&
!strlen(iface->wpa_driver))
+ strncpy(iface->wpa_driver, ptr,
PATH_MAX);
if(!strcmp(var, "GATEWAY") && !strlen(iface->gateway))
strncpy(iface->gateway, ptr, FWNET_GW_MAX_SIZE);
}
@@ -272,6 +276,12 @@ int fwnet_ifdown(fwnet_interface_t *iface, fwnet_profile_t
*profile)
fwutil_system(ptr);
FWUTIL_FREE(ptr);
}
+ if(strlen(iface->wpa_psk))
+ {
+ ptr = g_strdup("killall wpa_supplicant");
+ fwutil_system(ptr);
+ FWUTIL_FREE(ptr);
+ }
if(g_list_length(iface->post_downs))
for (i=0; i<g_list_length(iface->post_downs); i++)
@@ -344,6 +354,19 @@ static int update_secrets(char *path, char *user, char
*pass)
return(0);
}
+static int update_wpa_conf(char *ssid, char *psk)
+{
+ FILE *fp;
+
+ fp = fopen("/etc/wpa_supplicant.conf", "w");
+ if(!fp)
+ return(1);
+ fprintf(fp, "ctrl_interface=/var/run/wpa_supplicant\n\n");
+ fprintf(fp, "network={\n\tssid=\"%s\"\n\tpsk=\"%s\"\n}\n", ssid, psk);
+ fclose(fp);
+ return(0);
+}
+
/** Bring up an interface
* @param iface the interface struct pointer
* @return 1 on failure, 0 on success
@@ -359,6 +382,16 @@ int fwnet_ifup(fwnet_interface_t *iface, fwnet_profile_t
*profile)
dhcp = fwnet_is_dhcp(iface);
// initialize the device
+ if(strlen(iface->wpa_psk))
+ {
+ update_wpa_conf(iface->essid, iface->wpa_psk);
+ if(strlen(iface->wpa_driver))
+ ptr = g_strdup_printf("wpa_supplicant -i%s -D%s -c
/etc/wpa_supplicant.conf -w -B", iface->name, iface->wpa_driver);
+ else
+ ptr = g_strdup_printf("wpa_supplicant -i%s -Dwext -c
/etc/wpa_supplicant.conf -w -B", iface->name);
+ ret += fwutil_system(ptr);
+ FWUTIL_FREE(ptr);
+ }
if(strlen(iface->mac))
{
ptr = g_strdup_printf("ifconfig %s hw ether %s", iface->name, iface->mac);
@@ -677,6 +710,10 @@ int fwnet_writeconfig(fwnet_profile_t *profile, char *host)
fprintf(fp, "mode = %s\n", iface->mode);
if(iface->key != NULL && strlen(iface->key))
fprintf(fp, "key = %s\n", iface->key);
+ if(iface->wpa_psk != NULL && strlen(iface->wpa_psk))
+ fprintf(fp, "wpa_psk = %s\n", iface->wpa_psk);
+ if(iface->wpa_driver != NULL && strlen(iface->wpa_driver))
+ fprintf(fp, "wpa_driver = %s\n", iface->wpa_driver);
if(fwnet_is_dhcp(iface))
{
fprintf(fp, "options = dhcp\n");
diff --git a/libfwnetconfig/libfwnetconfig.h b/libfwnetconfig/libfwnetconfig.h
index cfc9f9a..90922f3 100644
--- a/libfwnetconfig/libfwnetconfig.h
+++ b/libfwnetconfig/libfwnetconfig.h
@@ -48,6 +48,8 @@ typedef struct __fwnet_interface_t {
char essid[FWNET_ESSID_MAX_SIZE+1];
char mode[FWNET_MODE_MAX_SIZE+1];
char key[FWNET_ENCODING_TOKEN_MAX+1];
+ char wpa_psk[PATH_MAX+1];
+ char wpa_driver[PATH_MAX+1];
char gateway[FWNET_GW_MAX_SIZE+1];
} fwnet_interface_t;
diff --git a/netconfig/netconfig.c b/netconfig/netconfig.c
index 61f88bc..021d647 100644
--- a/netconfig/netconfig.c
+++ b/netconfig/netconfig.c
@@ -162,10 +162,21 @@ int dialog_config(int argc, char **argv)
NULL);
snprintf(newinterface->essid, FWNET_ESSID_MAX_SIZE, ptr);
FWUTIL_FREE(ptr);
- ptr = fwdialog_ask(_("Encryption key"), _("If you have an
encryption key, then please enter it below.\n"
+ ptr = fwdialog_ask(_("WEP encryption key"),
+ _("If you have a WEP encryption key, then please enter
it below.\n"
"Examples: 4567-89AB-CD or s:password"), NULL);
snprintf(newinterface->key, FWNET_ENCODING_TOKEN_MAX, ptr);
FWUTIL_FREE(ptr);
+ ptr = fwdialog_ask(_("WPA encryption passphrase"),
+ _("If you have a WPA passphrase, then please enter it
below.\n"
+ "Example: secret"), NULL);
+ snprintf(newinterface->wpa_psk, PATH_MAX, ptr);
+ FWUTIL_FREE(ptr);
+ ptr = fwdialog_ask(_("WPA driver"),
+ _("If you want to use a custom driver (not the generic
one, called 'wext'), then"
+ "please enter it below. If unsure, just hit enter."),
NULL);
+ snprintf(newinterface->wpa_driver, PATH_MAX, ptr);
+ FWUTIL_FREE(ptr);
}
if(!strcmp(nettype, "dhcp"))
{
_______________________________________________
Frugalware-git mailing list
[email protected]
http://frugalware.org/mailman/listinfo/frugalware-git