亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? eapfast_xml.c

?? linux 下通過802.1認證的安裝包
?? C
字號:
/**
 * Implementation of XML functions used to handle PACs for EAP fast.
 *
 * Licensed under a dual GPL/BSD license.  (See LICENSE file for more info.)
 *
 * \file eapfast_xml.c
 *
 * \author chris@open1x.org
 *
 * \todo Add IPC error message signaling.
 *
 * $Id: eapfast_xml.c,v 1.1.2.9 2007/04/20 18:35:53 chessing Exp $
 * $Date: 2007/04/20 18:35:53 $
 **/

#ifdef EAP_FAST

#include <stdio.h>
#include <stdint.h>
#include <string.h>

#include "xsupconfig.h"
#include "eap_sm.h"
#include "eap_types/eap_type_common.h"
#include "eapfast_phase2.h"
#include "eapfast_xml.h"
#include "xsup_common.h"
#include "xsup_debug.h"
#include "eap_types/mschapv2/mschapv2.h"

#define XSUP_PAC_ROOT_ELEMENT  "XsupplicantPACs"

/****************************************************************
 *
 *  Create a new XML document that contains the root node needed to 
 *  identify it as a valid Xsupplicant PAC document.
 *
 ****************************************************************/
xmlDocPtr eapfast_xml_create_pac_struct()
{
  xmlDocPtr doc;
  xmlNodePtr root_node;

  doc = xmlNewDoc("1.0");

  if (doc == NULL) return NULL;

  root_node = xmlNewNode(NULL, XSUP_PAC_ROOT_ELEMENT);

  xmlDocSetRootElement(doc, root_node);

  return doc;
}

/*****************************************************************
 *
 *  Add a single content node to a parent node.
 *
 *****************************************************************/
void eapfast_xml_add_content(xmlNodePtr node, char *name, char *content)
{
  xmlNodePtr cur_node;

  cur_node = xmlNewChild(node, NULL, name, NULL);
  xmlNodeAddContent(cur_node, content);
}

/****************************************************************
 *
 *  Search through the XML file looking for the AID.
 *
 ****************************************************************/
xmlNodePtr eapfast_xml_find_pac(xmlDocPtr doc, char *aid)
{
  xmlNodePtr root_node, cur_node;
  int done = FALSE;
  xmlChar *prop;

  if (!xsup_assert((doc != NULL), "doc != NULL", FALSE))
    return NULL;

  if (!xsup_assert((aid != NULL), "aid != NULL", FALSE))
    return NULL;

  // Search XML space to find the string.
  root_node = xmlDocGetRootElement(doc);

  if (root_node == NULL)
    {
      debug_printf(DEBUG_NORMAL, "No root node available!\n");
      return NULL;
    }

  cur_node = root_node->children;

  while ((cur_node) && (done == 0))
    {
      prop = xmlGetProp(cur_node, "AID");

      if (prop != NULL)
        {
          // See if this is what we are looking for.
          if (strcmp(prop, aid) == 0)
            {
              done = TRUE;
            }
          else
            {
              xmlFree(prop);
            }
        }
      else
        {
          xmlFree(prop);
        }

      if (done == FALSE) cur_node = cur_node->next;
    }

  if (cur_node != NULL) return cur_node;

  return NULL;
}

/****************************************************************
 *
 *  Check to see if we already have a node for this AID.  If we do,
 *  then we need to clear it out, and return.  (If we don't, just
 *  return.
 *
 ****************************************************************/
void eapfast_xml_check_clear_node(xmlDocPtr doc, char *aid)
{
  xmlNodePtr cur_node;

  cur_node = eapfast_xml_find_pac(doc, aid);

  // This AID isn't known yet.
  if (cur_node == NULL) return;

  xmlUnlinkNode(cur_node);
  xmlFreeNode(cur_node);
}

/****************************************************************
 *
 *  Add a new PAC to the XML document.
 *
 ****************************************************************/
