Lines Matching refs:pac
50 void eap_teap_free_pac(struct eap_teap_pac *pac) in eap_teap_free_pac() argument
52 os_free(pac->pac_opaque); in eap_teap_free_pac()
53 os_free(pac->pac_info); in eap_teap_free_pac()
54 os_free(pac->a_id); in eap_teap_free_pac()
55 os_free(pac->i_id); in eap_teap_free_pac()
56 os_free(pac->a_id_info); in eap_teap_free_pac()
57 os_free(pac); in eap_teap_free_pac()
73 struct eap_teap_pac *pac = pac_root; in eap_teap_get_pac() local
75 while (pac) { in eap_teap_get_pac()
76 if (pac->pac_type == pac_type && pac->a_id_len == a_id_len && in eap_teap_get_pac()
77 os_memcmp(pac->a_id, a_id, a_id_len) == 0) { in eap_teap_get_pac()
78 return pac; in eap_teap_get_pac()
80 pac = pac->next; in eap_teap_get_pac()
90 struct eap_teap_pac *pac, *prev; in eap_teap_remove_pac() local
92 pac = *pac_root; in eap_teap_remove_pac()
95 while (pac) { in eap_teap_remove_pac()
96 if (pac->pac_type == pac_type && pac->a_id_len == a_id_len && in eap_teap_remove_pac()
97 os_memcmp(pac->a_id, a_id, a_id_len) == 0) { in eap_teap_remove_pac()
99 *pac_root = pac->next; in eap_teap_remove_pac()
101 prev->next = pac->next; in eap_teap_remove_pac()
102 if (*pac_current == pac) in eap_teap_remove_pac()
104 eap_teap_free_pac(pac); in eap_teap_remove_pac()
107 prev = pac; in eap_teap_remove_pac()
108 pac = pac->next; in eap_teap_remove_pac()
142 struct eap_teap_pac *pac; in eap_teap_add_pac() local
152 pac = os_zalloc(sizeof(*pac)); in eap_teap_add_pac()
153 if (!pac) in eap_teap_add_pac()
156 pac->pac_type = entry->pac_type; in eap_teap_add_pac()
157 os_memcpy(pac->pac_key, entry->pac_key, EAP_TEAP_PAC_KEY_LEN); in eap_teap_add_pac()
158 if (eap_teap_copy_buf(&pac->pac_opaque, &pac->pac_opaque_len, in eap_teap_add_pac()
160 eap_teap_copy_buf(&pac->pac_info, &pac->pac_info_len, in eap_teap_add_pac()
162 eap_teap_copy_buf(&pac->a_id, &pac->a_id_len, in eap_teap_add_pac()
164 eap_teap_copy_buf(&pac->i_id, &pac->i_id_len, in eap_teap_add_pac()
166 eap_teap_copy_buf(&pac->a_id_info, &pac->a_id_info_len, in eap_teap_add_pac()
168 eap_teap_free_pac(pac); in eap_teap_add_pac()
172 pac->next = *pac_root; in eap_teap_add_pac()
173 *pac_root = pac; in eap_teap_add_pac()
300 static const char * eap_teap_parse_start(struct eap_teap_pac **pac) in eap_teap_parse_start() argument
302 if (*pac) in eap_teap_parse_start()
305 *pac = os_zalloc(sizeof(struct eap_teap_pac)); in eap_teap_parse_start()
306 if (!(*pac)) in eap_teap_parse_start()
308 (*pac)->pac_type = PAC_TYPE_TUNNEL_PAC; in eap_teap_parse_start()
314 struct eap_teap_pac **pac) in eap_teap_parse_end()
316 if (!(*pac)) in eap_teap_parse_end()
323 end->next = *pac; in eap_teap_parse_end()
325 *pac_root = *pac; in eap_teap_parse_end()
327 *pac = NULL; in eap_teap_parse_end()
332 static const char * eap_teap_parse_pac_type(struct eap_teap_pac *pac, in eap_teap_parse_pac_type() argument
337 pac->pac_type = atoi(pos); in eap_teap_parse_pac_type()
338 if (pac->pac_type != PAC_TYPE_TUNNEL_PAC) in eap_teap_parse_pac_type()
345 static const char * eap_teap_parse_pac_key(struct eap_teap_pac *pac, char *pos) in eap_teap_parse_pac_key() argument
356 os_memcpy(pac->pac_key, key, EAP_TEAP_PAC_KEY_LEN); in eap_teap_parse_pac_key()
363 static const char * eap_teap_parse_pac_opaque(struct eap_teap_pac *pac, in eap_teap_parse_pac_opaque() argument
366 os_free(pac->pac_opaque); in eap_teap_parse_pac_opaque()
367 pac->pac_opaque = eap_teap_parse_hex(pos, &pac->pac_opaque_len); in eap_teap_parse_pac_opaque()
368 if (!pac->pac_opaque) in eap_teap_parse_pac_opaque()
374 static const char * eap_teap_parse_a_id(struct eap_teap_pac *pac, char *pos) in eap_teap_parse_a_id() argument
376 os_free(pac->a_id); in eap_teap_parse_a_id()
377 pac->a_id = eap_teap_parse_hex(pos, &pac->a_id_len); in eap_teap_parse_a_id()
378 if (!pac->a_id) in eap_teap_parse_a_id()
384 static const char * eap_teap_parse_i_id(struct eap_teap_pac *pac, char *pos) in eap_teap_parse_i_id() argument
386 os_free(pac->i_id); in eap_teap_parse_i_id()
387 pac->i_id = eap_teap_parse_hex(pos, &pac->i_id_len); in eap_teap_parse_i_id()
388 if (!pac->i_id) in eap_teap_parse_i_id()
394 static const char * eap_teap_parse_a_id_info(struct eap_teap_pac *pac, in eap_teap_parse_a_id_info() argument
397 os_free(pac->a_id_info); in eap_teap_parse_a_id_info()
398 pac->a_id_info = eap_teap_parse_hex(pos, &pac->a_id_info_len); in eap_teap_parse_a_id_info()
399 if (!pac->a_id_info) in eap_teap_parse_a_id_info()
416 struct eap_teap_pac *pac = NULL; in eap_teap_load_pac() local
437 err = eap_teap_parse_start(&pac); in eap_teap_load_pac()
439 err = eap_teap_parse_end(pac_root, &pac); in eap_teap_load_pac()
441 } else if (!pac) in eap_teap_load_pac()
444 err = eap_teap_parse_pac_type(pac, pos); in eap_teap_load_pac()
446 err = eap_teap_parse_pac_key(pac, pos); in eap_teap_load_pac()
448 err = eap_teap_parse_pac_opaque(pac, pos); in eap_teap_load_pac()
450 err = eap_teap_parse_a_id(pac, pos); in eap_teap_load_pac()
452 err = eap_teap_parse_i_id(pac, pos); in eap_teap_load_pac()
454 err = eap_teap_parse_a_id_info(pac, pos); in eap_teap_load_pac()
457 if (pac) { in eap_teap_load_pac()
460 eap_teap_free_pac(pac); in eap_teap_load_pac()
579 static int eap_teap_add_pac_data(struct eap_teap_pac *pac, char **buf, in eap_teap_add_pac_data() argument
585 "START\nPAC-Type=%d\n", pac->pac_type); in eap_teap_add_pac_data()
591 pac->pac_key, EAP_TEAP_PAC_KEY_LEN, 0); in eap_teap_add_pac_data()
593 pac->pac_opaque, pac->pac_opaque_len, 0); in eap_teap_add_pac_data()
595 pac->pac_info, pac->pac_info_len, 0); in eap_teap_add_pac_data()
597 pac->a_id, pac->a_id_len, 0); in eap_teap_add_pac_data()
599 pac->i_id, pac->i_id_len, 1); in eap_teap_add_pac_data()
601 pac->a_id_info, pac->a_id_info_len, 1); in eap_teap_add_pac_data()
625 struct eap_teap_pac *pac; in eap_teap_save_pac() local
645 pac = pac_root; in eap_teap_save_pac()
646 while (pac) { in eap_teap_save_pac()
647 if (eap_teap_add_pac_data(pac, &buf, &pos, &buf_len)) { in eap_teap_save_pac()
652 pac = pac->next; in eap_teap_save_pac()
676 struct eap_teap_pac *pac, *prev; in eap_teap_pac_list_truncate() local
679 pac = pac_root; in eap_teap_pac_list_truncate()
683 while (pac) { in eap_teap_pac_list_truncate()
687 prev = pac; in eap_teap_pac_list_truncate()
688 pac = pac->next; in eap_teap_pac_list_truncate()
697 while (pac) { in eap_teap_pac_list_truncate()
698 prev = pac; in eap_teap_pac_list_truncate()
699 pac = pac->next; in eap_teap_pac_list_truncate()
708 static void eap_teap_pac_get_a_id(struct eap_teap_pac *pac) in eap_teap_pac_get_a_id() argument
713 pos = pac->pac_info; in eap_teap_pac_get_a_id()
714 end = pos + pac->pac_info_len; in eap_teap_pac_get_a_id()
725 os_free(pac->a_id); in eap_teap_pac_get_a_id()
726 pac->a_id = os_memdup(pos, len); in eap_teap_pac_get_a_id()
727 if (!pac->a_id) in eap_teap_pac_get_a_id()
729 pac->a_id_len = len; in eap_teap_pac_get_a_id()
733 os_free(pac->a_id_info); in eap_teap_pac_get_a_id()
734 pac->a_id_info = os_memdup(pos, len); in eap_teap_pac_get_a_id()
735 if (!pac->a_id_info) in eap_teap_pac_get_a_id()
737 pac->a_id_info_len = len; in eap_teap_pac_get_a_id()
758 struct eap_teap_pac *pac, *prev; in eap_teap_load_pac_bin() local
800 pac = prev = NULL; in eap_teap_load_pac_bin()
807 pac = NULL; in eap_teap_load_pac_bin()
811 pac = os_zalloc(sizeof(*pac)); in eap_teap_load_pac_bin()
812 if (!pac) in eap_teap_load_pac_bin()
815 pac->pac_type = WPA_GET_BE16(pos); in eap_teap_load_pac_bin()
817 os_memcpy(pac->pac_key, pos, EAP_TEAP_PAC_KEY_LEN); in eap_teap_load_pac_bin()
823 pac->pac_opaque_len = val; in eap_teap_load_pac_bin()
824 pac->pac_opaque = os_memdup(pos, pac->pac_opaque_len); in eap_teap_load_pac_bin()
825 if (!pac->pac_opaque) in eap_teap_load_pac_bin()
827 pos += pac->pac_opaque_len; in eap_teap_load_pac_bin()
834 pac->pac_info_len = val; in eap_teap_load_pac_bin()
835 pac->pac_info = os_memdup(pos, pac->pac_info_len); in eap_teap_load_pac_bin()
836 if (!pac->pac_info) in eap_teap_load_pac_bin()
838 pos += pac->pac_info_len; in eap_teap_load_pac_bin()
839 eap_teap_pac_get_a_id(pac); in eap_teap_load_pac_bin()
843 prev->next = pac; in eap_teap_load_pac_bin()
845 *pac_root = pac; in eap_teap_load_pac_bin()
846 prev = pac; in eap_teap_load_pac_bin()
862 if (pac) in eap_teap_load_pac_bin()
863 eap_teap_free_pac(pac); in eap_teap_load_pac_bin()
879 struct eap_teap_pac *pac; in eap_teap_save_pac_bin() local
883 pac = pac_root; in eap_teap_save_pac_bin()
884 while (pac) { in eap_teap_save_pac_bin()
885 if (pac->pac_opaque_len > 65535 || in eap_teap_save_pac_bin()
886 pac->pac_info_len > 65535) in eap_teap_save_pac_bin()
888 len += 2 + EAP_TEAP_PAC_KEY_LEN + 2 + pac->pac_opaque_len + in eap_teap_save_pac_bin()
889 2 + pac->pac_info_len; in eap_teap_save_pac_bin()
890 pac = pac->next; in eap_teap_save_pac_bin()
903 pac = pac_root; in eap_teap_save_pac_bin()
904 while (pac) { in eap_teap_save_pac_bin()
905 WPA_PUT_BE16(pos, pac->pac_type); in eap_teap_save_pac_bin()
907 os_memcpy(pos, pac->pac_key, EAP_TEAP_PAC_KEY_LEN); in eap_teap_save_pac_bin()
909 WPA_PUT_BE16(pos, pac->pac_opaque_len); in eap_teap_save_pac_bin()
911 os_memcpy(pos, pac->pac_opaque, pac->pac_opaque_len); in eap_teap_save_pac_bin()
912 pos += pac->pac_opaque_len; in eap_teap_save_pac_bin()
913 WPA_PUT_BE16(pos, pac->pac_info_len); in eap_teap_save_pac_bin()
915 os_memcpy(pos, pac->pac_info, pac->pac_info_len); in eap_teap_save_pac_bin()
916 pos += pac->pac_info_len; in eap_teap_save_pac_bin()
918 pac = pac->next; in eap_teap_save_pac_bin()