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

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

?? um.c

?? 在嵌入式移動設備上實現動態網頁
?? C
?? 第 1 頁 / 共 3 頁
字號:
	a_assert(group && *group);
	row = dbSearchStr(didUM, UM_GROUP_TABLENAME, UM_NAME, group, 0);

	if (row >= 0) {
		return dbWriteInt(didUM, UM_GROUP_TABLENAME, UM_DISABLE, row, 
			(int) !enabled);
	} else {
		return UM_ERR_NOT_FOUND;
	}
}

/******************************************************************************/
/*
 *	Returns the protected setting for a given group
 *  Returns FALSE if user is not found
 */

bool_t umGetGroupProtected(char_t *group)
{
	int protect, row;

	a_assert(group && *group);

	protect = 0;
	row = dbSearchStr(didUM, UM_GROUP_TABLENAME, UM_NAME, group, 0);
	if (row >= 0) {
		dbReadInt(didUM, UM_GROUP_TABLENAME, UM_PROT, row, &protect);
	}

	return (bool_t) protect;
}

/******************************************************************************/
/*
 *	Sets the protected setting for a given group
 */

int	umSetGroupProtected(char_t *group, bool_t protect)
{
	int row;

	a_assert(group && *group);
	row = dbSearchStr(didUM, UM_GROUP_TABLENAME, UM_NAME, group, 0);

	if (row >= 0) {
		return dbWriteInt(didUM, UM_GROUP_TABLENAME, UM_PROT, row, 
			(int) protect);
	} else {
		return UM_ERR_NOT_FOUND;
	}
}


/******************************************************************************/
/*
 *	umAddAccessLimit() adds an access limit to the "access" table
 */

int	umAddAccessLimit(char_t *url, accessMeth_t am, short secure, char_t *group)
{
	int row;

	a_assert(url && *url);
	trace(3, T("UM: Adding Access Limit for <%s>\n"), url);

/*
 *	Do not allow duplicates
 */
	if (umAccessLimitExists(url)) {
		return UM_ERR_DUPLICATE;
	}

/*
 *	Add a new row to the table
 */
	if ((row = dbAddRow(didUM, UM_ACCESS_TABLENAME)) < 0) {
		return UM_ERR_GENERAL;
	}

/*
 *	Write the key field
 */
	if(dbWriteStr(didUM, UM_ACCESS_TABLENAME, UM_NAME, row, url) < 0) {
		return UM_ERR_GENERAL;
	}

/*
 *	Write the remaining fields
 */
	dbWriteInt(didUM, UM_ACCESS_TABLENAME, UM_METHOD, row, (int)am);
	dbWriteInt(didUM, UM_ACCESS_TABLENAME, UM_SECURE, row, (int)secure);
	dbWriteStr(didUM, UM_ACCESS_TABLENAME, UM_GROUP, row, group);

	return 0;
}

/******************************************************************************/
/*
 *	umDeleteAccessLimit()
 */

int	umDeleteAccessLimit(char_t *url)
{
	int row;

	a_assert(url && *url);
	trace(3, T("UM: Deleting Access Limit for <%s>\n"), url);
/*
 *	Find the row of the access limit to delete
 */
	if ((row = dbSearchStr(didUM, UM_ACCESS_TABLENAME, UM_NAME, url, 0)) < 0) {
		return UM_ERR_NOT_FOUND;
	}

	return dbDeleteRow(didUM, UM_ACCESS_TABLENAME, row);
}

/******************************************************************************/
/*
 *	umGetFirstGroup() - return a pointer to the first non-blank access limit
 */

char_t *umGetFirstAccessLimit()
{
	return umGetFirstRowData(UM_ACCESS_TABLENAME, UM_NAME);
}

/******************************************************************************/
/*
 *	umGetNextAccessLimit() -	return a pointer to the first non-blank 
 *								access limit following the given one
 */

char_t *umGetNextAccessLimit(char_t *urlLast)
{
	return umGetNextRowData(UM_ACCESS_TABLENAME, UM_NAME, urlLast);
}

/******************************************************************************/
/*
 *	umAccessLimitExists() returns TRUE if this access limit exists
 */

bool_t	umAccessLimitExists(char_t *url)
{
	a_assert(url && *url);

	if (dbSearchStr(didUM, UM_ACCESS_TABLENAME, UM_NAME, url, 0) < 0) {
		return FALSE;
	} else {
		return TRUE;
	}
}

/******************************************************************************/
/*
 *	umGetAccessLimit() returns the Access Method for the URL
 */

accessMeth_t umGetAccessLimitMethod(char_t *url)
{
	int am, row;

	am = (int) AM_INVALID;
	row = dbSearchStr(didUM, UM_ACCESS_TABLENAME, UM_NAME, url, 0);

	if (row >= 0) {
		dbReadInt(didUM, UM_ACCESS_TABLENAME, UM_METHOD, row, &am);
	} 

	return (accessMeth_t) am;
}