int eapfast_xml_add_pac(xmlDocPtr doc, struct pac_values *pacs)
{
  xmlNodePtr root_node, cur_node;
  char *temp;
  char num[3];

  root_node = xmlDocGetRootElement(doc);

  if (root_node == NULL)
    {
      debug_printf(DEBUG_NORMAL, "No root XML node available!!\n");
      return -1;
    }

  if (strcmp(root_node->name, XSUP_PAC_ROOT_ELEMENT) != 0)
    {
      debug_printf(DEBUG_NORMAL, "Invalid root element!\n");
      return -1;
    }

  temp = eap_type_common_convert_hex(pacs->pacinfo.aid, pacs->pacinfo.aid_len);
  eapfast_xml_check_clear_node(doc, temp);

  cur_node = xmlNewChild(root_node, NULL, "PAC", NULL);

  if (cur_node == NULL) return -1;

  xmlNewProp(cur_node, "AID", temp);
  FREE(temp);

  temp = eap_type_common_convert_hex(pacs->pac_key, 32);
  eapfast_xml_add_content(cur_node, "PAC_key", temp);
  FREE(temp);

  temp = eap_type_common_convert_hex(pacs->pac_opaque, pacs->pac_opaque_len);
  eapfast_xml_add_content(cur_node, "PAC_opaque", temp);
  FREE(temp);

  temp = eap_type_common_convert_hex(pacs->pacinfo.cred_lifetime, 4);
  eapfast_xml_add_content(cur_node, "Cred_Lifetime", temp);
  FREE(temp);

  temp = eap_type_common_convert_hex(pacs->pacinfo.iid, pacs->pacinfo.iid_len);
  eapfast_xml_add_content(cur_node, "IID", temp);
  FREE(temp);

  temp = eap_type_common_convert_hex(pacs->pacinfo.aid_info,
				     pacs->pacinfo.aid_info_len);
  eapfast_xml_add_content(cur_node, "AID_Info", temp);
  FREE(temp);

  memset(num, 0x00, 3);
  sprintf(num, "%d", pacs->pacinfo.pac_type);
  eapfast_xml_add_content(cur_node, "PAC_Type", num);

  return 0;
}

/**************************************************************
 *
 *  Write out the XML document to a file.
 *
 **************************************************************/
int eapfast_xml_save(char *filename, xmlDocPtr doc)
{
  xmlSaveFormatFile(filename, doc, 1);

  return 0;
}

/**************************************************************
 *
 *  Set up libxml to be used.
 *
 **************************************************************/
void eapfast_xml_init()
{
  LIBXML_TEST_VERSION
}

/**************************************************************
 *
 *  Clean up libxml.
 *
 **************************************************************/
void eapfast_xml_deinit(xmlDocPtr doc)
{
  xmlFreeDoc(doc);

  xmlCleanupParser();
}

/**************************************************************
 *
 *  Open (and parse) an XML document containing PACs.
 *
 **************************************************************/
xmlDocPtr eapfast_xml_open_pac(char *filename)
{
  xmlDocPtr doc;
  xmlNodePtr node;

  if (filename == NULL) return NULL;

  doc = xmlReadFile(filename, NULL, 0);
  if (doc == NULL)
    {
      debug_printf(DEBUG_NORMAL, "Error reading EAP-FAST PAC file.\n");
      return NULL;
    }

  node = xmlDocGetRootElement(doc);
  
  if (node == NULL)
    {
      debug_printf(DEBUG_NORMAL, "No root element!\n");
      xmlFreeDoc(doc);
      return NULL;
    }

  if (strcmp(XSUP_PAC_ROOT_ELEMENT, node->name) != 0)
    {
      debug_printf(DEBUG_NORMAL, "Invalid PAC file!\n");
      xmlFreeDoc(doc);
      return NULL;
    }

  return doc;
}

/***********************************************************************
 *
 *  Locate a PAC and return it's data.  (Returns 0 on success.)
 *
 ***********************************************************************/
int eapfast_xml_find_pac_data(xmlDocPtr doc, char *aid, 
			      struct pac_values *pacs)
{
  xmlNodePtr cur_node;
  int done = 0;
  xmlChar *prop;

  // Check values passed in

  // Search XML space to find the string.
  cur_node = eapfast_xml_find_pac(doc, aid);

