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

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

?? auth_ntlm.c

?? 代理服務器 squid-2.6.STABLE16
?? C
?? 第 1 頁 / 共 2 頁
字號:
    auth_user_request->scheme_data = NULL;}static voidauthenticateNTLMFreeUser(auth_user_t * auth_user){    ntlm_user_t *ntlm_user = auth_user->scheme_data;    debug(29, 5) ("authenticateNTLMFreeUser: Clearing NTLM scheme data\n");    safe_free(ntlm_user->username);    memPoolFree(ntlm_user_pool, ntlm_user);    auth_user->scheme_data = NULL;}/* clear the NTLM helper of being reserved for future requests */static voidauthenticateNTLMReleaseServer(ntlm_request_t * ntlm_request){    helper_stateful_server *server = ntlm_request->authserver;    if (!server)	return;    debug(29, 9) ("authenticateNTLMReleaseServer: releasing server '%p'\n", server);    ntlm_request->authserver = NULL;    helperStatefulReleaseServer(server);}static voidauthenticateNTLMHandleReply(void *data, void *srv, char *reply){    authenticateStateData *r = data;    int valid;    auth_user_request_t *auth_user_request;    auth_user_t *auth_user;    ntlm_user_t *ntlm_user;    ntlm_request_t *ntlm_request;    char *blob;    debug(29, 9) ("authenticateNTLMHandleReply: Helper: '%p' {%s}\n", srv, reply ? reply : "<NULL>");    valid = cbdataValid(r->data);    if (!valid) {	debug(29, 2) ("AuthenticateNTLMHandleReply: invalid callback data. Releasing helper '%p'.\n", srv);	ntlm_request = r->auth_user_request->scheme_data;	if (ntlm_request != NULL) {	    if (ntlm_request->authserver == NULL)		ntlm_request->authserver = srv;	    authenticateNTLMReleaseServer(ntlm_request);	}	cbdataUnlock(r->data);	authenticateStateFree(r);	return;    }    if (!reply) {	debug(29, 1) ("AuthenticateNTLMHandleReply: Helper '%p' crashed!.\n", srv);	reply = (char *) "BH Internal error";    }    auth_user_request = r->auth_user_request;    ntlm_request = auth_user_request->scheme_data;    assert(ntlm_request != NULL);    assert(ntlm_request->waiting);    ntlm_request->waiting = 0;    safe_free(ntlm_request->client_blob);    auth_user = auth_user_request->auth_user;    assert(auth_user != NULL);    assert(auth_user->auth_type == AUTH_NTLM);    ntlm_user = auth_user_request->auth_user->scheme_data;    if (ntlm_request->authserver == NULL)	ntlm_request->authserver = srv;    else	assert(ntlm_request->authserver == srv);    /* seperate out the useful data */    blob = strchr(reply, ' ');    if (blob) {	blob++;    }    if (strncasecmp(reply, "TT ", 3) == 0) {	/* we have been given a blob to send to the client */	safe_free(ntlm_request->server_blob);	ntlm_request->request->flags.must_keepalive = 1;	if (ntlm_request->request->flags.proxy_keepalive) {	    ntlm_request->server_blob = xstrdup(blob);	    ntlm_request->auth_state = AUTHENTICATE_STATE_NEGOTIATE;	    safe_free(auth_user_request->message);	    auth_user_request->message = xstrdup("Authentication in progress");	    debug(29, 4) ("authenticateNTLMHandleReply: Need to challenge the client with a server blob '%s'\n", blob);	} else {	    ntlm_request->auth_state = AUTHENTICATE_STATE_FAILED;	    safe_free(auth_user_request->message);	    auth_user_request->message = xstrdup("NTLM authentication requires a persistent connection");	}    } else if (strncasecmp(reply, "AF ", 3) == 0) {	auth_user_hash_pointer *usernamehash;	/* we're finished, release the helper */	safe_free(ntlm_user->username);	ntlm_user->username = xstrdup(blob);	safe_free(auth_user_request->message);	auth_user_request->message = xstrdup("Login successful");	debug(29, 4) ("authenticateNTLMHandleReply: Successfully validated user via NTLM. Username '%s'\n", blob);	/* this connection is authenticated */	debug(29, 4) ("authenticated user %s\n", ntlm_user->username);	/* see if this is an existing user with a different proxy_auth 	 * string */	usernamehash = hash_lookup(proxy_auth_username_cache, ntlm_user->username);	if (usernamehash) {	    while (usernamehash && (usernamehash->auth_user->auth_type != auth_user->auth_type || authenticateNTLMcmpUsername(usernamehash->auth_user->scheme_data, ntlm_user) != 0))		usernamehash = usernamehash->next;	}	if (usernamehash) {	    /* we can't seamlessly recheck the username due to the 	     * challenge nature of the protocol. Just free the 	     * temporary auth_user */	    authenticateAuthUserMerge(auth_user, usernamehash->auth_user);	    auth_user = usernamehash->auth_user;	    auth_user_request->auth_user = auth_user;	} else {	    /* store user in hash's */	    authenticateUserNameCacheAdd(auth_user);	}	/* set these to now because this is either a new login from an 	 * existing user or a new user */	auth_user->expiretime = current_time.tv_sec;	authenticateNTLMReleaseServer(ntlm_request);	ntlm_request->auth_state = AUTHENTICATE_STATE_DONE;    } else if (strncasecmp(reply, "NA ", 3) == 0) {	safe_free(auth_user_request->message);	auth_user_request->message = xstrdup(blob);	ntlm_request->auth_state = AUTHENTICATE_STATE_FAILED;	authenticateNTLMReleaseServer(ntlm_request);	debug(29, 4) ("authenticateNTLMHandleReply: Failed validating user via NTLM. Error returned '%s'\n", blob);    } else if (strncasecmp(reply, "BH ", 3) == 0) {	/* TODO kick off a refresh process. This can occur after a YR or after	 * a KK. If after a YR release the helper and resubmit the request via 	 * Authenticate NTLM start. 	 * If after a KK deny the user's request w/ 407 and mark the helper as 	 * Needing YR. */	auth_user_request->message = xstrdup(blob);	ntlm_request->auth_state = AUTHENTICATE_STATE_FAILED;	safe_free(ntlm_request->server_blob);	authenticateNTLMReleaseServer(ntlm_request);	debug(29, 1) ("authenticateNTLMHandleReply: Error validating user via NTLM. Error returned '%s'\n", reply);    } else {	fatalf("authenticateNTLMHandleReply: *** Unsupported helper response ***, '%s'\n", reply);    }    requestUnlink(ntlm_request->request);    ntlm_request->request = NULL;    r->handler(r->data, NULL);    cbdataUnlock(r->data);    authenticateStateFree(r);}static voidauthenticateNTLMStats(StoreEntry * sentry){    storeAppendPrintf(sentry, "NTLM Authenticator Statistics:\n");    helperStatefulStats(sentry, ntlmauthenticators);}/* send the initial data to a stateful ntlm authenticator module */static voidauthenticateNTLMStart(auth_user_request_t * auth_user_request, RH * handler, void *data){    authenticateStateData *r = NULL;    char buf[8192];    char *sent_string = NULL;    ntlm_user_t *ntlm_user;    ntlm_request_t *ntlm_request;    auth_user_t *auth_user;    assert(auth_user_request);    auth_user = auth_user_request->auth_user;    ntlm_user = auth_user->scheme_data;    ntlm_request = auth_user_request->scheme_data;    assert(ntlm_user);    assert(ntlm_request);    assert(handler);    assert(data);    assert(auth_user->auth_type == AUTH_NTLM);    debug(29, 9) ("authenticateNTLMStart: auth state '%d'\n", ntlm_request->auth_state);    sent_string = ntlm_request->client_blob;    debug(29, 9) ("authenticateNTLMStart: state '%d'\n", ntlm_request->auth_state);    debug(29, 9) ("authenticateNTLMStart: '%s'\n", sent_string);    if (ntlmConfig->authenticate == NULL) {	debug(29, 0) ("authenticateNTLMStart: no NTLM program specified:'%s'\n", sent_string);	handler(data, NULL);	return;    }    /* Send blob to helper */    r = cbdataAlloc(authenticateStateData);    r->handler = handler;    cbdataLock(data);    r->data = data;    r->auth_user_request = auth_user_request;    authenticateAuthUserRequestLock(r->auth_user_request);    if (ntlm_request->auth_state == AUTHENTICATE_STATE_INITIAL) {	snprintf(buf, 8192, "YR %s\n", sent_string);    } else {	snprintf(buf, 8192, "KK %s\n", sent_string);    }    ntlm_request->waiting = 1;    safe_free(ntlm_request->client_blob);    helperStatefulSubmit(ntlmauthenticators, buf, authenticateNTLMHandleReply, r, ntlm_request->authserver);}/* clear any connection related authentication details */static voidauthenticateNTLMOnCloseConnection(ConnStateData * conn){    ntlm_request_t *ntlm_request;    assert(conn != NULL);    if (conn->auth_user_request != NULL) {	assert(conn->auth_user_request->scheme_data != NULL);	ntlm_request = conn->auth_user_request->scheme_data;	assert(ntlm_request->conn == conn);	if (ntlm_request->authserver != NULL)	    authenticateNTLMReleaseServer(ntlm_request);	/* unlock the connection based lock */	debug(29, 9) ("authenticateNTLMOnCloseConnection: Unlocking auth_user from the connection.\n");	/* minor abstraction break here: FIXME */	/* Ensure that the auth user request will be getting closed */	/* IFF we start persisting the struct after the conn closes - say for logging	 * then this test may become invalid	 */	assert(conn->auth_user_request->references == 1);	authenticateAuthUserRequestUnlock(conn->auth_user_request);	conn->auth_user_request = NULL;    }}/* authenticateUserUsername: return a pointer to the username in the */static char *authenticateNTLMUsername(auth_user_t * auth_user){    ntlm_user_t *ntlm_user = auth_user->scheme_data;    if (ntlm_user)	return ntlm_user->username;    return NULL;}/* * Called on the initial request only, to set things up for later processing */static voidauthenticateDecodeNTLMAuth(auth_user_request_t * auth_user_request, const char *proxy_auth){    dlink_node *node;    assert(auth_user_request->auth_user == NULL);    auth_user_request->auth_user = authenticateAuthUserNew("ntlm");    auth_user_request->auth_user->auth_type = AUTH_NTLM;    auth_user_request->auth_user->scheme_data = memPoolAlloc(ntlm_user_pool);    auth_user_request->scheme_data = memPoolAlloc(ntlm_request_pool);    memset(auth_user_request->scheme_data, '\0', sizeof(ntlm_request_t));    /* lock for the auth_user_request link */    authenticateAuthUserLock(auth_user_request->auth_user);    node = dlinkNodeNew();    dlinkAdd(auth_user_request, node, &auth_user_request->auth_user->requests);    /* the helper does the rest, with data collected in     * authenticateNTLMAuthenticateUser */    debug(29, 9) ("authenticateDecodeNTLMAuth: NTLM authentication\n");    return;}static intauthenticateNTLMcmpUsername(ntlm_user_t * u1, ntlm_user_t * u2){    return strcmp(u1->username, u2->username);}static intauthNTLMAuthenticated(auth_user_request_t * auth_user_request){    ntlm_request_t *ntlm_request = auth_user_request->scheme_data;    if (ntlm_request->auth_state == AUTHENTICATE_STATE_DONE)	return 1;    debug(29, 9) ("User not fully authenticated.\n");    return 0;}static voidauthenticateNTLMAuthenticateUser(auth_user_request_t * auth_user_request, request_t * request, ConnStateData * conn, http_hdr_type type){    const char *proxy_auth, *blob;    auth_user_t *auth_user;    ntlm_request_t *ntlm_request;    ntlm_user_t *ntlm_user;    auth_user = auth_user_request->auth_user;    assert(auth_user);    assert(auth_user->auth_type == AUTH_NTLM);    assert(auth_user->scheme_data != NULL);    assert(auth_user_request->scheme_data != NULL);    ntlm_user = auth_user->scheme_data;    ntlm_request = auth_user_request->scheme_data;    /* Check that we are in the client side, where we can generate     * auth challenges */    if (!conn) {	ntlm_request->auth_state = AUTHENTICATE_STATE_FAILED;	debug(29, 1) ("authenticateNTLMAuthenticateUser: attempt to perform authentication without a connection!\n");	return;    }    if (ntlm_request->waiting) {	debug(29, 1) ("authenticateNTLMAuthenticateUser: waiting for helper reply!\n");	return;    }    if (ntlm_request->server_blob) {	debug(29, 2) ("authenticateNTLMAuthenticateUser: need to challenge client '%s'!\n", ntlm_request->server_blob);	return;    }    /* get header */    proxy_auth = httpHeaderGetStr(&request->header, type);    blob = proxy_auth;    while (xisspace(*blob) && *blob)	blob++;    while (!xisspace(*blob) && *blob)	blob++;    while (xisspace(*blob) && *blob)	blob++;    switch (ntlm_request->auth_state) {    case AUTHENTICATE_STATE_NONE:	/* we've received a ntlm request. pass to a helper */	debug(29, 9) ("authenticateNTLMAuthenticateUser: auth state ntlm none. %s\n", proxy_auth);	ntlm_request->auth_state = AUTHENTICATE_STATE_INITIAL;	safe_free(ntlm_request->client_blob);	ntlm_request->client_blob = xstrdup(blob);	conn->auth_type = AUTH_NTLM;	conn->auth_user_request = auth_user_request;	ntlm_request->conn = conn;	/* and lock for the connection duration */	debug(29, 9) ("authenticateNTLMAuthenticateUser: Locking auth_user from the connection.\n");	authenticateAuthUserRequestLock(auth_user_request);	ntlm_request->request = requestLink(request);	return;	break;    case AUTHENTICATE_STATE_INITIAL:	debug(29, 1) ("authenticateNTLMAuthenticateUser: need to ask helper!\n");	return;	break;    case AUTHENTICATE_STATE_NEGOTIATE:	/* we should have received a blob from the clien. pass it to the same 	 * helper process */	debug(29, 9) ("authenticateNTLMAuthenticateUser: auth state challenge with header %s.\n", proxy_auth);	/* do a cache lookup here. If it matches it's a successful ntlm 	 * challenge - release the helper and use the existing auth_user 	 * details. */	safe_free(ntlm_request->client_blob);	ntlm_request->client_blob = xstrdup(blob);	if (ntlm_request->request)	    requestUnlink(ntlm_request->request);	ntlm_request->request = requestLink(request);	return;	break;    case AUTHENTICATE_STATE_DONE:	fatal("authenticateNTLMAuthenticateUser: unexpect auth state DONE! Report a bug to the squid developers.\n");	break;    case AUTHENTICATE_STATE_FAILED:	/* we've failed somewhere in authentication */	debug(29, 9) ("authenticateNTLMAuthenticateUser: auth state ntlm failed. %s\n", proxy_auth);	return;    }    return;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜视频一区二区三区| 一区二区三区四区在线| 欧美日韩国产区一| 欧美在线高清视频| 欧美日韩成人在线| 欧美日韩中文一区| 欧美日韩成人激情| 日韩网站在线看片你懂的| 欧美日韩一区精品| 欧美日韩1区2区| 欧美精品第1页| 在线电影国产精品| 欧美r级在线观看| 精品成人在线观看| 中文字幕成人在线观看| 国产精品国产三级国产普通话99 | 夜夜嗨av一区二区三区| 一级日本不卡的影视| 午夜精品久久久久久久99樱桃| 亚洲无线码一区二区三区| 日韩精品一区第一页| 国产制服丝袜一区| 粉嫩av一区二区三区粉嫩| www.av精品| 欧美日韩综合一区| 欧美一区二区三区人| 久久嫩草精品久久久精品一| 欧美极品美女视频| 亚洲精品视频观看| 精品制服美女丁香| 成人精品gif动图一区| 欧美综合欧美视频| 日韩欧美成人激情| 国产精品福利av| 午夜精品久久久久久久99水蜜桃| 精品一区二区久久| 色婷婷亚洲综合| 精品久久久影院| 中文字幕在线不卡一区二区三区| 亚洲成a人片综合在线| 久久99热这里只有精品| 成人污污视频在线观看| 51久久夜色精品国产麻豆| 国产欧美一区二区精品忘忧草| 一区二区三区成人在线视频| 麻豆成人91精品二区三区| 99国产精品国产精品毛片| 欧美一级午夜免费电影| 亚洲欧美激情一区二区| 国产在线精品一区二区夜色 | 亚洲一区二区3| 国产一区二区三区免费观看| 欧美亚男人的天堂| 中文字幕 久热精品 视频在线 | 欧美韩国日本综合| 日本sm残虐另类| 在线观看免费亚洲| 亚洲三级久久久| 国产精品羞羞答答xxdd| 欧美一三区三区四区免费在线看| 中文字幕日本不卡| 国产成人av自拍| 精品福利av导航| 日本人妖一区二区| 欧美日韩精品电影| 一级做a爱片久久| 色综合天天视频在线观看| 国产精品久久久一区麻豆最新章节| 日韩国产欧美视频| 欧美日韩精品一区二区三区蜜桃| 日韩一区有码在线| 91麻豆精品一区二区三区| 欧美高清在线一区二区| 国产精品一二一区| 久久青草国产手机看片福利盒子| 婷婷久久综合九色国产成人 | 国产精品美女一区二区在线观看| 激情另类小说区图片区视频区| 欧美日本高清视频在线观看| 午夜精品免费在线观看| 欧美三级在线看| 日韩影视精彩在线| 精品国产青草久久久久福利| 麻豆成人久久精品二区三区小说| 精品国产91洋老外米糕| 国产精品资源在线看| 久久伊人蜜桃av一区二区| 国产成人一区二区精品非洲| 国产欧美精品在线观看| 成人激情图片网| 一级特黄大欧美久久久| 911国产精品| 国产精品一区二区久激情瑜伽 | 91免费精品国自产拍在线不卡| 成人网页在线观看| 一区二区三区四区国产精品| 欧美又粗又大又爽| 午夜电影网亚洲视频| 欧美成人福利视频| 国产 欧美在线| 一区二区三区四区在线| 制服丝袜激情欧洲亚洲| 国产精一品亚洲二区在线视频| 国产婷婷色一区二区三区四区 | 日本一区二区三区在线观看| 99精品欧美一区| 午夜伊人狠狠久久| 久久免费午夜影院| 色狠狠色噜噜噜综合网| 免费人成精品欧美精品| 国产精品美女视频| 欧美日本韩国一区二区三区视频| 极品美女销魂一区二区三区| 国产精品理论在线观看| 欧美精品一二三| 福利视频网站一区二区三区| 一区二区三区中文字幕电影| 日韩欧美一区二区在线视频| 99视频国产精品| 美女诱惑一区二区| 亚洲欧美成人一区二区三区| 日韩欧美一二区| 91官网在线观看| 国产一区二区女| 日韩av在线发布| 亚洲欧美激情小说另类| 久久久精品蜜桃| 欧美一区中文字幕| 欧美日韩久久久| 成人app在线| 久久成人久久爱| 午夜电影久久久| 一区二区三区 在线观看视频| 精品久久久久香蕉网| 69成人精品免费视频| 日本精品裸体写真集在线观看| 国产美女在线精品| 久久99热这里只有精品| 日本少妇一区二区| 偷拍一区二区三区| 亚洲va韩国va欧美va精品| 亚洲女同ⅹxx女同tv| 国产精品伦理在线| 欧美国产乱子伦| 国产三级精品三级| 久久一二三国产| 精品久久久久久亚洲综合网 | 久久毛片高清国产| 精品日韩欧美在线| 日韩欧美国产一二三区| 欧美一区二区三区小说| 欧美一区二区三区免费大片| 欧美精品aⅴ在线视频| 欧美一区二区三区视频在线观看 | 成+人+亚洲+综合天堂| 国产福利一区二区三区视频在线 | 午夜精品久久久久| 五月婷婷激情综合| 视频一区免费在线观看| 青娱乐精品在线视频| 美日韩一级片在线观看| 国产精品影视在线观看| 国产乱人伦精品一区二区在线观看| 久久99精品国产麻豆不卡| 国内外精品视频| 国产99久久精品| 97久久超碰国产精品电影| 成人免费高清视频| 成人福利视频在线| 欧美在线制服丝袜| 欧美午夜精品一区| 欧美日韩国产美| 欧美高清视频不卡网| 国产精品一区二区果冻传媒| 激情久久五月天| 99r国产精品| 99re免费视频精品全部| 色婷婷久久99综合精品jk白丝| 色婷婷综合久色| 欧美亚洲综合一区| 欧美人与禽zozo性伦| 久久久99免费| 亚洲丝袜另类动漫二区| 一区二区三区在线免费视频 | 美女被吸乳得到大胸91| 亚洲成人一区在线| 国内精品国产三级国产a久久| 国产一区美女在线| a亚洲天堂av| 日韩三级视频在线看| 国产视频一区二区在线观看| 国产精品日日摸夜夜摸av| 人妖欧美一区二区| 精品无人区卡一卡二卡三乱码免费卡| 国产酒店精品激情| 欧美性猛片xxxx免费看久爱| 91精品国产高清一区二区三区 | 亚洲图片激情小说| 午夜精品久久久久久久蜜桃app| 最近日韩中文字幕|