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

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

?? libntlmssp.c

?? 代理服務器 squid-2.6.STABLE16
?? C
字號:
/* * (C) 2002 Guido Serassio <serassio@libero.it> * Based on previous work of Francesco Chemolli and Robert Collins * Distributed freely under the terms of the GNU General Public License, * version 2. See the file COPYING for licensing details * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details.  * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA. */typedef unsigned char uchar;#include "util.h"#include "ntlm.h"#if HAVE_CTYPE_H#include <ctype.h>#endif#include <lm.h>#include <ntsecapi.h>/* returns 1 on success, 0 on failure */intValid_Group(char *UserName, char *Group){    int result = FALSE;    WCHAR wszUserName[UNLEN + 1];	// Unicode user name    WCHAR wszGroup[GNLEN + 1];	// Unicode Group    LPLOCALGROUP_USERS_INFO_0 pBuf;    LPLOCALGROUP_USERS_INFO_0 pTmpBuf;    DWORD dwLevel = 0;    DWORD dwFlags = LG_INCLUDE_INDIRECT;    DWORD dwPrefMaxLen = -1;    DWORD dwEntriesRead = 0;    DWORD dwTotalEntries = 0;    NET_API_STATUS nStatus;    DWORD i;    DWORD dwTotalCount = 0;    LPBYTE pBufTmp = NULL;/* Convert ANSI User Name and Group to Unicode */    MultiByteToWideChar(CP_ACP, 0, UserName,	strlen(UserName) + 1, wszUserName,	sizeof(wszUserName) / sizeof(wszUserName[0]));    MultiByteToWideChar(CP_ACP, 0, Group,	strlen(Group) + 1, wszGroup, sizeof(wszGroup) / sizeof(wszGroup[0]));    /*     * Call the NetUserGetLocalGroups function      * specifying information level 0.     *      * The LG_INCLUDE_INDIRECT flag specifies that the      * function should also return the names of the local      * groups in which the user is indirectly a member.     */    nStatus = NetUserGetLocalGroups(NULL,	wszUserName,	dwLevel,	dwFlags,	&pBufTmp,	dwPrefMaxLen,	&dwEntriesRead,	&dwTotalEntries);    pBuf = (LPLOCALGROUP_USERS_INFO_0) pBufTmp;    /*     * If the call succeeds,     */    if (nStatus == NERR_Success) {	if ((pTmpBuf = pBuf) != NULL) {	    for (i = 0; i < dwEntriesRead; i++) {		if (pTmpBuf == NULL) {		    result = FALSE;		    break;		}		if (wcscmp(pTmpBuf->lgrui0_name, wszGroup) == 0) {		    result = TRUE;		    break;		}		pTmpBuf++;		dwTotalCount++;	    }	}    } else	result = FALSE;/* * Free the allocated memory. */    if (pBuf != NULL)	NetApiBufferFree(pBuf);    return result;}char *AllocStrFromLSAStr(LSA_UNICODE_STRING LsaStr){    size_t len;    static char *target;    len = LsaStr.Length / sizeof(WCHAR) + 1;    /* allocate buffer for str + null termination */    safe_free(target);    target = (char *) xmalloc(len);    if (target == NULL)	return NULL;    /* copy unicode buffer */    WideCharToMultiByte(CP_ACP, 0, LsaStr.Buffer, LsaStr.Length, target, len, NULL, NULL);    /* add null termination */    target[len - 1] = '\0';    return target;}char *GetDomainName(void){    LSA_HANDLE PolicyHandle;    LSA_OBJECT_ATTRIBUTES ObjectAttributes;    NTSTATUS status;    PPOLICY_PRIMARY_DOMAIN_INFO ppdiDomainInfo = NULL;    PWKSTA_INFO_100 pwkiWorkstationInfo;    DWORD netret;    char *DomainName = NULL;    LPBYTE pwkiWorkstationInfoTmp;    /*      * Always initialize the object attributes to all zeroes.     */    memset(&ObjectAttributes, '\0', sizeof(ObjectAttributes));    /*      * You need the local workstation name. Use NetWkstaGetInfo at level     * 100 to retrieve a WKSTA_INFO_100 structure.     *      * The wki100_computername field contains a pointer to a UNICODE     * string containing the local computer name.     */    netret = NetWkstaGetInfo(NULL, 100, &pwkiWorkstationInfoTmp);    pwkiWorkstationInfo = (PWKSTA_INFO_100) pwkiWorkstationInfoTmp;    if (netret == NERR_Success) {	/* 	 * We have the workstation name in:	 * pwkiWorkstationInfo->wki100_computername	 * 	 * Next, open the policy object for the local system using	 * the LsaOpenPolicy function.	 */	status = LsaOpenPolicy(	    NULL,	    &ObjectAttributes,	    GENERIC_READ | POLICY_VIEW_LOCAL_INFORMATION,	    &PolicyHandle	    );	/* 	 * Error checking.	 */	if (status) {	    debug("OpenPolicy Error: %ld\n", status);	} else {	    PVOID ppdiDomainInfoTmp;	    /* 	     * You have a handle to the policy object. Now, get the	     * domain information using LsaQueryInformationPolicy.	     */	    status = LsaQueryInformationPolicy(PolicyHandle,		PolicyPrimaryDomainInformation,		&ppdiDomainInfoTmp);	    ppdiDomainInfo = (PPOLICY_PRIMARY_DOMAIN_INFO) ppdiDomainInfoTmp;	    if (status) {		debug("LsaQueryInformationPolicy Error: %ld\n", status);	    } else {		/* Get name in useable format */		DomainName = AllocStrFromLSAStr(ppdiDomainInfo->Name);		/* 		 * Check the Sid pointer, if it is null, the		 * workstation is either a stand-alone computer		 * or a member of a workgroup.		 */		if (ppdiDomainInfo->Sid) {		    /* 		     * Member of a domain. Display it in debug mode.		     */		    debug("Member of Domain %s\n", DomainName);		} else {		    DomainName = NULL;		}	    }	}	/* 	 * Clean up all the memory buffers created by the LSA and	 * Net* APIs.	 */	NetApiBufferFree(pwkiWorkstationInfo);	LsaFreeMemory((LPVOID) ppdiDomainInfo);    } else	debug("NetWkstaGetInfo Error: %ld\n", netret);    return DomainName;}int ntlm_errno;/* returns NULL on failure, or a pointer to * the user's credentials (domain\\username) * upon success. WARNING. It's pointing to static storage. * In case of problem sets as side-effect ntlm_errno to one of the * codes defined in ntlm.h */char *ntlm_check_auth(ntlm_authenticate * auth, int auth_length){    int rv;    char domain[DNLEN + 1];    char user[UNLEN + 1];    static char credentials[DNLEN + UNLEN + 2];		/* we can afford to waste */    lstring tmp;    if (!NTLM_LocalCall) {	tmp = ntlm_fetch_string((char *) auth, auth_length, &auth->domain);	if (tmp.str == NULL || tmp.l == 0) {	    debug("No domain supplied. Returning no-auth\n");	    ntlm_errno = NTLM_BAD_REQUEST;	    return NULL;	}	if (Use_Unicode) {	    /* copy unicode buffer */	    WideCharToMultiByte(CP_ACP, 0, (LPCWSTR) tmp.str, tmp.l, domain, DNLEN, NULL, NULL);	    /* add null termination */	    domain[tmp.l / sizeof(WCHAR)] = '\0';	} else {	    if (tmp.l > DNLEN) {		debug("Domain string exceeds %d bytes, rejecting\n", DNLEN);		ntlm_errno = NTLM_BAD_REQUEST;		return NULL;	    }	    memcpy(domain, tmp.str, tmp.l);	    domain[tmp.l] = '\0';	}	tmp = ntlm_fetch_string((char *) auth, auth_length, &auth->user);	if (tmp.str == NULL || tmp.l == 0) {	    debug("No username supplied. Returning no-auth\n");	    ntlm_errno = NTLM_BAD_REQUEST;	    return NULL;	}	if (Use_Unicode) {	    /* copy unicode buffer */	    WideCharToMultiByte(CP_ACP, 0, (LPCWSTR) tmp.str, tmp.l, user, UNLEN, NULL, NULL);	    /* add null termination */	    user[tmp.l / sizeof(WCHAR)] = '\0';	} else {	    if (tmp.l > UNLEN) {		debug("Username string exceeds %d bytes, rejecting\n", UNLEN);		ntlm_errno = NTLM_BAD_REQUEST;		return NULL;	    }	    memcpy(user, tmp.str, tmp.l);	    user[tmp.l] = '\0';	}	debug("checking domain: '%s', user: '%s'\n", domain, user);    } else	debug("checking local user\n");    rv = SSP_ValidateNTLMCredentials(auth, auth_length, credentials);    debug("Login attempt had result %d\n", rv);    if (!rv) {			/* failed */	ntlm_errno = NTLM_SSPI_ERROR;	return NULL;    }    if (UseAllowedGroup) {	if (!Valid_Group(credentials, NTAllowedGroup)) {	    ntlm_errno = NTLM_BAD_NTGROUP;	    debug("User %s not in allowed Group %s\n", credentials, NTAllowedGroup);	    return NULL;	}    }    if (UseDisallowedGroup) {	if (Valid_Group(credentials, NTDisAllowedGroup)) {	    ntlm_errno = NTLM_BAD_NTGROUP;	    debug("User %s is in denied Group %s\n", credentials, NTDisAllowedGroup);	    return NULL;	}    }    debug("credentials: %s\n", credentials);    return credentials;}const char *ntlm_make_negotiate(void){    ntlm_negotiate ne;    const char *encoded;    memset(&ne, 0, sizeof(ntlm_negotiate));	/* reset */    memcpy(ne.signature, "NTLMSSP", 8);		/* set the signature */    ne.type = WSWAP(NTLM_NEGOTIATE);	/* this is a challenge */    ne.flags = WSWAP(	NEGOTIATE_ALWAYS_SIGN |	NEGOTIATE_USE_NTLM |	NEGOTIATE_USE_LM |	NEGOTIATE_ASCII |	0	);    encoded = base64_encode_bin((char *) &ne, NEGOTIATE_LENGTH);    debug("Negotiate packet not supplied - self generated\n");    return encoded;}voidhex_dump(void *data, int size){    /* dumps size bytes of *data to stdout. Looks like:     * [0000] 75 6E 6B 6E 6F 77 6E 20     *                  30 FF 00 00 00 00 39 00 unknown 0.....9.     * (in a single line of course)     */    if (!data)	return;    if (debug_enabled) {	unsigned char *p = data;	unsigned char c;	int n;	char bytestr[4] =	{0};	char addrstr[10] =	{0};	char hexstr[16 * 3 + 5] =	{0};	char charstr[16 * 1 + 5] =	{0};	for (n = 1; n <= size; n++) {	    if (n % 16 == 1) {		/* store address for this line */		snprintf(addrstr, sizeof(addrstr), "%.4x",		    ((unsigned int) p - (unsigned int) data));	    }	    c = *p;	    if (xisalnum(c) == 0) {		c = '.';	    }	    /* store hex str (for left side) */	    snprintf(bytestr, sizeof(bytestr), "%02X ", *p);	    strncat(hexstr, bytestr, sizeof(hexstr) - strlen(hexstr) - 1);	    /* store char str (for right side) */	    snprintf(bytestr, sizeof(bytestr), "%c", c);	    strncat(charstr, bytestr, sizeof(charstr) - strlen(charstr) - 1);	    if (n % 16 == 0) {		/* line completed */		fprintf(stderr, "[%4.4s]   %-50.50s  %s\n", addrstr, hexstr, charstr);		hexstr[0] = 0;		charstr[0] = 0;	    } else if (n % 8 == 0) {		/* half line: add whitespaces */		strncat(hexstr, "  ", sizeof(hexstr) - strlen(hexstr) - 1);		strncat(charstr, " ", sizeof(charstr) - strlen(charstr) - 1);	    }	    p++;		/* next byte */	}	if (strlen(hexstr) > 0) {	    /* print rest of buffer if not empty */	    fprintf(stderr, "[%4.4s]   %-50.50s  %s\n", addrstr, hexstr, charstr);	}    }}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩精品欧美日韩精品一综合| 自拍av一区二区三区| 国产精品久久看| 日本va欧美va欧美va精品| 成人毛片老司机大片| 欧美大肚乱孕交hd孕妇| 亚洲h在线观看| 色综合天天综合网国产成人综合天 | 精品精品欲导航| 亚洲另类中文字| 国产伦精品一区二区三区在线观看| 欧美性一二三区| 亚洲乱码国产乱码精品精小说 | a级精品国产片在线观看| 日韩极品在线观看| 欧洲一区在线电影| 国产精品网曝门| 国产成人8x视频一区二区| 欧美日韩成人激情| 亚洲综合一区二区三区| www.久久精品| 中文字幕一区二区三区不卡| 国产激情视频一区二区在线观看 | 91行情网站电视在线观看高清版| 久久亚区不卡日本| 国产一区二区三区黄视频| 欧美成人女星排行榜| 麻豆一区二区在线| 宅男在线国产精品| 日韩av中文在线观看| 欧美日本国产视频| 日本在线不卡视频一二三区| 欧美日韩国产一级片| 日韩影视精彩在线| 欧美va亚洲va香蕉在线| 国产老妇另类xxxxx| 国产午夜亚洲精品羞羞网站| 国产a视频精品免费观看| 久久精品免视看| 不卡av免费在线观看| 亚洲欧洲中文日韩久久av乱码| 色综合咪咪久久| 一区二区三区色| 91.麻豆视频| 国产制服丝袜一区| 日韩理论电影院| 欧美日韩精品一二三区| 毛片av一区二区三区| 久久久久久久久久久久电影| 99视频有精品| 婷婷中文字幕一区三区| 久久综合色之久久综合| 不卡一区中文字幕| 亚洲福利视频导航| 欧美成人欧美edvon| 不卡在线视频中文字幕| 亚洲一区二区欧美| 精品动漫一区二区三区在线观看| 国产激情视频一区二区三区欧美 | 国产精品久久精品日日| 欧美亚洲国产怡红院影院| 日韩av网站在线观看| 国产亚洲精品精华液| 在线观看日产精品| 国产一区日韩二区欧美三区| 国产精品超碰97尤物18| 欧美一区二区日韩一区二区| 国产成人精品亚洲午夜麻豆| 一区二区三区毛片| 久久亚洲捆绑美女| 欧美色综合久久| 国产91在线观看| 日韩高清在线不卡| 亚洲欧洲色图综合| 欧美第一区第二区| 在线观看国产日韩| 成人午夜电影小说| 免费在线观看一区| 一区二区视频免费在线观看| 精品国产伦一区二区三区观看体验 | 日韩欧美一级精品久久| 99国产精品久久| 国产一区二区三区高清播放| 午夜视频在线观看一区| 久久综合色播五月| 欧美精品免费视频| 99精品视频中文字幕| 国产老女人精品毛片久久| 丝袜美腿成人在线| 亚洲精品免费视频| 日韩毛片一二三区| 中文字幕二三区不卡| 26uuu精品一区二区三区四区在线| 日本韩国欧美在线| 不卡电影一区二区三区| 国产成人在线视频网址| 九一九一国产精品| 天堂久久久久va久久久久| 一区二区三区日韩欧美| 亚洲女同一区二区| 亚洲女同ⅹxx女同tv| 中文字幕av一区二区三区高| 久久久精品综合| 欧美tickling网站挠脚心| 欧美一级艳片视频免费观看| 欧美日韩国产成人在线免费| 色综合天天综合网国产成人综合天| 国产suv精品一区二区三区| 国产盗摄视频一区二区三区| 久久99这里只有精品| 日韩电影免费在线看| 欧美aⅴ一区二区三区视频| 亚洲电影一级片| 午夜av区久久| 欧美96一区二区免费视频| 久久成人免费网| 精品中文字幕一区二区| 韩国午夜理伦三级不卡影院| 国产资源在线一区| 国产成人综合在线播放| 国产一二精品视频| 国产成人免费在线视频| 成人网页在线观看| 色天天综合久久久久综合片| 日本韩国精品在线| 欧美女孩性生活视频| 欧美男同性恋视频网站| 欧美v日韩v国产v| 国产欧美日韩精品一区| 亚洲欧美韩国综合色| 一区二区三区91| 日韩av网站在线观看| 国产毛片精品视频| 99vv1com这只有精品| 欧美日韩综合一区| 欧美一级日韩不卡播放免费| 久久久久久久久久久久久久久99 | 天天综合日日夜夜精品| 韩国视频一区二区| 91麻豆国产在线观看| 欧美人伦禁忌dvd放荡欲情| 26uuu成人网一区二区三区| 国产精品国产三级国产| 午夜伊人狠狠久久| 国产成人精品一区二区三区网站观看| 91亚洲男人天堂| 在线播放91灌醉迷j高跟美女| 精品国产伦一区二区三区免费| 中文av一区二区| 日韩高清中文字幕一区| 成人av在线电影| 91精品国产福利| 亚洲欧美自拍偷拍色图| 日韩电影网1区2区| 91在线视频观看| 欧美哺乳videos| 亚洲精品成人在线| 国产成人av电影在线播放| 欧美视频精品在线| 国产精品久久久久久久久免费相片 | 视频一区国产视频| 成人免费高清视频| 日韩亚洲欧美一区二区三区| 亚洲色图欧美激情| 国产精品一区二区三区四区| 欧美午夜精品免费| 国产精品家庭影院| 玖玖九九国产精品| 欧美在线小视频| 国产精品成人一区二区艾草 | 欧美日韩一区二区三区不卡| 久久久国产精华| 琪琪久久久久日韩精品| 欧美亚洲精品一区| 亚洲人成网站精品片在线观看| 国产中文字幕一区| 日韩三级av在线播放| 一区二区三区在线免费观看| 丁香婷婷综合激情五月色| 欧美一区二区日韩| 视频一区中文字幕国产| 欧美影院午夜播放| 久久久久久久精| 乱一区二区av| 日韩限制级电影在线观看| 亚洲午夜av在线| 色婷婷av一区二区三区gif| 亚洲国产成人一区二区三区| 国产一区二区三区高清播放| 日韩一区二区免费高清| 日韩制服丝袜av| 在线播放/欧美激情| 水蜜桃久久夜色精品一区的特点| 色综合咪咪久久| 亚洲狠狠丁香婷婷综合久久久| av午夜一区麻豆| 成人欧美一区二区三区小说| 成人免费视频一区二区| 国产精品久久影院| 99久久精品免费看国产 |