  // Read out the values for the PACs and return them.
  if (cur_node != NULL)
    {
      done = 0;

      cur_node = cur_node->children;

      while (cur_node)
	{
	  if (strcmp(cur_node->name, "PAC_key") == 0)
	    {
	      prop = xmlNodeGetContent(cur_node);
	      if (((strlen(prop) % 2) != 0) || (strlen(prop) != 64))
		{
		  // We didn't get a valid string.
		  debug_printf(DEBUG_NORMAL, "Value stored in PAC_key is "
			       "invalid!\n");
		  return -1;
		}
	      process_hex(prop, strlen(prop), pacs->pac_key);
	      // No need to save the length here.  It should ALWAYS be 32!
	    }

	  if (strcmp(cur_node->name, "Cred_Lifetime") == 0)
	    {
	      prop = xmlNodeGetContent(cur_node);
	      if (((strlen(prop) % 2) != 0) || (strlen(prop) != 8))
		{
		  debug_printf(DEBUG_NORMAL, "Invalid setting stored for "
			       "credential lifetime!\n");
		  return -1;
		}
	      process_hex(prop, strlen(prop), pacs->pacinfo.cred_lifetime);
	    }

	  if (strcmp(cur_node->name, "IID") == 0)
	    {
	      prop = xmlNodeGetContent(cur_node);
	      if ((strlen(prop) % 2) != 0)
		{
		  debug_printf(DEBUG_NORMAL, "Invalid settings stored for "
			       "Identity Identifier.\n");
		  return -1;
		}
	      pacs->pacinfo.iid = Malloc((strlen(prop)/2)+1);
	      if (pacs->pacinfo.iid == NULL)
		{
		  debug_printf(DEBUG_NORMAL, "Couldn't allocate memory to "
			       "store IID data.\n");
		  return -1;
		}
	      process_hex(prop, strlen(prop), pacs->pacinfo.iid);
	      pacs->pacinfo.iid_len = (strlen(prop) / 2);
	    }

	  if (strcmp(cur_node->name, "AID_Info") == 0)
	    {
	      prop = xmlNodeGetContent(cur_node);
	      if ((strlen(prop) % 2) != 0)
		{
		  debug_printf(DEBUG_NORMAL, "Invalid information stored for "
			       "AID Information setting!\n");
		  return -1;
		}
	      pacs->pacinfo.aid_info = Malloc((strlen(prop)/2)+1);
	      if (pacs->pacinfo.aid_info == NULL)
		{
		  debug_printf(DEBUG_NORMAL, "Invalid value stored for "
			       "AID Information data!\n");
		  return -1;
		}

	      process_hex(prop, strlen(prop), pacs->pacinfo.aid_info);
	      pacs->pacinfo.aid_info_len = (strlen(prop) / 2);
	    }

	  if (strcmp(cur_node->name, "PAC_Type") == 0)
	    {
	      prop = xmlNodeGetContent(cur_node);
	      pacs->pacinfo.pac_type = atoi(prop);
	    }

	  if (strcmp(cur_node->name, "PAC_opaque") == 0)
	    {
	      prop = xmlNodeGetContent(cur_node);
	      if ((strlen(prop) % 2) != 0)
		{
		  // We didn't get a valid string.
		  debug_printf(DEBUG_NORMAL, "Invalid string stored for "
			       "PAC_opaque!\n");
		  return -1;
		}

	      pacs->pac_opaque = Malloc((strlen(prop)/2) + 1);
	      if (pacs->pac_opaque == NULL)
		{
		  debug_printf(DEBUG_NORMAL, "Couldn't allocate memory to "
			       "store PAC Opaque!\n");
		  return -1;
		}

	      process_hex(prop, strlen(prop), pacs->pac_opaque);
	      pacs->pac_opaque_len = (strlen(prop) / 2);
	    }

	  cur_node = cur_node->next;
	}
    }
  else
    {
      return -1;
    }

  pacs->pacinfo.aid = Malloc((strlen(aid) / 2) + 1);
  if (pacs->pacinfo.aid == NULL)
    {
      debug_printf(DEBUG_NORMAL, "Couldn't allocate memory to store AID!\n");
      return -1;
    }

