Lines Matching defs:pac

45  * @pac: Pointer to the PAC entry
50 void eap_fast_free_pac(struct eap_fast_pac *pac)
52 os_free(pac->pac_opaque);
53 os_free(pac->pac_info);
54 os_free(pac->a_id);
55 os_free(pac->i_id);
56 os_free(pac->a_id_info);
57 os_free(pac);
73 struct eap_fast_pac *pac = pac_root;
75 while (pac) {
76 if (pac->pac_type == pac_type && pac->a_id_len == a_id_len &&
77 os_memcmp(pac->a_id, a_id, a_id_len) == 0) {
78 return pac;
80 pac = pac->next;
90 struct eap_fast_pac *pac, *prev;
92 pac = *pac_root;
95 while (pac) {
96 if (pac->pac_type == pac_type && pac->a_id_len == a_id_len &&
97 os_memcmp(pac->a_id, a_id, a_id_len) == 0) {
99 *pac_root = pac->next;
101 prev->next = pac->next;
102 if (*pac_current == pac)
104 eap_fast_free_pac(pac);
107 prev = pac;
108 pac = pac->next;
143 struct eap_fast_pac *pac;
153 pac = os_zalloc(sizeof(*pac));
154 if (pac == NULL)
157 pac->pac_type = entry->pac_type;
158 os_memcpy(pac->pac_key, entry->pac_key, EAP_FAST_PAC_KEY_LEN);
159 if (eap_fast_copy_buf(&pac->pac_opaque, &pac->pac_opaque_len,
161 eap_fast_copy_buf(&pac->pac_info, &pac->pac_info_len,
163 eap_fast_copy_buf(&pac->a_id, &pac->a_id_len,
165 eap_fast_copy_buf(&pac->i_id, &pac->i_id_len,
167 eap_fast_copy_buf(&pac->a_id_info, &pac->a_id_info_len,
169 eap_fast_free_pac(pac);
173 pac->next = *pac_root;
174 *pac_root = pac;
299 static const char * eap_fast_parse_start(struct eap_fast_pac **pac)
301 if (*pac)
304 *pac = os_zalloc(sizeof(struct eap_fast_pac));
305 if (*pac == NULL)
307 (*pac)->pac_type = PAC_TYPE_TUNNEL_PAC;
313 struct eap_fast_pac **pac)
315 if (*pac == NULL)
321 end->next = *pac;
323 *pac_root = *pac;
325 *pac = NULL;
330 static const char * eap_fast_parse_pac_type(struct eap_fast_pac *pac,
333 pac->pac_type = atoi(pos);
334 if (pac->pac_type != PAC_TYPE_TUNNEL_PAC &&
335 pac->pac_type != PAC_TYPE_USER_AUTHORIZATION &&
336 pac->pac_type != PAC_TYPE_MACHINE_AUTHENTICATION)
343 static const char * eap_fast_parse_pac_key(struct eap_fast_pac *pac, char *pos)
354 os_memcpy(pac->pac_key, key, EAP_FAST_PAC_KEY_LEN);
361 static const char * eap_fast_parse_pac_opaque(struct eap_fast_pac *pac,
364 os_free(pac->pac_opaque);
365 pac->pac_opaque = eap_fast_parse_hex(pos, &pac->pac_opaque_len);
366 if (pac->pac_opaque == NULL)
372 static const char * eap_fast_parse_a_id(struct eap_fast_pac *pac, char *pos)
374 os_free(pac->a_id);
375 pac->a_id = eap_fast_parse_hex(pos, &pac->a_id_len);
376 if (pac->a_id == NULL)
382 static const char * eap_fast_parse_i_id(struct eap_fast_pac *pac, char *pos)
384 os_free(pac->i_id);
385 pac->i_id = eap_fast_parse_hex(pos, &pac->i_id_len);
386 if (pac->i_id == NULL)
392 static const char * eap_fast_parse_a_id_info(struct eap_fast_pac *pac,
395 os_free(pac->a_id_info);
396 pac->a_id_info = eap_fast_parse_hex(pos, &pac->a_id_info_len);
397 if (pac->a_id_info == NULL)
414 struct eap_fast_pac *pac = NULL;
435 err = eap_fast_parse_start(&pac);
437 err = eap_fast_parse_end(pac_root, &pac);
439 } else if (!pac)
442 err = eap_fast_parse_pac_type(pac, pos);
444 err = eap_fast_parse_pac_key(pac, pos);
446 err = eap_fast_parse_pac_opaque(pac, pos);
448 err = eap_fast_parse_a_id(pac, pos);
450 err = eap_fast_parse_i_id(pac, pos);
452 err = eap_fast_parse_a_id_info(pac, pos);
455 if (pac) {
457 eap_fast_free_pac(pac);
572 static int eap_fast_add_pac_data(struct eap_fast_pac *pac, char **buf,
578 "START\nPAC-Type=%d\n", pac->pac_type);
584 pac->pac_key, EAP_FAST_PAC_KEY_LEN, 0);
586 pac->pac_opaque, pac->pac_opaque_len, 0);
588 pac->pac_info, pac->pac_info_len, 0);
590 pac->a_id, pac->a_id_len, 0);
592 pac->i_id, pac->i_id_len, 1);
594 pac->a_id_info, pac->a_id_info_len, 1);
619 struct eap_fast_pac *pac;
639 pac = pac_root;
640 while (pac) {
641 if (eap_fast_add_pac_data(pac, &buf, &pos, &buf_len)) {
646 pac = pac->next;
670 struct eap_fast_pac *pac, *prev;
673 pac = pac_root;
677 while (pac) {
681 prev = pac;
682 pac = pac->next;
691 while (pac) {
692 prev = pac;
693 pac = pac->next;
702 static void eap_fast_pac_get_a_id(struct eap_fast_pac *pac)
707 pos = pac->pac_info;
708 end = pos + pac->pac_info_len;
719 os_free(pac->a_id);
720 pac->a_id = os_malloc(len);
721 if (pac->a_id == NULL)
723 os_memcpy(pac->a_id, pos, len);
724 pac->a_id_len = len;
728 os_free(pac->a_id_info);
729 pac->a_id_info = os_malloc(len);
730 if (pac->a_id_info == NULL)
732 os_memcpy(pac->a_id_info, pos, len);
733 pac->a_id_info_len = len;
754 struct eap_fast_pac *pac, *prev;
796 pac = prev = NULL;
803 pac = os_zalloc(sizeof(*pac));
804 if (pac == NULL)
807 pac->pac_type = WPA_GET_BE16(pos);
809 os_memcpy(pac->pac_key, pos, EAP_FAST_PAC_KEY_LEN);
811 pac->pac_opaque_len = WPA_GET_BE16(pos);
813 if (pos + pac->pac_opaque_len + 2 > end)
815 pac->pac_opaque = os_malloc(pac->pac_opaque_len);
816 if (pac->pac_opaque == NULL)
818 os_memcpy(pac->pac_opaque, pos, pac->pac_opaque_len);
819 pos += pac->pac_opaque_len;
820 pac->pac_info_len = WPA_GET_BE16(pos);
822 if (pos + pac->pac_info_len > end)
824 pac->pac_info = os_malloc(pac->pac_info_len);
825 if (pac->pac_info == NULL)
827 os_memcpy(pac->pac_info, pos, pac->pac_info_len);
828 pos += pac->pac_info_len;
829 eap_fast_pac_get_a_id(pac);
833 prev->next = pac;
835 *pac_root = pac;
836 prev = pac;
852 if (pac)
853 eap_fast_free_pac(pac);
869 struct eap_fast_pac *pac;
873 pac = pac_root;
874 while (pac) {
875 if (pac->pac_opaque_len > 65535 ||
876 pac->pac_info_len > 65535)
878 len += 2 + EAP_FAST_PAC_KEY_LEN + 2 + pac->pac_opaque_len +
879 2 + pac->pac_info_len;
880 pac = pac->next;
893 pac = pac_root;
894 while (pac) {
895 WPA_PUT_BE16(pos, pac->pac_type);
897 os_memcpy(pos, pac->pac_key, EAP_FAST_PAC_KEY_LEN);
899 WPA_PUT_BE16(pos, pac->pac_opaque_len);
901 os_memcpy(pos, pac->pac_opaque, pac->pac_opaque_len);
902 pos += pac->pac_opaque_len;
903 WPA_PUT_BE16(pos, pac->pac_info_len);
905 os_memcpy(pos, pac->pac_info, pac->pac_info_len);
906 pos += pac->pac_info_len;
908 pac = pac->next;