~ubuntu-branches/ubuntu/lucid/wpasupplicant/lucid-updates

« back to all changes in this revision

Viewing changes to common.c

  • Committer: Bazaar Package Importer
  • Author(s): Kel Modderman
  • Date: 2006-10-05 08:04:01 UTC
  • mfrom: (1.1.5 upstream) (3 etch)
  • mto: This revision was merged to the branch mainline in revision 4.
  • Revision ID: james.westby@ubuntu.com-20061005080401-r8lqlix4390yos7b
Tags: 0.5.5-2
* Update madwifi headers to latest SVN. (Closes: #388316)
* Remove failed attempt at action locking. [debian/functions.sh,
  debian/wpa_action.sh]
* Add hysteresis checking functions, to avoid "event loops" while
  using wpa-roam. [debian/functions.sh, debian/wpa_action.sh]
* Change of co-maintainer email address.
* Add ishex() function to functions.sh to determine wpa-psk value type in
  plaintext or hex. This effectively eliminates the need for the bogus and
  somewhat confusing wpa-passphrase contruct specific to our scripts and
  allows wpa-psk to work with either a 8 to 63 character long plaintext
  string or 64 character long hex string.
* Adjust README.modes to not refer to the redundant wpa-passphrase stuff.
* Add big fat NOTE about acceptable wpa-psk's to top of example gallery.
* Strip surrounding quotes from wpa-ssid if present, instead of just whining
  about them.
* Update email address in copyright blurb of functions.sh, ifupdown.sh and
  wpa_action.sh.  

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
#include "common.h"
18
18
 
19
19
 
 
20
#ifdef CONFIG_DEBUG_FILE
 
21
static FILE *out_file = NULL;
 
22
#endif /* CONFIG_DEBUG_FILE */
 
23
int wpa_debug_use_file = 0;
20
24
int wpa_debug_level = MSG_INFO;
21
25
int wpa_debug_show_keys = 0;
22
26
int wpa_debug_timestamp = 0;
149
153
                return;
150
154
 
151
155
        os_get_time(&tv);
 
156
#ifdef CONFIG_DEBUG_FILE
 
157
        if (out_file) {
 
158
                fprintf(out_file, "%ld.%06u: ", (long) tv.sec,
 
159
                        (unsigned int) tv.usec);
 
160
        } else
 
161
#endif /* CONFIG_DEBUG_FILE */
152
162
        printf("%ld.%06u: ", (long) tv.sec, (unsigned int) tv.usec);
153
163
}
154
164
 
171
181
        va_start(ap, fmt);
172
182
        if (level >= wpa_debug_level) {
173
183
                wpa_debug_print_timestamp();
 
184
#ifdef CONFIG_DEBUG_FILE
 
185
                if (out_file) {
 
186
                        vfprintf(out_file, fmt, ap);
 
187
                        fprintf(out_file, "\n");
 
188
                } else {
 
189
#endif /* CONFIG_DEBUG_FILE */
174
190
                vprintf(fmt, ap);
175
191
                printf("\n");
 
192
#ifdef CONFIG_DEBUG_FILE
 
193
                }
 
194
#endif /* CONFIG_DEBUG_FILE */
176
195
        }
177
196
        va_end(ap);
178
197
}
185
204
        if (level < wpa_debug_level)
186
205
                return;
187
206
        wpa_debug_print_timestamp();
 
207
#ifdef CONFIG_DEBUG_FILE
 
208
        if (out_file) {
 
209
                fprintf(out_file, "%s - hexdump(len=%lu):",
 
210
                        title, (unsigned long) len);
 
211
                if (buf == NULL) {
 
212
                        fprintf(out_file, " [NULL]");
 
213
                } else if (show) {
 
214
                        for (i = 0; i < len; i++)
 
215
                                fprintf(out_file, " %02x", buf[i]);
 
216
                } else {
 
217
                        fprintf(out_file, " [REMOVED]");
 
218
                }
 
219
                fprintf(out_file, "\n");
 
220
        } else {
 
221
#endif /* CONFIG_DEBUG_FILE */
188
222
        printf("%s - hexdump(len=%lu):", title, (unsigned long) len);
189
223
        if (buf == NULL) {
190
224
                printf(" [NULL]");
195
229
                printf(" [REMOVED]");
196
230
        }
197
231
        printf("\n");
 
232
#ifdef CONFIG_DEBUG_FILE
 
233
        }
 
234
#endif /* CONFIG_DEBUG_FILE */
198
235
}
199
236
 
200
237
void wpa_hexdump(int level, const char *title, const u8 *buf, size_t len)
219
256
        if (level < wpa_debug_level)
220
257
                return;
221
258
        wpa_debug_print_timestamp();
 
259
#ifdef CONFIG_DEBUG_FILE
 