/******************************************************************************/
/*
 *	umSetAccessLimitMethod() - set Access Method for Access Limit
 */

int	umSetAccessLimitMethod(char_t *url, accessMeth_t am)
{
	int row;

	a_assert(url && *url);
	row = dbSearchStr(didUM, UM_ACCESS_TABLENAME, UM_NAME, url, 0);

	if (row >= 0) {
		return dbWriteInt(didUM, UM_ACCESS_TABLENAME, UM_METHOD, row, (int) am);
	} else {
		return UM_ERR_NOT_FOUND;
	}
}

/******************************************************************************/
/*
 *	umGetAccessLimitSecure() - returns secure switch for access limit
 */

short umGetAccessLimitSecure(char_t *url)
{
	int secure, row;

	a_assert(url && *url);
	secure = -1;
	row = dbSearchStr(didUM, UM_ACCESS_TABLENAME, UM_NAME, url, 0);

	if (row >= 0) {
		dbReadInt(didUM, UM_ACCESS_TABLENAME, UM_SECURE, row, &secure);
	}

	return (short)secure;
}

/******************************************************************************/
/*
 *	umSetAccessLimitSecure() - sets the secure flag for the URL
 */

int	umSetAccessLimitSecure(char_t *url, short secure)
{
	int row;

	a_assert(url && *url);
	row = dbSearchStr(didUM, UM_ACCESS_TABLENAME, UM_NAME, url, 0);

	if (row >= 0) {
		return dbWriteInt(didUM, UM_ACCESS_TABLENAME, UM_SECURE, row, 
			(int)secure);
	} else {
		return UM_ERR_NOT_FOUND;
	}
}

/******************************************************************************/
/*
 *	umGetAccessLimitGroup() - returns the user group of the access limit
 */

char_t *umGetAccessLimitGroup(char_t *url)
{
	char_t	*group;
	int		row;

	a_assert(url && *url);
	group = NULL;
	row = dbSearchStr(didUM, UM_ACCESS_TABLENAME, UM_NAME, url, 0);

	if (row >= 0) {
		dbReadStr(didUM, UM_ACCESS_TABLENAME, UM_GROUP, row, &group);
	}

	return group;
}

/******************************************************************************/
/*
 *	umSetAccessLimitGroup() - sets the user group for the access limit.
 */

int	umSetAccessLimitGroup(char_t *url, char_t *group)
{
	int row;

	a_assert(url && *url);
	row = dbSearchStr(didUM, UM_ACCESS_TABLENAME, UM_NAME, url, 0);

	if (row >= 0) {
		return dbWriteStr(didUM, UM_ACCESS_TABLENAME, UM_GROUP, row, group);
	} else {
		return UM_ERR_NOT_FOUND;
	}
}

/******************************************************************************/
/*
 *	Returns the access limit to use for a given URL, by checking for URLs up
 *	the directory tree.  Creates a new string that must be deleted.
 */

char_t *umGetAccessLimit(char_t *url)
{
	char_t	*urlRet, *urlCheck, *lastChar;
	int		len;
	
	a_assert(url && *url);
	urlRet = NULL;
	urlCheck = bstrdup(B_L, url);
	a_assert(urlCheck);
	len = gstrlen(urlCheck);
/*
 *	Scan back through URL to see if there is a "parent" access limit
 */
	while (len && !urlRet) {
		if (umAccessLimitExists(urlCheck)) {
			urlRet = bstrdup(B_L, urlCheck);
		} else {
/*
 *	Trim the end portion of the URL to the previous directory marker
 */
			lastChar = urlCheck + len;
			lastChar--;

			while ((lastChar >= urlCheck) && ((*lastChar == '/') || 
				(*lastChar == '\\'))) {
				*lastChar = 0;
				lastChar--;
			}

			while ((lastChar >= urlCheck) && (*lastChar != '/') && 
				(*lastChar != '\\')) {
				*lastChar = 0;
				lastChar--;
			}

			len = gstrlen(urlCheck);
		}
	}
	bfree (B_L, urlCheck);

	return urlRet;
}

/******************************************************************************/
/*
 *	Returns the access method to use for a given URL
 */

accessMeth_t umGetAccessMethodForURL(char_t *url)
{
	accessMeth_t	amRet;
	char_t			*urlHavingLimit, *group;
	
	urlHavingLimit = umGetAccessLimit(url);
	if (urlHavingLimit) {
		group = umGetAccessLimitGroup(urlHavingLimit);

		if (group && *group) {
			amRet = umGetGroupAccessMethod(group);
		} else {
			amRet = umGetAccessLimitMethod(urlHavingLimit);
		}

		bfree(B_L, urlHavingLimit);
	} else {
		amRet = AM_FULL;
	}

	return amRet;
}

