⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 valid.c

📁 一个功能非常全面的代理服务器源代码程序,
💻 C
字号:
/* * mswin_auth -  Version 2.0 *  * Modified to act as a Squid authenticator module. * Removed all Pike stuff. * Returns OK for a successful authentication, or ERR upon error. *  * Guido Serassio, Torino - Italy *  * Uses code from - * Antonino Iannella 2000 * Andrew Tridgell 1997 * Richard Sharpe 1996 * Bill Welliver 1999 *  * * 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. */#include "util.h"/* Check if we try to compile on a Windows Platform */#ifdef _SQUID_WIN32_#if defined(_SQUID_CYGWIN_)#include <wchar.h>#endif#include "valid.h"char Default_NTDomain[DNLEN + 1] = NTV_DEFAULT_DOMAIN;const char *errormsg;const char NTV_SERVER_ERROR_MSG[] = "Internal server errror";const char NTV_GROUP_ERROR_MSG[] = "User not allowed to use this cache";const char NTV_LOGON_ERROR_MSG[] = "No such user or wrong password";const char NTV_VALID_DOMAIN_SEPARATOR[] = "\\/";/* returns 1 on success, 0 on failure */intValid_Group(char *UserName, char *Group){    int result = FALSE;    WCHAR wszUserName[256];	/* Unicode user name */    WCHAR wszGroup[256];	/* 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;}/* Valid_User return codes - * 0 - User authenticated successfully. * 1 - Server error. * 2 - Group membership error. * 3 - Logon error; Incorrect password or username given. */intValid_User(char *UserName, char *Password, char *Group){    int result = NTV_SERVER_ERROR;    size_t i;    char NTDomain[256];    char *domain_qualify = NULL;    char DomainUser[256];    char User[256];    errormsg = NTV_SERVER_ERROR_MSG;    strncpy(NTDomain, UserName, sizeof(NTDomain));    for (i = 0; i < strlen(NTV_VALID_DOMAIN_SEPARATOR); i++) {	if ((domain_qualify = strchr(NTDomain, NTV_VALID_DOMAIN_SEPARATOR[i])) != NULL)	    break;    }    if (domain_qualify == NULL) {	strcpy(User, NTDomain);	strcpy(NTDomain, Default_NTDomain);    } else {	strcpy(User, domain_qualify + 1);	domain_qualify[0] = '\0';    }    /* Log the client on to the local computer. */    if (!SSP_LogonUser(User, Password, NTDomain)) {	result = NTV_LOGON_ERROR;	errormsg = NTV_LOGON_ERROR_MSG;	debug("%s\n", errormsg);    } else {	result = NTV_NO_ERROR;	if (strcmp(NTDomain, NTV_DEFAULT_DOMAIN) == 0)	    strcpy(DomainUser, User);	else {	    strcpy(DomainUser, NTDomain);	    strcat(DomainUser, "\\");	    strcat(DomainUser, User);	}	if (UseAllowedGroup) {	    if (!Valid_Group(DomainUser, NTAllowedGroup)) {		result = NTV_GROUP_ERROR;		errormsg = NTV_GROUP_ERROR_MSG;		debug("%s\n", errormsg);	    }	}	if (UseDisallowedGroup) {	    if (Valid_Group(DomainUser, NTDisAllowedGroup)) {		result = NTV_GROUP_ERROR;		errormsg = NTV_GROUP_ERROR_MSG;		debug("%s\n", errormsg);	    }	}    }    return result;}#else /* NON Windows Platform !!! */#error NON WINDOWS PLATFORM#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -