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;
142 struct eap_fast_pac *pac;
152 pac = os_zalloc(sizeof(*pac));
153 if (pac == NULL)
156 pac->pac_type = entry->pac_type;
157 os_memcpy(pac->pac_key, entry->pac_key, EAP_FAST_PAC_KEY_LEN);
158 if (eap_fast_copy_buf(&pac->pac_opaque, &pac->pac_opaque_len,
160 eap_fast_copy_buf(&pac->pac_info, &pac->pac_info_len,
162 eap_fast_copy_buf(&pac->a_id, &pac->a_id_len,
164 eap_fast_copy_buf(&pac->i_id, &pac->i_id_len,
166 eap_fast_copy_buf(&pac->a_id_info, &pac->a_id_info_len,
168 eap_fast_free_pac(pac);
172 pac->next = *pac_root;
173 *pac_root = pac;
298 static const char * eap_fast_parse_start(struct eap_fast_pac **pac)
300 if (*pac)
303 *pac = os_zalloc(sizeof(struct eap_fast_pac));
304 if (*pac == NULL)
306 (*pac)->pac_type = PAC_TYPE_TUNNEL_PAC;
312 struct eap_fast_pac **pac)
314 if (*pac == NULL)
320 end->next = *pac;
322 *pac_root = *pac;
324 *pac = NULL;
329 static const char * eap_fast_parse_pac_type(struct eap_fast_pac *pac,
333 return "Cannot parse pac type";
334 pac->pac_type = atoi(pos);
335 if (pac->pac_type != PAC_TYPE_TUNNEL_PAC &&
336 pac->pac_type != PAC_TYPE_USER_AUTHORIZATION &&
337 pac->pac_type != PAC_TYPE_MACHINE_AUTHENTICATION)
344 static const char * eap_fast_parse_pac_key(struct eap_fast_pac *pac, char *pos)
355 os_memcpy(pac->pac_key, key, EAP_FAST_PAC_KEY_LEN);
362 static const char * eap_fast_parse_pac_opaque(struct eap_fast_pac *pac,
365 os_free(pac->pac_opaque);
366 pac->pac_opaque = eap_fast_parse_hex(pos, &pac->pac_opaque_len);
367 if (pac->pac_opaque == NULL)
373 static const char * eap_fast_parse_a_id(struct eap_fast_pac *pac, char *pos)
375 os_free(pac->a_id);
376 pac->a_id = eap_fast_parse_hex(pos, &pac->a_id_len);
377 if (pac->a_id == NULL)
383 static const char * eap_fast_parse_i_id(struct eap_fast_pac *pac, char *pos)
385 os_free(pac->i_id);
386 pac->i_id = eap_fast_parse_hex(pos, &pac->i_id_len);
387 if (pac->i_id == NULL)
393 static const char * eap_fast_parse_a_id_info(struct eap_fast_pac *pac,
396 os_free(pac->a_id_info);
397 pac->a_id_info = eap_fast_parse_hex(pos, &pac->a_id_info_len);
398 if (pac->a_id_info == NULL)
415 struct eap_fast_pac *pac = NULL;
436 err = eap_fast_parse_start(&pac);
438 err = eap_fast_parse_end(pac_root, &pac);
440 } else if (!pac)
443 err = eap_fast_parse_pac_type(pac, pos);
445 err = eap_fast_parse_pac_key(pac, pos);
447 err = eap_fast_parse_pac_opaque(pac, pos);
449 err = eap_fast_parse_a_id(pac, pos);
451 err = eap_fast_parse_i_id(pac, pos);
453 err = eap_fast_parse_a_id_info(pac, pos);
456 if (pac) {
459 eap_fast_free_pac(pac);
574 static int eap_fast_add_pac_data(struct eap_fast_pac *pac, char **buf,
580 "START\nPAC-Type=%d\n", pac->pac_type);
586 pac->pac_key, EAP_FAST_PAC_KEY_LEN, 0);
588 pac->pac_opaque, pac->pac_opaque_len, 0);
590 pac->pac_info, pac->pac_info_len, 0);
592 pac->a_id, pac->a_id_len, 0);
594 pac->i_id, pac->i_id_len, 1);
596 pac->a_id_info, pac->a_id_info_len, 1);
621 struct eap_fast_pac *pac;
641 pac = pac_root;
642 while (pac) {
643 if (eap_fast_add_pac_data(pac, &buf, &pos, &buf_len)) {
648 pac = pac->next;
672 struct eap_fast_pac *pac, *prev;
675 pac = pac_root;
679 while (pac) {
683 prev = pac;
684 pac = pac->next;
693 while (pac) {
694 prev = pac;
695 pac = pac->next;
704 static void eap_fast_pac_get_a_id(struct eap_fast_pac *pac)
709 pos = pac->pac_info;
710 end = pos + pac->pac_info_len;
721 os_free(pac->a_id);
722 pac->a_id = os_memdup(pos, len);
723 if (pac->a_id == NULL)
725 pac->a_id_len = len;
729 os_free(pac->a_id_info);
730 pac->a_id_info = os_memdup(pos, len);
731 if (pac->a_id_info == NULL)
733 pac->a_id_info_len = len;
754 struct eap_fast_pac *pac, *prev;
796 pac = prev = NULL;
803 pac = NULL;
807 pac = os_zalloc(sizeof(*pac));
808 if (pac == NULL)
811 pac->pac_type = WPA_GET_BE16(pos);
813 os_memcpy(pac->pac_key, pos, EAP_FAST_PAC_KEY_LEN);
819 pac->pac_opaque_len = val;
820 pac->pac_opaque = os_memdup(pos, pac->pac_opaque_len);
821 if (pac->pac_opaque == NULL)
823 pos += pac->pac_opaque_len;
830 pac->pac_info_len = val;
831 pac->pac_info = os_memdup(pos, pac->pac_info_len);
832 if (pac->pac_info == NULL)
834 pos += pac->pac_info_len;
835 eap_fast_pac_get_a_id(pac);
839 prev->next = pac;
841 *pac_root = pac;
842 prev = pac;
858 if (pac)
859 eap_fast_free_pac(pac);
875 struct eap_fast_pac *pac;
879 pac = pac_root;
880 while (pac) {
881 if (pac->pac_opaque_len > 65535 ||
882 pac->pac_info_len > 65535)
884 len += 2 + EAP_FAST_PAC_KEY_LEN + 2 + pac->pac_opaque_len +
885 2 + pac->pac_info_len;
886 pac = pac->next;
899 pac = pac_root;
900 while (pac) {
901 WPA_PUT_BE16(pos, pac->pac_type);
903 os_memcpy(pos, pac->pac_key, EAP_FAST_PAC_KEY_LEN);
905 WPA_PUT_BE16(pos, pac->pac_opaque_len);
907 os_memcpy(pos, pac->pac_opaque, pac->pac_opaque_len);
908 pos += pac->pac_opaque_len;
909 WPA_PUT_BE16(pos, pac->pac_info_len);
911 os_memcpy(pos, pac->pac_info, pac->pac_info_len);
912 pos += pac->pac_info_len;
914 pac = pac->next;