Lines Matching defs:pac

45  * @pac: Pointer to the PAC entry
50 void eap_teap_free_pac(struct eap_teap_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_teap_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_teap_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_teap_free_pac(pac);
107 prev = pac;
108 pac = pac->next;
142 struct eap_teap_pac *pac;
152 pac = os_zalloc(sizeof(*pac));
153 if (!pac)
156 pac->pac_type = entry->pac_type;
157 os_memcpy(pac->pac_key, entry->pac_key, EAP_TEAP_PAC_KEY_LEN);
158 if (eap_teap_copy_buf(&pac->pac_opaque, &pac->pac_opaque_len,
160 eap_teap_copy_buf(&pac->pac_info, &pac->pac_info_len,
162 eap_teap_copy_buf(&pac->a_id, &pac->a_id_len,
164 eap_teap_copy_buf(&pac->i_id, &pac->i_id_len,
166 eap_teap_copy_buf(&pac->a_id_info, &pac->a_id_info_len,
168 eap_teap_free_pac(pac);
172 pac->next = *pac_root;
173 *pac_root = pac;
300 static const char * eap_teap_parse_start(struct eap_teap_pac **pac)
302 if (*pac)
305 *pac = os_zalloc(sizeof(struct eap_teap_pac));
306 if (!(*pac))
308 (*pac)->pac_type = PAC_TYPE_TUNNEL_PAC;
314 struct eap_teap_pac **pac)
316 if (!(*pac))
323 end->next = *pac;
325 *pac_root = *pac;
327 *pac = NULL;
332 static const char * eap_teap_parse_pac_type(struct eap_teap_pac *pac,
336 return "Cannot parse pac type";
337 pac->pac_type = atoi(pos);
338 if (pac->pac_type != PAC_TYPE_TUNNEL_PAC)
345 static const char * eap_teap_parse_pac_key(struct eap_teap_pac *pac, char *pos)
356 os_memcpy(pac->pac_key, key, EAP_TEAP_PAC_KEY_LEN);
363 static const char * eap_teap_parse_pac_opaque(struct eap_teap_pac *pac,
366 os_free(pac->pac_opaque);
367 pac->pac_opaque = eap_teap_parse_hex(pos, &pac->pac_opaque_len);
368 if (!pac->pac_opaque)
374 static const char * eap_teap_parse_a_id(struct eap_teap_pac *pac, char *pos)
376 os_free(pac->a_id);
377 pac->a_id = eap_teap_parse_hex(pos, &pac->a_id_len);
378 if (!pac->a_id)
384 static const char * eap_teap_parse_i_id(struct eap_teap_pac *pac, char *pos)
386 os_free(pac->i_id);
387 pac->i_id = eap_teap_parse_hex(pos, &pac->i_id_len);
388 if (!pac->i_id)
394 static const char * eap_teap_parse_a_id_info(struct eap_teap_pac *pac,
397 os_free(pac->a_id_info);
398 pac->a_id_info = eap_teap_parse_hex(pos, &pac->a_id_info_len);
399 if (!pac->a_id_info)
416 struct eap_teap_pac *pac = NULL;
437 err = eap_teap_parse_start(&pac);
439 err = eap_teap_parse_end(pac_root, &pac);
441 } else if (!pac)
444 err = eap_teap_parse_pac_type(pac, pos);
446 err = eap_teap_parse_pac_key(pac, pos);
448 err = eap_teap_parse_pac_opaque(pac, pos);
450 err = eap_teap_parse_a_id(pac, pos);
452 err = eap_teap_parse_i_id(pac, pos);
454 err = eap_teap_parse_a_id_info(pac, pos);
457 if (pac) {
460 eap_teap_free_pac(pac);
579 static int eap_teap_add_pac_data(struct eap_teap_pac *pac, char **buf,
585 "START\nPAC-Type=%d\n", pac->pac_type);
591 pac->pac_key, EAP_TEAP_PAC_KEY_LEN, 0);
593 pac->pac_opaque, pac->pac_opaque_len, 0);
595 pac->pac_info, pac->pac_info_len, 0);
597 pac->a_id, pac->a_id_len, 0);
599 pac->i_id, pac->i_id_len, 1);
601 pac->a_id_info, pac->a_id_info_len, 1);
625 struct eap_teap_pac *pac;
645 pac = pac_root;
646 while (pac) {
647 if (eap_teap_add_pac_data(pac, &buf, &pos, &buf_len)) {
652 pac = pac->next;
676 struct eap_teap_pac *pac, *prev;
679 pac = pac_root;
683 while (pac) {
687 prev = pac;
688 pac = pac->next;
697 while (pac) {
698 prev = pac;
699 pac = pac->next;
708 static void eap_teap_pac_get_a_id(struct eap_teap_pac *pac)
713 pos = pac->pac_info;
714 end = pos + pac->pac_info_len;
725 os_free(pac->a_id);
726 pac->a_id = os_memdup(pos, len);
727 if (!pac->a_id)
729 pac->a_id_len = len;
733 os_free(pac->a_id_info);
734 pac->a_id_info = os_memdup(pos, len);
735 if (!pac->a_id_info)
737 pac->a_id_info_len = len;
758 struct eap_teap_pac *pac, *prev;
800 pac = prev = NULL;
807 pac = NULL;
811 pac = os_zalloc(sizeof(*pac));
812 if (!pac)
815 pac->pac_type = WPA_GET_BE16(pos);
817 os_memcpy(pac->pac_key, pos, EAP_TEAP_PAC_KEY_LEN);
823 pac->pac_opaque_len = val;
824 pac->pac_opaque = os_memdup(pos, pac->pac_opaque_len);
825 if (!pac->pac_opaque)
827 pos += pac->pac_opaque_len;
834 pac->pac_info_len = val;
835 pac->pac_info = os_memdup(pos, pac->pac_info_len);
836 if (!pac->pac_info)
838 pos += pac->pac_info_len;
839 eap_teap_pac_get_a_id(pac);
843 prev->next = pac;
845 *pac_root = pac;
846 prev = pac;
862 if (pac)
863 eap_teap_free_pac(pac);
879 struct eap_teap_pac *pac;
883 pac = pac_root;
884 while (pac) {
885 if (pac->pac_opaque_len > 65535 ||
886 pac->pac_info_len > 65535)
888 len += 2 + EAP_TEAP_PAC_KEY_LEN + 2 + pac->pac_opaque_len +
889 2 + pac->pac_info_len;
890 pac = pac->next;
903 pac = pac_root;
904 while (pac) {
905 WPA_PUT_BE16(pos, pac->pac_type);
907 os_memcpy(pos, pac->pac_key, EAP_TEAP_PAC_KEY_LEN);
909 WPA_PUT_BE16(pos, pac->pac_opaque_len);
911 os_memcpy(pos, pac->pac_opaque, pac->pac_opaque_len);
912 pos += pac->pac_opaque_len;
913 WPA_PUT_BE16(pos, pac->pac_info_len);
915 os_memcpy(pos, pac->pac_info, pac->pac_info_len);
916 pos += pac->pac_info_len;
918 pac = pac->next;