/******************************************************************************/
/*
 *	Returns TRUE if user can access URL
 */

bool_t umUserCanAccessURL(char_t *user, char_t *url)
{
	accessMeth_t	amURL;
	char_t			*group, *usergroup, *urlHavingLimit;
	short			priv;
	
	a_assert(user && *user);
	a_assert(url && *url);

/*
 *	Make sure user exists
 */
	if (!umUserExists(user)) {
		return FALSE;
	}

/*
 *	Make sure user is enabled
 */
	if (!umGetUserEnabled(user)) {
		return FALSE;
	}

/*
 *	Make sure user has sufficient privileges (any will do)
 */
	usergroup = umGetUserGroup(user);
	priv = umGetGroupPrivilege(usergroup);
	if (priv == 0) {
		return FALSE;
	}

/*
 *	Make sure user's group is enabled
 */
	if (!umGetGroupEnabled(usergroup)) {
		return FALSE;
	}

/*
 *	The access method of the user group must not be AM_NONE
 */
	if (umGetGroupAccessMethod(usergroup) == AM_NONE) {
		return FALSE;
	}

/*
 *	Check to see if there is an Access Limit for this URL
 */
	urlHavingLimit = umGetAccessLimit(url);
	if (urlHavingLimit) {
		amURL = umGetAccessLimitMethod(urlHavingLimit);
		group = umGetAccessLimitGroup(urlHavingLimit);
		bfree(B_L, urlHavingLimit);
	} else {
/*
 *		If there isn't an access limit for the URL, user has full access
 */
		return TRUE;
	}

/*
 *	If the access method for the URL is AM_NONE then 
 *	the file "doesn't exist".
 */
	if (amURL == AM_NONE) {
		return FALSE;
	} 
	
/*
 *	If Access Limit has a group specified, then the user must be a 
 *	member of that group
 */
	if (group && *group) {
#ifdef qHierarchicalAccess
      /*
       * If we are compiling with the hierarchical access extensions, we
       * instead call the user-provided function that checks to see whether
       * the current user's access level is greater than or equal to the
       * access level required for this URL.
       */
      return dmfCanAccess(usergroup, group);

#else
		if (usergroup && (gstrcmp(group, usergroup) != 0)) {
			return FALSE;

		}
#endif
	} 

/*
 *	Otherwise, user can access the URL 
 */
	return TRUE;

}

/******************************************************************************/
/*
 *	Returns TRUE if given name has only valid chars
 */

static bool_t umCheckName(char_t *name)
{
	a_assert(name && *name);

	if (name && *name) {
		while (*name) {
			if (gisspace(*name)) {
				return FALSE;
			}

			name++;
		}

		return TRUE;
	}

	return FALSE;
}

