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

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

?? ssl_client.c

?? cas 客戶端文件
?? C
字號:
/*  * OpenSSL-based CAS ticket validator by Shawn Bayern, based on  * OpenSSL demonstration code. */#include <stdio.h>#include <memory.h>#include <errno.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <netdb.h>#include <openssl/crypto.h>#include <openssl/x509.h>#include <openssl/pem.h>#include <openssl/ssl.h>#include <openssl/err.h>#include "cas.h"#define END(x) { ret = (x); goto end; }#define FAIL END(0)#define FAIL_BAD_CERT END(BAD_CERT)#define SUCCEED END(1)/* * TODO: This really ought to be configurable at runtime.  At least you * can declare multiple CA certificates easily (at compile time) through * this array. */static char *trusted_ca[] = {    "/usr/local/etc/verisignserverca.pem",    NULL};int CAS_validate(char *ticket, char *service, char *outbuf, int outbuflen);static X509 *get_cert_from_file(char *filename);static int valid_cert(X509 *cert, char *hostname);/** Returns status of certification:  0 for invalid, 1 for valid. */static int valid_cert(X509 *cert, char *hostname){  int i;  char buf[4096];  X509_STORE *store = X509_STORE_new();  X509_STORE_CTX *ctx = X509_STORE_CTX_new();  for (i = 0; trusted_ca[i] != NULL; i++) {    X509 *cacert = get_cert_from_file(trusted_ca[i]);    if (cacert)      X509_STORE_add_cert(store, cacert);  }  X509_STORE_CTX_init(ctx, store, cert, sk_X509_new_null());  if (X509_verify_cert(ctx) == 0)    return 0;  X509_NAME_get_text_by_NID(X509_get_subject_name(cert), NID_commonName,    buf, sizeof(buf) - 1);  // anal-retentive:  make sure the hostname isn't as long as the  // buffer, since we don't want to match only because of truncation  if (strlen(hostname) >= sizeof(buf) - 1)    return 0;  return (!strcmp(buf, hostname));}/** Returns status of ticket by filling 'buf' with a NetID if the ticket *  is valid and buf is large enough and returning 1.  If not, 0 is *  returned. */int CAS_validate(char *ticket, char *service, char *outbuf, int outbuflen){  int err, b, ret, total;  int s = 0;  struct sockaddr_in sa;  struct hostent h, *hp2;  SSL_CTX *ctx = NULL;  SSL *ssl = NULL;  X509 *s_cert = NULL;  char buf[4096];  SSL_METHOD *method;  char *full_request, *str, *tmp;  SSLeay_add_ssl_algorithms();  method = SSLv23_client_method();  SSL_load_error_strings();  ctx = SSL_CTX_new(method);  if (!ctx)    FAIL;  if ((s = socket(AF_INET, SOCK_STREAM, 0)) == -1)    FAIL;  memset(&sa, 0, sizeof(sa));  sa.sin_family = AF_INET;  hp2 = gethostbyname(CAS_HOST);  memcpy(&h, hp2, sizeof(h));//  gethostbyname_r(CAS_HOST, &h, buf, sizeof(buf), &hp2, &b);  memcpy(&(sa.sin_addr.s_addr), h.h_addr_list[0], sizeof(long));  sa.sin_port = htons(CAS_PORT);  if (connect(s, (struct sockaddr*) &sa, sizeof(sa)) == -1)    FAIL;  if (!(ssl = SSL_new(ctx)))    FAIL;  SSL_set_fd(ssl, s);  if (!SSL_connect(ssl))    FAIL;  if (!(s_cert = SSL_get_peer_certificate(ssl)))    FAIL_BAD_CERT;  if (!valid_cert(s_cert, CAS_HOST))    FAIL_BAD_CERT;  X509_free(s_cert);  full_request = malloc(strlen(CAS_METHOD) + strlen(" ")    + strlen(CAS_VALIDATE) + strlen("?ticket=") + strlen(ticket) +     + strlen("&service=") + strlen(service) + strlen(" ")     + strlen(CAS_PROT) + strlen("\n\n") + 1);  sprintf(full_request, "%s %s?ticket=%s&service=%s %s\n\n",    CAS_METHOD, CAS_VALIDATE, ticket, service, CAS_PROT);  if (!SSL_write(ssl, full_request, strlen(full_request)))    FAIL;  total = 0;  do {    b = SSL_read(ssl, buf + total, (sizeof(buf) - 1) - total);    total += b;  } while (b > 0);  buf[total] = '\0';  if (b != 0 || total >= sizeof(buf) - 1)    FAIL;		// unexpected read error or response too large  /*   * The following segment of code is spelled out in excruciating detail   * since it's worth the extra care.   */  str = strstr(buf, "\r\n\r\n");  // find the end of the header  if (!str)    FAIL;			// no header  str += 4;			// safe because we just found "\r\n\r\n"  if (strncmp(str, "yes", 3))    FAIL;			// no affirmative response  str = strchr(str, '\n');	// find the end of the current line  if (!str) {    str = strchr(str, '\r');    // possibly ended in CR (ok by RFC-2616)    if (!str)      FAIL;			// unexpectedly short body  }  str++;			// safe because we just found "\n" or "\r"    // now, we've got the NetID and a bunch of crap after it.  Find the next  // '[\r]\n' and end the string there  {    char *str2 = strchr(str, '\r');    if (!str2) {      str2 = strchr(str, '\n');	if (!str2)	  FAIL;			// unexpectedly short body    }    *str2 = '\0';		// remove [\r]\n  }  /*   * without enough space, fail entirely, since a partial NetID could   * be dangerous   */  if (outbuflen < strlen(str) + 1)    FAIL;  strcpy(outbuf, str);  SUCCEED;   /* cleanup and return */end:  if (ssl)    SSL_shutdown(ssl);  if (s > 0)    close(s);  if (ssl)    SSL_free(ssl);  if (ctx)    SSL_CTX_free(ctx);  return ret;}static X509 *get_cert_from_file(char *filename) {    FILE *f = fopen(filename, "r");    if (f) {	X509 *c = PEM_read_X509(f, NULL, NULL, NULL);	fclose(f);	return c;    } else {	return NULL;    }}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品亚洲国内自在自线福利| 亚洲一区二三区| 精彩视频一区二区| 欧美一区二区三区在线电影| 日韩不卡免费视频| 2020国产精品| 成人精品高清在线| 亚洲欧美一区二区不卡| 欧美亚洲日本国产| 日本欧美一区二区三区乱码| 精品国精品国产| 粉嫩嫩av羞羞动漫久久久| 最新高清无码专区| 欧美久久久久久久久中文字幕| 午夜精品国产更新| 亚洲精品在线观看网站| 成人精品视频一区| 亚洲图片欧美综合| 欧美zozozo| av在线不卡网| 亚洲va欧美va人人爽午夜| 欧美刺激午夜性久久久久久久| 国产呦萝稀缺另类资源| 亚洲人成小说网站色在线| 欧美日韩国产欧美日美国产精品| 另类欧美日韩国产在线| 中文字幕中文在线不卡住| 欧美色涩在线第一页| 国内精品伊人久久久久影院对白| 中文字幕在线一区二区三区| 欧美日韩一区二区在线观看视频| 久久99精品久久久久久动态图 | 青青草原综合久久大伊人精品| 久久久综合九色合综国产精品| 91免费国产视频网站| 蜜桃视频一区二区| 亚洲视频你懂的| 精品久久久久99| 欧美三区在线观看| 国产成人高清在线| 日韩精品一卡二卡三卡四卡无卡| 国产精品系列在线| 欧美一区二区三区日韩| 99国产精品久| 国产乱码一区二区三区| 亚洲成人精品一区二区| 国产精品美女久久久久av爽李琼| 欧美日本国产一区| 91在线观看成人| 国产一区二区三区精品欧美日韩一区二区三区 | 国产精品看片你懂得| 91精品国模一区二区三区| 99久久精品情趣| 韩国毛片一区二区三区| 天天综合色天天综合| 亚洲蜜臀av乱码久久精品| 国产视频911| 日韩精品一区二区三区老鸭窝| 日本道精品一区二区三区| 国产盗摄视频一区二区三区| 久久精品av麻豆的观看方式| 亚洲国产精品一区二区尤物区| 国产精品人人做人人爽人人添| 日韩免费观看高清完整版在线观看| 91国产成人在线| av高清不卡在线| 国产69精品一区二区亚洲孕妇| 久久精品国产亚洲高清剧情介绍 | 亚洲人成在线观看一区二区| 国产午夜久久久久| 精品久久五月天| 日韩三级视频在线看| 欧美精品日韩精品| 欧美精品日韩精品| 欧美喷潮久久久xxxxx| 欧美色视频在线| 欧美性大战久久久| 欧美日韩精品欧美日韩精品| 91成人在线免费观看| 在线精品视频免费观看| 色诱视频网站一区| 在线亚洲免费视频| 在线观看视频一区二区| 色综合久久88色综合天天| 91福利在线播放| 欧美午夜片在线看| 欧美疯狂做受xxxx富婆| 欧美一区二区三区视频| 日韩三级免费观看| 2023国产精品| 国产日产欧美一区| 日韩美女视频19| 一区二区三区日韩| 天天综合色天天| 狂野欧美性猛交blacked| 国产一区二区在线观看视频| 国产电影一区二区三区| 99国产精品久| 欧美日韩在线播放一区| 欧美一级一级性生活免费录像| 日韩视频中午一区| 欧美激情一区在线| 一区二区三区视频在线观看| 午夜电影一区二区三区| 久久成人免费电影| av男人天堂一区| 欧美精品高清视频| 久久一区二区三区国产精品| 国产精品蜜臀在线观看| 亚洲一区在线视频| 美女在线视频一区| av一区二区三区黑人| 欧美日韩综合色| 久久久久久久久久久久久久久99 | 一道本成人在线| 在线91免费看| 久久久www成人免费毛片麻豆| 亚洲欧洲日韩一区二区三区| 日韩精品三区四区| 成人午夜av在线| 欧美久久久久久久久久| 国产精品欧美经典| 日韩成人dvd| thepron国产精品| 在线播放/欧美激情| 国产精品女同一区二区三区| 亚洲成人一区二区在线观看| 国产宾馆实践打屁股91| 欧美无乱码久久久免费午夜一区| 精品国产99国产精品| 亚洲乱码国产乱码精品精98午夜| 麻豆高清免费国产一区| 日本韩国欧美一区二区三区| 日韩欧美久久久| 亚洲精品乱码久久久久久| 麻豆免费精品视频| 欧美调教femdomvk| 国产农村妇女毛片精品久久麻豆| 天天综合色天天| 99精品视频在线播放观看| 精品福利一二区| 亚洲成av人片在线观看| 99精品黄色片免费大全| 久久久久久电影| 日韩电影免费一区| 欧美午夜精品一区二区蜜桃| 国产精品理论片| 国产成a人无v码亚洲福利| 欧美一激情一区二区三区| 亚洲与欧洲av电影| 99久久精品国产麻豆演员表| 久久久久久久久久久久久女国产乱 | 激情欧美日韩一区二区| 欧美理论在线播放| 亚洲免费av在线| av在线播放不卡| 亚洲国产岛国毛片在线| 国产精品1024久久| 久久久午夜精品| 国产一区二区三区在线观看免费视频| 欧美人伦禁忌dvd放荡欲情| 一区二区免费在线| 91日韩精品一区| 国产精品初高中害羞小美女文| 国产激情偷乱视频一区二区三区 | 久久美女艺术照精彩视频福利播放| 日本大胆欧美人术艺术动态| 欧美日韩国产经典色站一区二区三区| 亚洲蜜臀av乱码久久精品| 99久精品国产| 亚洲六月丁香色婷婷综合久久 | 色综合久久久久久久久久久| 中文字幕一区日韩精品欧美| 不卡av在线免费观看| 国产精品成人一区二区艾草| av激情成人网| 一区二区高清在线| 欧美日韩高清影院| 日韩电影一二三区| 日韩免费高清av| 韩国精品主播一区二区在线观看 | 午夜影视日本亚洲欧洲精品| 欧美欧美欧美欧美| 久久精品国产亚洲一区二区三区| 精品日韩欧美在线| 国产不卡视频在线播放| 亚洲欧美视频在线观看| 欧洲在线/亚洲| 日本不卡一区二区三区高清视频| 亚洲精品第1页| 色婷婷综合久色| 视频在线观看国产精品| 欧美videos大乳护士334| 国产一区二区影院| 亚洲视频1区2区| 777a∨成人精品桃花网| 国产一区二区三区免费在线观看| 国产精品免费av| 欧美日产国产精品| 国产成人av一区二区三区在线观看|