--- ChangeLog | 4 ++++ modules/cfgfile.c | 49 +++++++++++++++++++++++++++++-------------------- 2 files changed, 33 insertions(+), 20 deletions(-) --- ChangeLog.orig +++ ChangeLog @@ -1,5 +1,9 @@ +2008-12-18 Florian Boor + + * cfgfile.c: Some fixes to wifi key string generation. + 2008-05-23 Florian Boor * Relase version 0.2.7 * Update translations --- modules/cfgfile.c.orig +++ modules/cfgfile.c @@ -1,8 +1,8 @@ /* * - * Copyright (C) 2002, 2003 Florian Boor + * Copyright (C) 2002, 2003, 2008 Florian Boor * 2004 Ole Reinhardt * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version @@ -128,12 +128,10 @@ gint get_param_val(gchar* line, gchar* p for (b=a+1;b 0) value=strncpy(value,&line[a],b-a); if ((b-a) > 0) value=strncpy(value,&line[a],b-a); value[b-a]='\0'; return 0; } @@ -562,15 +560,17 @@ gchar *get_iflist() strncat(result," ",255); } return result; } -void get_wifikey_string(NWInterface_t iface, char* key) +void get_wifikey_string(NWInterface_t iface, gchar** key) { gint nokeys = FALSE; gint count; gchar temp[42]; + gchar *lkey = g_strdup(""), *t; + if ((strlen(iface.key[0]) == 0) && (strlen(iface.key[1]) == 0) && (strlen(iface.key[2]) == 0) && (strlen(iface.key[3]) == 0)) @@ -581,29 +581,36 @@ void get_wifikey_string(NWInterface_t if if (strlen(iface.key[iface.keynr-1]) == 0) for (iface.keynr = 1; iface.keynr <=4; iface.keynr++) if (strlen(iface.key[iface.keynr-1]) != 0) break; - switch (iface.encmode) - { - case ENC_OFF: strcpy(key, "off"); break; - case ENC_OPEN: strcpy(key, "open"); break; - case ENC_RESTRICTED: strcpy(key, "restricted"); break; - } - if (!nokeys) { for (count = 0; count < 4; count++) if (strlen(iface.key[count]) > 0) { - sprintf(temp, " key %s [%d]", iface.key[count], count+1); - strcat(key, temp); + t = lkey; + lkey = g_strdup_printf("%s key %s [%d]", lkey, iface.key[count], count+1); + g_free(t); } - sprintf(temp, " key [%d]", iface.keynr); - strcat(key, temp); + t = lkey; + lkey = g_strdup_printf(" %s key [%d]", lkey, iface.keynr); + g_free(t); } + + t = lkey; + switch (iface.encmode) + { + case ENC_OPEN: lkey = g_strdup_printf ("%s key open", lkey); break; + case ENC_RESTRICTED: lkey = g_strdup_printf("%s key restricted", lkey); break; + case ENC_OFF: lkey = g_strdup_printf("%s key off", lkey); break; + default: lkey = g_strdup_printf("%s key off", lkey); break; + } + g_free(t); + + *key = lkey; } gint write_sections() { gint i,j; @@ -613,11 +620,11 @@ gint write_sections() gchar paramval[255]; gchar ifname[255]; gint svd[14]; gint lastwpos = 0; gint last_i; - gchar key[128]; + gchar *key; for (i=0;i 0) { sprintf(outstr,"\twireless_channel %s",iflist[i].channel); add_line(configlen,outstr); } - get_wifikey_string(iflist[i], key); - sprintf(outstr,"\twireless_key %s",key); + get_wifikey_string(iflist[i], &key); + sprintf(outstr,"\twireless_key %s",key); + g_free(key); add_line(configlen,outstr); } } //if status