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

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

?? cap_text.c

?? ProFTPd 是一款基于GPL協議的可配置的FTP服務器
?? C
字號:
/* * $Id: cap_text.c,v 1.2 2003/05/15 00:49:13 castaglia Exp $ * * Copyright (c) 1997-8 Andrew G Morgan <morgan@linux.kernel.org> * Copyright (c) 1997 Andrew Main <zefram@dcs.warwick.ac.uk> * * See end of file for Log. * * This file deals with exchanging internal and textual * representations of capability sets. */#define LIBCAP_PLEASE_INCLUDE_ARRAY#include "libcap.h"#include <ctype.h>#include <stdio.h>/* Maximum output text length (16 per cap) */#define CAP_TEXT_SIZE    (16*__CAP_BITS)#define LIBCAP_EFF   01#define LIBCAP_INH   02#define LIBCAP_PER   04/* * Parse a textual representation of capabilities, returning an internal * representation. */#define setbits(A,B) _setbits((__cap_s *)A, (__cap_s *)B)static void _setbits(__cap_s *a, __cap_s *b){    int n;    for (n = __CAP_BLKS; n--; )	a->_blk[n] |= b->_blk[n];}#define clrbits(A,B) _clrbits((__cap_s *)A, (__cap_s *)B)static void _clrbits(__cap_s *a, __cap_s *b){    int n;    for (n = __CAP_BLKS; n--; )	a->_blk[n] &= ~b->_blk[n];}static char const *namcmp(char const *str, char const *nam){    while (*nam && tolower((unsigned char)*str) == *nam) {	str++;	nam++;    }    if (*nam || isalnum((unsigned char)*str) || *str == '_')	return NULL;    return str;}static int lookupname(char const **strp){    char const *str = *strp;    if (isdigit(*str)) {	unsigned long n = strtoul(str, (char **)&str, 0);	if (n >= __CAP_BITS)	    return -1;	*strp = str;	return n;    } else {	char const *s;	int n;	for (n = __CAP_BITS; n--; )	    if (_cap_names[n] && (s = namcmp(str, _cap_names[n]))) {		*strp = s;		return n;	    }	return -1;    }}cap_t cap_from_text(const char *str){    cap_t res;    __cap_s allones;    int n;    if (str == NULL) {	_cap_debug("bad argument");	errno = EINVAL;	return NULL;    }    if (!(res = cap_init()))	return NULL;    for (n = __CAP_BLKS; n--; )	allones._blk[n] = -1;    _cap_debug("%s", str);    for (;;) {	char op;	int flags = 0, listed=0;	__cap_s list = {{0}};	/* skip leading spaces */	while (isspace((unsigned char)*str))	    str++;	if (!*str) {	    _cap_debugcap("e = ", &res->set.effective);	    _cap_debugcap("i = ", &res->set.inheritable);	    _cap_debugcap("p = ", &res->set.permitted);	    return res;	}	/* identify caps specified by this clause */	if (isalnum((unsigned char)*str) || *str == '_') {	    for (;;) {		if (namcmp(str, "all")) {		    str += 3;		    list = allones;		} else {		    n = lookupname(&str);		    if (n == -1)			goto bad;		    list.raise_cap(n);		}		if (*str != ',')		    break;		if (!isalnum((unsigned char)*++str) && *str != '_')		    goto bad;	    }	    listed = 1;	} else if (*str == '+' || *str == '-')	    goto bad;                    /* require a list of capabilities */	else	    list = allones;	/* identify first operation on list of capabilities */	op = *str++;	if (op == '=' && (*str == '+' || *str == '-')) {	    if (!listed)		goto bad;	    op = (*str++ == '+' ? 'P':'M'); /* skip '=' and take next op */	} else if (op != '+' && op != '-' && op != '=')	    goto bad;	/* cycle through list of actions */	do {	    _cap_debug("next char = `%c'", *str);	    if (*str && !isspace(*str)) {		switch (*str++) {    /* Effective, Inheritable, Permitted */		case 'e':		    flags |= LIBCAP_EFF;		    break;		case 'i':		    flags |= LIBCAP_INH;		    break;		case 'p':		    flags |= LIBCAP_PER;		    break;		default:		    goto bad;		}	    } else if (op != '=') {		_cap_debug("only '=' can be followed by space");		goto bad;	    }	    _cap_debug("how to read?");	    switch (op) {               /* how do we interpret the caps? */	    case '=':	    case 'P':                                              /* =+ */	    case 'M':                                              /* =- */		clrbits(&res->set.effective,   &list);		clrbits(&res->set.inheritable, &list);		clrbits(&res->set.permitted,   &list);		/* fall through */		if (op == 'M')		    goto minus;	    case '+':		if (flags & LIBCAP_EFF)		    setbits(&res->set.effective,   &list);		if (flags & LIBCAP_INH)		    setbits(&res->set.inheritable, &list);		if (flags & LIBCAP_PER)		    setbits(&res->set.permitted,   &list);		break;	    case '-':	    minus:	        if (flags & LIBCAP_EFF)		    clrbits(&res->set.effective,   &list);		if (flags & LIBCAP_INH)		    clrbits(&res->set.inheritable, &list);		if (flags & LIBCAP_PER)		    clrbits(&res->set.permitted,   &list);		break;	    }	    /* new directive? */	    if (*str == '+' || *str == '-') {		if (!listed) {		    _cap_debug("for + & - must list capabilities");		    goto bad;		}		flags = 0;                       /* reset the flags */		op = *str++;		if (!isalpha(*str))		    goto bad;	    }	} while (*str && !isspace(*str));	_cap_debug("next clause");    }bad:    cap_free(&res);    errno = EINVAL;    return NULL;}/* * Convert an internal representation to a textual one. The textual * representation is stored in static memory. It will be overwritten * on the next occasion that this function is called. */static int getstateflags(cap_t caps, int capno){    int f = 0;    if (isset_cap((__cap_s *)(&caps->set.effective),capno))	f |= LIBCAP_EFF;    if (isset_cap((__cap_s *)(&caps->set.inheritable),capno))	f |= LIBCAP_INH;    if (isset_cap((__cap_s *)(&caps->set.permitted),capno))	f |= LIBCAP_PER;    return f;}#define CAP_TEXT_BUFFER_ZONE 100char *cap_to_text(cap_t caps, ssize_t *length_p){    static char buf[CAP_TEXT_SIZE+CAP_TEXT_BUFFER_ZONE];    char *p;    int histo[8] = {0};    int m, n, t;    /* Check arguments */    if (!good_cap_t(caps)) {	errno = EINVAL;	return NULL;    }    _cap_debugcap("e = ", &caps->set.effective);    _cap_debugcap("i = ", &caps->set.inheritable);    _cap_debugcap("p = ", &caps->set.permitted);    for (n = __CAP_BITS; n--; )	histo[getstateflags(caps, n)]++;    for (m=t=7; t--; )	if (histo[t] > histo[m])	    m = t;    /* blank is not a valid capability set */    p = sprintf(buf, "=%s%s%s",		(m & LIBCAP_EFF) ? "e" : "",		(m & LIBCAP_INH) ? "i" : "",		(m & LIBCAP_PER) ? "p" : "" ) + buf;    for (t = 8; t--; )	if (t != m && histo[t]) {	    *p++ = ' ';	    for (n = 0; n != __CAP_BITS; n++)		if (getstateflags(caps, n) == t) {		    if (_cap_names[n])			p += sprintf(p, "%s,", _cap_names[n]);		    else			p += sprintf(p, "%d,", n);		    if (p - buf > CAP_TEXT_SIZE) {			errno = ERANGE;			return NULL;		    }		}	    p--;	    n = t & ~m;	    if (n)		p += sprintf(p, "+%s%s%s",			     (n & LIBCAP_EFF) ? "e" : "",			     (n & LIBCAP_INH) ? "i" : "",			     (n & LIBCAP_PER) ? "p" : "");	    n = ~t & m;	    if (n)		p += sprintf(p, "-%s%s%s",			     (n & LIBCAP_EFF) ? "e" : "",			     (n & LIBCAP_INH) ? "i" : "",			     (n & LIBCAP_PER) ? "p" : "");	    if (p - buf > CAP_TEXT_SIZE) {		errno = ERANGE;		return NULL;	    }	}    _cap_debug("%s", buf);    if (length_p) {	*length_p = p - buf;    }    return (_libcap_strdup(buf));}/* * $Log: cap_text.c,v $ * Revision 1.2  2003/05/15 00:49:13  castaglia * * Bug#2000 - mod_cap should not use bundled libcap.  This patch updates the * bundled libcap; I won't be closing the bug report just yet. * * Revision 1.1  2003/01/03 02:16:17  jwm * * Turning mod_linuxprivs into a core module, mod_cap. This is by no means * complete. * * Revision 1.3  2000/07/11 13:36:52  macgyver * Minor updates and buffer cleanups. * * Revision 1.2  1999/09/07 23:14:19  macgyver * Updated capabilities library and model. * * Revision 1.2  1999/04/17 23:25:09  morgan * fixes from peeterj * * Revision 1.1.1.1  1999/04/17 22:16:31  morgan * release 1.0 of libcap * * Revision 1.4  1998/05/24 22:54:09  morgan * updated for 2.1.104 * * Revision 1.3  1997/05/04 05:37:00  morgan * case sensitvity to capability flags * * Revision 1.2  1997/04/28 00:57:11  morgan * zefram's replacement file with a number of bug fixes from AGM * * Revision 1.1  1997/04/21 04:32:52  morgan * Initial revision * */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产日韩av| 青草av.久久免费一区| 精品人在线二区三区| 久久麻豆一区二区| 亚洲日本青草视频在线怡红院| 亚洲精品乱码久久久久久黑人| 亚洲免费观看在线视频| 日本欧美肥老太交大片| 捆绑变态av一区二区三区| 国产成人在线视频网址| 色综合天天综合给合国产| 欧美日韩国产一级| 久久久国际精品| 亚洲精品少妇30p| 久久99国产精品久久| 99久久99久久精品免费观看 | 91网上在线视频| 在线观看日韩电影| 久久综合精品国产一区二区三区| 中文字幕一区二区三区不卡| 偷窥国产亚洲免费视频| 国产成人av一区二区三区在线观看| 色婷婷精品久久二区二区蜜臀av| 欧美电影精品一区二区| 亚洲欧美日韩国产手机在线| 另类专区欧美蜜桃臀第一页| 91蜜桃免费观看视频| 日韩欧美一二三四区| 亚洲女同一区二区| 日本成人中文字幕在线视频| 色哟哟一区二区三区| 精品久久久久99| 亚洲精品乱码久久久久久日本蜜臀| 九九热在线视频观看这里只有精品 | 亚洲人成精品久久久久久 | 亚洲欧洲99久久| 日本va欧美va精品发布| 91色porny| 国产日韩欧美一区二区三区综合 | 日韩一区二区免费在线观看| 久久久电影一区二区三区| 日韩在线观看一区二区| 91黄色激情网站| 中文字幕欧美区| 久久精品理论片| 欧美精品日韩一本| 一区二区三区蜜桃网| 播五月开心婷婷综合| 在线91免费看| 午夜激情久久久| 色婷婷精品久久二区二区蜜臀av| 国产欧美一区二区精品久导航| 蜜臀av性久久久久av蜜臀妖精| 在线国产电影不卡| 久久美女高清视频| 老司机精品视频线观看86| 91精品在线免费| 丝袜美腿一区二区三区| 欧美少妇xxx| 亚洲成av人片在线观看无码| 91福利在线导航| 亚洲一区视频在线观看视频| 国产高清久久久久| 欧美一级淫片007| 免费国产亚洲视频| 精品国产乱码久久久久久免费| 蜜桃视频第一区免费观看| 日韩亚洲欧美中文三级| 精品一区二区三区的国产在线播放| 51久久夜色精品国产麻豆| 免费观看30秒视频久久| 久久久久久97三级| 波多野结衣中文字幕一区| 一区二区三区在线影院| 欧美视频一区二区在线观看| 亚洲成av人片一区二区三区| 欧美福利视频导航| 经典三级在线一区| 亚洲男同性视频| 在线视频国产一区| 香蕉加勒比综合久久| 在线不卡免费欧美| 国产一区二区免费视频| 国产精品你懂的在线欣赏| 99国产精品久久久久久久久久| 亚洲色图.com| 欧美疯狂性受xxxxx喷水图片| 精东粉嫩av免费一区二区三区| 精品1区2区在线观看| 不卡一区在线观看| 性欧美疯狂xxxxbbbb| 欧美精品一区二区三区蜜桃视频| 成人精品一区二区三区中文字幕| 一区二区三区日韩精品视频| 日韩欧美国产一区二区三区| 欧美亚洲高清一区| 91在线观看地址| 高清免费成人av| 激情综合色综合久久| 日韩电影网1区2区| 午夜电影一区二区| 亚洲国产综合91精品麻豆| 1024亚洲合集| 中文字幕精品—区二区四季| 久久色.com| 日韩精品一区二区三区蜜臀| 欧美欧美欧美欧美首页| 欧美日韩一级片在线观看| 在线免费视频一区二区| 91久久免费观看| 91高清视频在线| 91国产成人在线| 欧美性色综合网| 欧美视频自拍偷拍| 欧美精品日韩精品| 欧美一区二区三区视频免费播放| 69堂精品视频| 欧美一区二区三区电影| 欧美精品自拍偷拍动漫精品| 欧美日韩一区二区三区四区五区| 欧美中文字幕亚洲一区二区va在线| 日本道在线观看一区二区| 欧美视频自拍偷拍| 69堂成人精品免费视频| 欧美一级专区免费大片| 久久综合一区二区| 久久精品夜夜夜夜久久| 国产精品女主播在线观看| 中文字幕字幕中文在线中不卡视频| 中文字幕一区二区不卡| 亚洲蜜臀av乱码久久精品蜜桃| 一区二区在线观看视频| 亚洲国产日韩综合久久精品| 日韩av二区在线播放| 狠狠色综合色综合网络| 国产成人综合自拍| 色综合久久综合中文综合网| 在线区一区二视频| 日韩午夜在线影院| 国产欧美一二三区| 一区二区三区欧美日| 蜜臀久久99精品久久久画质超高清| 麻豆精品在线播放| 不卡的av在线| 91精品国产综合久久久蜜臀图片| 欧美大肚乱孕交hd孕妇| 国产精品久久久久一区| 亚洲国产日韩精品| 国产在线播放一区二区三区| 99精品国产一区二区三区不卡| 欧美日韩一级二级| 久久亚洲综合色| 最新国产精品久久精品| 视频在线观看国产精品| 国产宾馆实践打屁股91| 在线亚洲一区二区| 国产欧美一区二区精品久导航| 亚洲综合丁香婷婷六月香| 久久99精品久久久久久动态图 | 日韩激情一区二区| 国产成人鲁色资源国产91色综| 色菇凉天天综合网| 久久久久久夜精品精品免费| 亚洲自拍另类综合| 国产成人在线观看| 欧美日本在线看| 国产精品成人免费精品自在线观看| 午夜久久电影网| 成人av在线播放网站| 日韩免费成人网| 亚洲一区日韩精品中文字幕| 国产精品77777竹菊影视小说| 欧美性高清videossexo| 国产日韩v精品一区二区| 视频一区免费在线观看| 99精品久久99久久久久| 国产视频不卡一区| 久久91精品国产91久久小草| 欧美裸体一区二区三区| 亚洲欧洲av一区二区三区久久| 国产一区二区视频在线播放| 欧美视频完全免费看| 中文字幕在线一区免费| 国产综合久久久久久鬼色| 欧美久久一二区| 亚洲最新视频在线观看| 9l国产精品久久久久麻豆| 亚洲精品一线二线三线| 日本不卡一二三| 欧美欧美欧美欧美| 亚洲午夜羞羞片| 91蜜桃视频在线| 国产精品久久久久久妇女6080| 国产自产2019最新不卡| 日韩免费性生活视频播放| 婷婷激情综合网| 欧美午夜片在线观看| 亚洲成人自拍偷拍| 欧美日韩精品综合在线| 亚洲成av人片在线|