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

Reply via email to