  process_hex(aid, strlen(aid), pacs->pacinfo.aid);
  pacs->pacinfo.aid_len = (strlen(aid) / 2);

  return 0;
}


#if 0
int main()
{
  xmlDocPtr doc;
  char *packey, *pacopaque;

  // Create a file.
  eapfast_xml_init();

  doc = eapfast_xml_create_pac_struct();

  eapfast_xml_add_pac(doc, "aid1", "packey1", "pacopaque1");
  eapfast_xml_add_pac(doc, "aid2", "packey2", "pacopaque2");
  eapfast_xml_add_pac(doc, "aid4", "packey4", "pacopaque4");

  eapfast_xml_save("testfile.xml", doc);

  eapfast_xml_deinit(doc);

  // Read it back and add to it.
  eapfast_xml_init();

  doc = eapfast_xml_open_pac("testfile.xml");

  if (eapfast_xml_find_pac_data(doc, "aid2", &packey, &pacopaque) == 0)
    {
      printf("PAC_key = %s\n", packey);
      printf("PAC_opaque = %s\n", pacopaque);
    }

  /*
  eapfast_xml_add_pac(doc, "aid3", "packey3", "pacopaque3");
  eapfast_xml_add_pac(doc, "aid5", "packey5", "pacopaque5");

  eapfast_xml_save("testfile2.xml", doc);
  */

  eapfast_xml_deinit(doc);
 
}
#endif