/******************************************************************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本女人一区二区三区| 欧美日韩专区在线| 91黄色免费版| 欧美国产精品中文字幕| 美女网站在线免费欧美精品| 色婷婷激情一区二区三区| 欧美大胆人体bbbb| 亚洲一区二区在线免费观看视频| 粉嫩绯色av一区二区在线观看| 欧美一区二区三区免费观看视频| 一区二区三区四区乱视频| 风间由美一区二区av101| 亚洲精品在线观| 麻豆一区二区99久久久久| 色激情天天射综合网| 中文字幕亚洲精品在线观看| 国产传媒日韩欧美成人| 久久一区二区视频| 精一区二区三区| 日韩欧美色综合网站| 五月天丁香久久| 欧美日韩亚洲国产综合| 亚洲一二三四区| 在线观看三级视频欧美| 一区二区三区四区视频精品免费| 91在线码无精品| 综合激情网...| 色综合色综合色综合色综合色综合| 国产精品无码永久免费888| 国产麻豆日韩欧美久久| 久久夜色精品国产欧美乱极品| 久久99久久久欧美国产| 日韩一区二区三区电影在线观看| 秋霞午夜鲁丝一区二区老狼| 日韩午夜激情av| 国内精品写真在线观看| 国产欧美精品在线观看| 成人黄色网址在线观看| 国产精品欧美一区喷水| 91亚洲精品久久久蜜桃网站| 亚洲欧美日韩国产手机在线| 欧洲视频一区二区| 天天色天天操综合| 欧美一激情一区二区三区| 久久电影网站中文字幕| 中文字幕av一区二区三区| 波多野结衣中文一区| 亚洲免费观看在线视频| 欧美精品一二三| 精品在线一区二区三区| 国产亚洲婷婷免费| 一本大道久久精品懂色aⅴ| 亚洲国产精品一区二区久久恐怖片 | 中日韩av电影| 色婷婷一区二区三区四区| 麻豆精品一区二区三区| 久久久久9999亚洲精品| 色偷偷88欧美精品久久久| 日韩不卡一区二区三区| www国产亚洲精品久久麻豆| 91在线视频观看| 日本午夜精品一区二区三区电影| 一本色道a无线码一区v| 蜜桃视频一区二区| 国产精品久久毛片av大全日韩| 欧美日韩免费高清一区色橹橹| 久久99最新地址| 亚洲夂夂婷婷色拍ww47| 久久日一线二线三线suv| 色综合天天综合给合国产| 日本欧美一区二区三区乱码| 国产精品人人做人人爽人人添| 欧美日韩在线播放三区四区| 国产精品影视在线| 亚洲成人av一区二区三区| 久久精品视频网| 91精品国产一区二区人妖| 北岛玲一区二区三区四区| 石原莉奈在线亚洲二区| 国产精品电影院| 国产精品成人免费精品自在线观看 | 亚洲精品一区二区三区影院| 91香蕉视频黄| 国内外成人在线视频| 亚洲一卡二卡三卡四卡无卡久久 | 国产一区二区三区四区五区入口 | 午夜私人影院久久久久| 中文字幕一区二区日韩精品绯色| 精品国产麻豆免费人成网站| 欧美日韩精品欧美日韩精品一 | 亚洲另类一区二区| 久久久精品蜜桃| 日韩欧美国产三级电影视频| 在线免费av一区| 91麻豆成人久久精品二区三区| 激情图片小说一区| 日本不卡高清视频| 亚洲一区二区综合| 一区二区三区精品在线观看| 国产精品久久久久永久免费观看| 精品国产一区a| 欧美一级xxx| 欧美精品九九99久久| 色哦色哦哦色天天综合| 91麻豆产精品久久久久久 | 欧美日韩在线播放三区四区| 91丨porny丨在线| 99精品在线免费| av一本久道久久综合久久鬼色| 狠狠色丁香婷婷综合久久片| 久久69国产一区二区蜜臀| 日本美女视频一区二区| 视频一区二区三区中文字幕| 午夜精品成人在线视频| 午夜欧美一区二区三区在线播放| 亚洲一区二区精品视频| 天天操天天色综合| 日韩国产精品久久久| 婷婷综合在线观看| 麻豆极品一区二区三区| 精品一区二区三区欧美| 国产在线精品免费av| 国产99久久久国产精品潘金| 北条麻妃一区二区三区| 91久久精品国产91性色tv| 欧美视频中文字幕| 欧美伦理电影网| 精品欧美一区二区在线观看| 久久久www免费人成精品| 国产精品免费人成网站| 亚洲免费在线观看视频| 亚洲成人在线观看视频| 日韩**一区毛片| 国产一区二区导航在线播放| 成年人午夜久久久| 在线观看网站黄不卡| 欧美xxxxxxxx| 国产精品传媒入口麻豆| 亚洲网友自拍偷拍| 精品综合久久久久久8888| 成人福利视频网站| 欧美日韩精品福利| 久久久影视传媒| 洋洋成人永久网站入口| 精品一区二区免费在线观看| 成人听书哪个软件好| 欧美三级资源在线| 精品少妇一区二区| 亚洲视频一区在线| 麻豆国产精品官网| 99久久精品国产一区| 日韩欧美在线一区二区三区| 国产精品三级在线观看| 视频一区二区中文字幕| www.亚洲色图.com| 欧美大尺度电影在线| 亚洲蜜臀av乱码久久精品| 久久99深爱久久99精品| 欧美性欧美巨大黑白大战| 精品处破学生在线二十三| 亚洲一区视频在线观看视频| 国产91精品一区二区麻豆网站| 欧美日韩中文字幕一区| 国产精品传媒视频| 精品一区二区免费在线观看| 欧美日韩一区二区在线视频| 国产欧美一区二区精品性色超碰 | 国产激情视频一区二区在线观看 | 欧美国产欧美亚州国产日韩mv天天看完整 | 日韩成人免费电影| www.av亚洲| 国产天堂亚洲国产碰碰| 蜜桃视频在线一区| 欧美日韩精品一区视频| 中文字幕日韩一区二区| 国产一区二区毛片| 日韩欧美专区在线| 亚洲一区二区三区视频在线播放 | 国产成人8x视频一区二区| 91精品国产综合久久久久| 一区二区三区日韩精品| eeuss鲁片一区二区三区| 久久亚洲综合av| 精品写真视频在线观看| 日韩欧美专区在线| 蜜桃精品在线观看| 337p亚洲精品色噜噜| 亚洲福利视频一区| 欧美中文字幕一区| 亚洲一区二区三区在线播放| 91视频xxxx| 一区二区三区蜜桃| 91福利小视频| 一区二区在线观看视频在线观看| 99re这里只有精品首页| 亚洲视频中文字幕| 91麻豆精品秘密| 亚洲尤物在线视频观看| 欧洲人成人精品| 视频一区视频二区中文字幕|