260
        if (out_file) {
 
261
                if (!show) {
 
262
                        fprintf(out_file,
 
263
                                "%s - hexdump_ascii(len=%lu): [REMOVED]\n",
 
264
                                title, (unsigned long) len);
 
265
                        return;
 
266
                }
 
267
                if (buf == NULL) {
 
268
                        fprintf(out_file,
 
269
                                "%s - hexdump_ascii(len=%lu): [NULL]\n",
 
270
                                title, (unsigned long) len);
 
271
                        return;
 
272
                }
 
273
                fprintf(out_file, "%s - hexdump_ascii(len=%lu):\n",
 
274
                        title, (unsigned long) len);
 
275
                while (len) {
 
276
                        llen = len > line_len ? line_len : len;
 
277
                        fprintf(out_file, "    ");
 
278
                        for (i = 0; i < llen; i++)
 
279
                                fprintf(out_file, " %02x", pos[i]);
 
280
                        for (i = llen; i < line_len; i++)
 
281
                                fprintf(out_file, "   ");
 
282
                        fprintf(out_file, "   ");
 
283
                        for (i = 0; i < llen; i++) {
 
284
                                if (isprint(pos[i]))
 
285
                                        fprintf(out_file, "%c", pos[i]);
 
286
                                else
 
287
                                        fprintf(out_file, "_");
 
288
                        }
 
289
                        for (i = llen; i < line_len; i++)
 
290
                                fprintf(out_file, " ");
 
291
                        fprintf(out_file, "\n");
 
292
                        pos += llen;
 
293
                        len -= llen;
 
294
                }
 
295
        } else {
 
296
#endif /* CONFIG_DEBUG_FILE */
222
297
        if (!show) {
223
298
                printf("%s - hexdump_ascii(len=%lu): [REMOVED]\n",
224
299
                       title, (unsigned long) len);
250
325
                pos += llen;
251
326
                len -= llen;
252
327
        }
 
328
#ifdef CONFIG_DEBUG_FILE
 
329
        }
 
330
#endif /* CONFIG_DEBUG_FILE */
253
331
}
254
332
 
255
333
 
265
343
        _wpa_hexdump_ascii(level, title, buf, len, wpa_debug_show_keys);
266
344
}
267
345
 
 
346
 
 
347
int wpa_debug_open_file(void)
 
348
{
 
349
#ifdef CONFIG_DEBUG_FILE
 
350
        static int count = 0;
 
351
        char fname[64];
 
352
        if (!wpa_debug_use_file)
 
353
                return 0;
 
354
#ifdef _WIN32
 
355
        snprintf(fname, sizeof(fname), "\\Temp\\wpa_supplicant-log-%d.txt",
 
356
                 count++);
 
357
#else /* _WIN32 */
 
358
        snprintf(fname, sizeof(fname), "/tmp/wpa_supplicant-log-%d.txt",
 
359
                 count++);
 
360
#endif /* _WIN32 */
 
361
        out_file = fopen(fname, "w");
 
362
        return out_file == NULL ? -1 : 0;
 
363
#else /* CONFIG_DEBUG_FILE */
 
364
        return 0;
 
365
#endif /* CONFIG_DEBUG_FILE */
 
366
}
 
367
 
 
368
 
 
369
void wpa_debug_close_file(void)
 
370
{
 
371
#ifdef CONFIG_DEBUG_FILE
 
372
        if (!wpa_debug_use_file)
 
373
                return;
 
374
        fclose(out_file);
 
375
        out_file = NULL;
 
376
#endif /* CONFIG_DEBUG_FILE */
 
377
}
 
378
 
268
379
#endif /* CONFIG_NO_STDOUT_DEBUG */
269
380
 
270
381
 
273
384
{
274
385
        size_t i;
275
386
        char *pos = buf, *end = buf + buf_size;
 
387
        int ret;
276
388
        for (i = 0; i < len; i++) {
277
 
                pos += snprintf(pos, end - pos, uppercase ? "%02X" : "%02x",
278
 
                                data[i]);
 
389
                ret = snprintf(pos, end - pos, uppercase ? "%02X" : "%02x",
 
390
                               data[i]);
 
391
                if (ret < 0 || ret >= end - pos) {
 
392
                        end[-1] = '\0';
 
393
                        return pos - buf;
 
394
                }
 
395
                pos += ret;
279
396
        }
 
397
        end[-1] = '\0';
280
398
        return pos - buf;
281
399
}
282
400
 
584
702
                memset(b, 0, size);
585
703
        return b;
586
704
}
 
705
 
 
706
 
 
707
#ifdef CONFIG_NATIVE_WINDOWS
 
708
/**
 
709
 * wpa_unicode2ascii_inplace - Convert unicode string into ASCII
 
710
 * @str: Pointer to string to convert
 
711
 *
 
712
 * This function converts a unicode string to ASCII using the same
 
713
 * buffer for output. If UNICODE is not set, the buffer is not
 
714
 * modified.
 
715
 */
 
716
void wpa_unicode2ascii_inplace(TCHAR *str)
 
717
{
 
718
#ifdef UNICODE
 
719
        char *dst = (char *) str;
 
720
        while (*str)
 
721
                *dst++ = (char) *str++;
 
722
        *dst = '\0';
 
723
#endif /* UNICODE */
 
724
}
 
725
 
 
726
 
 
727
TCHAR * wpa_strdup_tchar(const char *str)
 
728
{
 
729
#ifdef UNICODE
 
730
        TCHAR *buf;
 
731
        buf = malloc((strlen(str) + 1) * sizeof(TCHAR));
 
732
        if (buf == NULL)
 
733
                return NULL;
 
734
        wsprintf(buf, L"%S", str);
 
735
        return buf;
 
736
#else /* UNICODE */
 
737
        return strdup(str);
 
738
#endif /* UNICODE */
 
739
}
 
740
#endif /* CONFIG_NATIVE_WINDOWS */