#endif // EAP_FAST

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美又粗又大又爽| 亚洲一区二区三区在线看| 麻豆精品一区二区综合av| 在线不卡欧美精品一区二区三区| 亚洲美女视频一区| 91高清视频免费看| 亚洲不卡av一区二区三区| 欧美日本在线一区| 日本成人在线电影网| 精品黑人一区二区三区久久| 国产主播一区二区| 国产精品国产精品国产专区不片| 99re视频精品| 亚洲sss视频在线视频| 欧美成人精品福利| av资源网一区| 亚洲国产人成综合网站| 欧美变态凌虐bdsm| 91视频91自| 免费欧美高清视频| 国产精品美女久久久久aⅴ国产馆| 91亚洲午夜精品久久久久久| 亚洲福中文字幕伊人影院| 精品免费国产二区三区| 99久久久久久99| 蜜桃精品在线观看| 亚洲日本va在线观看| 日韩视频在线一区二区| 97久久超碰国产精品| 91在线免费播放| 亚洲一区在线观看视频| 久久婷婷色综合| 色综合视频一区二区三区高清| 天堂va蜜桃一区二区三区| 国产欧美一区二区精品秋霞影院 | 成人av电影免费在线播放| 亚洲一区二区在线播放相泽| 精品国产1区2区3区| 一本大道久久a久久精二百| 麻豆精品视频在线观看视频| 亚洲欧洲av一区二区三区久久| 欧美一区二区三区视频| 91一区二区在线观看| 国产一区亚洲一区| 日日夜夜精品免费视频| 亚洲欧美激情在线| 国产女同性恋一区二区| 91精品黄色片免费大全| 一本色道a无线码一区v| 国产精品一卡二卡在线观看| 五月天精品一区二区三区| 成人欧美一区二区三区1314| 久久综合中文字幕| 3751色影院一区二区三区| 91免费观看在线| 国产a精品视频| 九色综合狠狠综合久久| 亚洲一区二区三区三| 日韩毛片一二三区| 日本一区二区三区电影| 久久婷婷国产综合精品青草| 欧美电视剧免费观看| 欧美精品久久久久久久多人混战 | 色综合久久久久网| 成人综合在线网站| 国产精品夜夜爽| 国内精品在线播放| 激情伊人五月天久久综合| 免费av网站大全久久| 日韩精品亚洲一区二区三区免费| 最新国产の精品合集bt伙计| 国产精品久久久久久妇女6080| 久久色在线视频| 欧美精品一区二区在线观看| 精品国产凹凸成av人导航| 欧美mv日韩mv| 精品福利视频一区二区三区| 精品福利在线导航| 国产欧美一二三区| 亚洲色图在线视频| 一区二区欧美精品| 亚洲综合精品久久| 亚洲电影一级黄| 日韩精品三区四区| 久久99热99| 国产黄色成人av| av中文字幕不卡| 色猫猫国产区一区二在线视频| 91精品91久久久中77777| 在线视频亚洲一区| 51久久夜色精品国产麻豆| 日韩欧美亚洲一区二区| 精品国产乱码久久久久久图片| 337p日本欧洲亚洲大胆精品| 欧美激情一区二区三区蜜桃视频| 国产精品免费久久| 一级日本不卡的影视| 午夜精品福利一区二区蜜股av| 日韩国产在线观看一区| 国模一区二区三区白浆| 9人人澡人人爽人人精品| 91九色最新地址| 日韩一级完整毛片| 久久久激情视频| 一区二区免费看| 久久精品国产一区二区三| 国产盗摄精品一区二区三区在线 | 亚洲欧美日韩综合aⅴ视频| 亚洲国产日日夜夜| 六月丁香综合在线视频| 成人不卡免费av| 欧美人与禽zozo性伦| 久久久久久9999| 一区二区三区在线视频免费观看| 日韩专区一卡二卡| 成人精品亚洲人成在线| 欧美亚洲禁片免费| 2021中文字幕一区亚洲| 亚洲男人天堂av| 精品一区二区三区香蕉蜜桃| 9色porny自拍视频一区二区| 日韩一区二区免费电影| 亚洲人快播电影网| 免费在线看成人av| 色综合一区二区| 久久综合久色欧美综合狠狠| 亚洲一线二线三线视频| 国产精品一区免费视频| 欧美日韩国产一级二级| 国产精品天天看| 久久精品国产99| 欧美视频一区二区三区| 国产精品女主播av| 久久爱另类一区二区小说| 色视频一区二区| 日本一区二区高清| 麻豆91免费看| 欧美日本高清视频在线观看| 中文字幕一区三区| 激情欧美日韩一区二区| 欧美军同video69gay| 日韩码欧中文字| 国产成人综合网站| 日韩免费性生活视频播放| 亚洲综合激情网| 91久久精品国产91性色tv | av欧美精品.com| 欧美成va人片在线观看| 偷窥少妇高潮呻吟av久久免费| 99久久伊人精品| 欧美高清在线一区| 国产成人精品免费视频网站| 日韩区在线观看| 日韩成人一区二区三区在线观看| 在线一区二区三区四区| 中文字幕一区二区三区在线不卡 | proumb性欧美在线观看| 久久亚洲捆绑美女| 精品亚洲aⅴ乱码一区二区三区| 欧美高清你懂得| 婷婷国产v国产偷v亚洲高清| 欧美日韩午夜精品| 亚洲一区二区在线视频| 在线亚洲欧美专区二区| 亚洲青青青在线视频| 91小视频在线| 亚洲女性喷水在线观看一区| 91在线免费视频观看| 亚洲欧美偷拍另类a∨色屁股| 日韩视频一区二区在线观看| 青青草97国产精品免费观看无弹窗版| 欧美精品一二三区| 男女男精品视频网| 久久婷婷久久一区二区三区| 国产伦理精品不卡| 中文字幕久久午夜不卡| 99国内精品久久| 又紧又大又爽精品一区二区| 日本乱人伦一区| 午夜国产精品一区| 欧美一区二区观看视频| 精品一区二区在线看| 欧美激情一区不卡| 91麻豆.com| 天天综合色天天| 欧美v国产在线一区二区三区| 国内成人免费视频| 国产精品久久久久国产精品日日| 91在线免费看| 天涯成人国产亚洲精品一区av| 日韩视频一区二区三区| 国产成人av电影在线播放| 最新中文字幕一区二区三区 | 欧美日韩免费电影| 琪琪久久久久日韩精品| 国产三级欧美三级| 欧洲精品在线观看| 精品一区二区av| √…a在线天堂一区| 91精品国产综合久久蜜臀|