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

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

?? hylafaxserver.c++

?? fax相關的東西
?? C++
?? 第 1 頁 / 共 2 頁
字號:
/*	$Id: HylaFAXServer.c++,v 1.21 2006/06/12 18:28:54 aidan Exp $ *//* * Copyright (c) 1995-1996 Sam Leffler * Copyright (c) 1995-1996 Silicon Graphics, Inc. * HylaFAX is a trademark of Silicon Graphics * * Permission to use, copy, modify, distribute, and sell this software and  * its documentation for any purpose is hereby granted without fee, provided * that (i) the above copyright notices and this permission notice appear in * all copies of the software and related documentation, and (ii) the names of * Sam Leffler and Silicon Graphics may not be used in any advertising or * publicity relating to the software without the specific, prior written * permission of Sam Leffler and Silicon Graphics. *  * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,  * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY  * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.   *  * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF  * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE  * OF THIS SOFTWARE. */#include "port.h"#include "Sys.h"#include "config.h"#include "tiffio.h"#include "HylaFAXServer.h"#include "Dispatcher.h"#include "StackBuffer.h"#include "Sequence.h"#include <ctype.h>#include <sys/file.h>#include <pwd.h>#include <limits.h>#include <grp.h>#include <unistd.h>#include <stdlib.h>const char* HylaFAXServer::version = HYLAFAX_VERSION;/* * NB: The remainder of the instance state is * initialized in initServer which is expected to * be called before any other operation is done * (through open).  This is required because some * initialization work is done by virtual methods * that cannot be invoked from the constructor. */HylaFAXServer::HylaFAXServer()    : defJob(""){    state = 0;    xferfaxlog = -1;    loginAttempts = 0;		// NB: not reset by REIN command    adminAttempts = 0;		// NB: not reset by REIN command    idcache = NULL;#ifdef HAVE_PAM	pamh = NULL;	pam_chrooted = false;#endif    data = -1;			// current data connection (socket)    pdata = -1;			// passive mode data connect (socket)    faxqFd = -1;    clientFd = -1;    char buff[64];    (void) gethostname(buff, sizeof(buff));    hostname = buff;    hostaddr = "unknown";	// derived classes should fill-in    lastModTime = 0;		// shutdown file mod time    discTime = 0;		// shutdown forced disconnect time    denyTime = 0;		// shutdown service denial time    /*     * Calculate the time differential between the local timezone     * and GMT for adjusting client-specified time values that are     * given in GMT.     *     * We want the actual offset of the local now from UTC,      * This means we have to "force" daylight savings off, otherwise     * the offset we get back is of the real timezone (the time     * functions automatically compensate if DST is set).     *     * Because we take the actual offset instead of a real timezone,     * we force the TZ a format CUT<offset> instead of an actual     * timezone like EST<offset>EDT, or PST<offset>PDT.  This means     * we no longer have to rely on the system being able to do the     * DST offset.     */    time_t now = Sys::now();    struct tm gmt = *gmtime(&now);    struct tm tm = *localtime(&now);    tm.tm_isdst = 0;    gmtoff = mktime(&gmt) - mktime(&tm);#if HAS_TM_ZONE    /*     * BSD/OS doesn't support the global timezone     * information so setup substitutes here.     */    tzname[0] = tm.tm_zone;    tzname[1] = NULL;#endif    /*     * Some versions of  glibc (like RHEL4) will revert to UTC in     * the chroot if it can't find the zoneinfo file and no TZ is     * set in the environment.     * We'll set the TZ to our crafted TZ to make sure that we     * have the right offset even if no timezone DST info is     * available in the chroot.     */    fxStr tz = fxStr::format("CUT%d:%02d",    		(gmtoff / 3600), ((gmtoff / 60) % 60));    setenv("TZ", tz, 0);    cachedTIFF = NULL;}HylaFAXServer::~HylaFAXServer(){    dologout(0);}/* * Initialize the state of the server.  Note that this * is used to implement the REIN command and for that * it doesn't work entirely because state set from the * configuration files is not accessible after a login * because the sever does a chroot to the top of the * spooling area.  The only way to make this work is * to keep all the configuration files in the spooling * area which is not folks want when things are shared * through NFS (i.e. server binaries and config files * are NFS-mounted by the spooling area is private). */voidHylaFAXServer::initServer(void){    end_login();		// reset user-related state    /*     * Default state:     *   o send long replies     *   o use GMT for time values     *   o auto-detect whether filesystem has BSD or SysV     *     semantics for setting the GID on created files     */    state = S_LREPLIES|S_USEGMT|S_CHECKGID;    restart_point = 0;		// data-transfer-related state    mode = MODE_S;    form = FORM_PS;    type = TYPE_A;    stru = STRU_F;    initDefaultJob();		// reset default job state    curJob = &defJob;    if (data != -1)		// data transfer-related state	Sys::close(data), data = -1;    if (pdata != -1)	Sys::close(pdata), pdata = -1;    if (trigSpec != "") {	fxStr emsg;	cancelTrigger(emsg);    }    // XXX FIFO state    pushedToken = T_NIL;    recvCC = 0;			// no data present in buffer    recvNext = 0;    consecutiveBadCmds = 0;    resetConfig();    readConfig(FAX_SYSCONF);    readConfig(FAX_LIBDATA "/hfaxd.conf");}static voidtiffErrorHandler(const char* module, const char* fmt0, va_list ap){    fxStr fmt = (module != 0) ?        fxStr::format("%s: Warning, %s.", module, fmt0)        : fxStr::format("Warning, %s.", fmt0);    vlogError(fmt, ap);}static voidtiffWarningHandler(const char* module, const char* fmt0, va_list ap){    fxStr fmt = (module != 0) ?        fxStr::format("%s: Warning, %s.", module, fmt0)        : fxStr::format("Warning, %s.", fmt0);    vlogWarning(fmt, ap);}voidHylaFAXServer::open(void){    initServer();		// complete state initialization    fxStr emsg;    if (!initClientFIFO(emsg)) {        logInfo("connection refused (%s) from %s [%s]",	    (const char*) emsg,	    (const char*) remotehost, (const char*) remoteaddr);	reply(420, "%s server cannot initialize: %s",	    (const char*) hostname, (const char*) emsg);	dologout(-1);    }    ctrlFlags = fcntl(STDIN_FILENO, F_GETFL);	// for parser    if (isShutdown(true))	reply(220, "%s HylaFAX server shut down; available only for admin use.",	    (const char*) hostname);    else	reply(220, "%s server (%s) ready.", (const char*) hostname, version);    if (TRACE(TIFF)) {	TIFFSetErrorHandler(tiffErrorHandler);	TIFFSetWarningHandler(tiffWarningHandler);    } else {	TIFFSetErrorHandler(NULL);	TIFFSetWarningHandler(NULL);    }}voidHylaFAXServer::close(){    dologout(-1);}voidHylaFAXServer::setupPermissions(void){    uid_t euid = geteuid();    struct passwd* pwd = getpwnam(FAX_USER);    if (!pwd)	logError("No fax user \"%s\" defined on your system!\n"	    "This software is not installed properly!", FAX_USER);    else if (euid == 0) {	if (initgroups(pwd->pw_name, pwd->pw_gid) != 0)	    logError("Can not setup permissions (supplementary groups): %m");	if (setegid(pwd->pw_gid) < 0)	    logError("Can not setup permissions (gid): %m");	else if (seteuid(pwd->pw_uid) < 0)	    logError("Can not setup permissions (uid): %m");	else {	    faxuid = pwd->pw_gid;	    endpwent();	    return;	}    } else {	faxuid = pwd->pw_gid;	uid_t faxuid = pwd->pw_uid;	setpwent();	pwd = getpwuid(euid);	if (!pwd)	    logError("Can not figure out the identity of uid %u", euid);	else if (pwd->pw_uid != faxuid)	    logError("Configuration error; "		"the fax server must run as the fax user \"%s\".", FAX_USER);	else {	    endpwent();	    return;	}    }    exit(-1);}/* * Close all open descriptors and unlink any * Dispatcher i/o handlers. */voidHylaFAXServer::closeAllBut(int fd){    Dispatcher& disp = Dispatcher::instance();    for (int f = Sys::getOpenMax()-1; f >= 0; f--)	if (f != fd) {	    IOHandler* h = disp.handler(f, Dispatcher::ReadMask);	    if (h)		disp.unlink(f);	    Sys::close(f);	}}/* * Unlink all dispatcher i/o handlers and close * their file descriptor. */voidHylaFAXServer::closeAllDispatched(){    Dispatcher& disp = Dispatcher::instance();    for (int f = Sys::getOpenMax()-1; f >= 0; f--)    {	IOHandler* h = disp.handler(f, Dispatcher::ReadMask);	if (h)	{	    disp.unlink(f);	    Sys::close(f);	}    }}const char*HylaFAXServer::fixPathname(const char* file){    return (!IS(LOGGEDIN) && file[0] == '/' ? file+1 : file);}boolHylaFAXServer::readShutdownFile(void){    bool ok = false;    FILE* fd = fopen(fixPathname(shutdownFile), "r");    if (fd != NULL) {	struct tm tm;	int deny, disc;	memset(&tm, 0, sizeof (tm));	int n = fscanf(fd, "%d %d %d %d %d %d %d\n",	    &tm.tm_year, &tm.tm_mon, &tm.tm_mday, &tm.tm_hour, &tm.tm_min,	    &deny, &disc);	if (n == 7) {	    tm.tm_year -= 1900;	    tm.tm_isdst = -1;	    time_t shut = mktime(&tm);	    if (shut != (time_t) -1) {		denyTime = shut - 3600 * (deny / 100) + 60 * (deny % 100);		discTime = shut - 3600 * (disc / 100) + 60 * (disc % 100);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产不卡高清在线观看视频| 日韩一区二区影院| 亚洲免费观看高清完整版在线 | 成人高清视频在线| 欧美日韩美女一区二区| 国产性做久久久久久| 亚洲高清在线精品| 成人国产精品免费观看视频| 欧美一区二区在线免费观看| 亚洲三级视频在线观看| 国产成人精品亚洲日本在线桃色 | 成人高清视频在线| 精品国产伦一区二区三区观看体验| 综合在线观看色| 国产成人h网站| 久久久不卡网国产精品二区| 日韩激情一区二区| 欧美视频精品在线观看| 亚洲三级免费观看| 色综合天天综合| 中文字幕一区视频| 国产精品一级黄| 久久九九全国免费| 国产伦精一区二区三区| 精品国产一区二区三区忘忧草 | 香蕉乱码成人久久天堂爱免费| av一区二区久久| 国产精品久久免费看| 国产成人精品网址| 国产蜜臀97一区二区三区| 国产一区二区三区久久悠悠色av | 国产美女一区二区三区| 日韩精品专区在线影院重磅| 蓝色福利精品导航| 日韩欧美123| 国产一区二区三区在线观看免费| 久久亚洲私人国产精品va媚药| 久久99精品国产麻豆婷婷洗澡| 欧美r级在线观看| 精品午夜久久福利影院| 精品国产网站在线观看| 国产精品一卡二卡在线观看| 精品区一区二区| 国产白丝网站精品污在线入口| 中文字幕不卡在线| 色哟哟一区二区在线观看| 亚洲国产精品视频| 日韩一区二区中文字幕| 国产精品一区二区在线看| 国产精品进线69影院| 91免费版在线| 免费在线观看成人| 国产三级精品在线| 欧美三电影在线| 精品无人区卡一卡二卡三乱码免费卡| 久久精品水蜜桃av综合天堂| 成人性生交大片免费看视频在线| 亚洲欧美aⅴ...| 日韩欧美久久久| 99久久久精品| 日产国产欧美视频一区精品 | 午夜精品影院在线观看| 精品国产三级电影在线观看| 成人av免费在线观看| 亚洲高清在线视频| 国产欧美一区二区在线| 欧洲精品中文字幕| 国产一区二区免费视频| 亚洲精品老司机| 2024国产精品| 欧美日韩一区二区在线观看| 国产麻豆一精品一av一免费 | 欧美久久久久久久久久| 国产成人免费视频| 水野朝阳av一区二区三区| 中文字幕欧美激情| 91精品一区二区三区在线观看| 成人免费视频网站在线观看| 天天色图综合网| 亚洲色欲色欲www| 26uuu成人网一区二区三区| 欧美中文字幕一区二区三区亚洲| 激情欧美日韩一区二区| 亚洲成人动漫在线观看| 综合在线观看色| 国产视频在线观看一区二区三区| 91精品国产综合久久精品麻豆 | 欧美成人艳星乳罩| 色视频成人在线观看免| 国产.欧美.日韩| 日韩影视精彩在线| 亚洲一线二线三线视频| 国产精品高潮久久久久无| 久久免费视频一区| 欧美一级久久久久久久大片| 欧美日免费三级在线| 97精品久久久久中文字幕| 国产乱色国产精品免费视频| 日本麻豆一区二区三区视频| 亚洲午夜久久久久久久久电影院 | 国内精品伊人久久久久影院对白| 午夜影院久久久| 亚洲成av人影院| 亚洲精品国产精品乱码不99| 亚洲天堂免费在线观看视频| 国产精品色在线观看| 国产日韩精品一区二区浪潮av| 欧美r级电影在线观看| 日韩欧美在线网站| 日韩欧美亚洲国产另类| 在线电影院国产精品| 欧美精品三级在线观看| 7777精品久久久大香线蕉 | 欧美激情一区二区三区| 久久午夜羞羞影院免费观看| 精品嫩草影院久久| 日韩精品中文字幕一区二区三区| 日韩一区二区在线看| 日韩一区二区三免费高清| 日韩午夜激情免费电影| 日韩欧美三级在线| 久久久噜噜噜久噜久久综合| 国产色爱av资源综合区| 欧美国产精品v| 最好看的中文字幕久久| 性久久久久久久久| 久久66热偷产精品| 国产精品538一区二区在线| 岛国精品一区二区| 91蜜桃免费观看视频| 欧美三片在线视频观看| 91精品免费在线| 久久精品视频在线看| 中文字幕中文字幕一区| 亚洲尤物在线视频观看| 日韩电影免费一区| 国产精品自拍在线| 97久久精品人人做人人爽| 91麻豆精品国产自产在线观看一区| 精品国产1区二区| 中文字幕一区二区不卡| 亚洲va欧美va人人爽| 国产高清在线观看免费不卡| 99精品热视频| 日韩亚洲欧美高清| 中文字幕一区二区三区蜜月 | 日韩一区二区三区免费看| 精品久久久久久久人人人人传媒 | 亚洲欧美日韩小说| 日韩国产在线观看一区| 国产传媒一区在线| 欧美日本在线看| 中文字幕欧美区| 青娱乐精品视频| 91免费视频网址| ww亚洲ww在线观看国产| 亚洲精品国产高清久久伦理二区| 激情综合色播五月| 欧洲在线/亚洲| 中文乱码免费一区二区| 日韩成人伦理电影在线观看| 成人黄页在线观看| 日韩欧美成人一区二区| 一区二区三国产精华液| 国产成人精品三级麻豆| 欧美一级搡bbbb搡bbbb| 亚洲激情在线播放| 高清成人免费视频| 日韩欧美国产一区二区在线播放| 亚洲卡通动漫在线| 国产成人综合网站| 日韩精品中文字幕一区 | 国产乱妇无码大片在线观看| 欧美午夜影院一区| 1024国产精品| 国产精品亚洲一区二区三区在线| 欧美一区二区视频网站| 一区二区三区欧美| 99精品视频中文字幕| 欧美激情一区二区三区全黄| 激情小说亚洲一区| 欧美一级片在线| 免费成人结看片| 欧美丰满少妇xxxxx高潮对白| 亚洲乱码国产乱码精品精可以看| 成人一区二区三区在线观看| 日韩欧美电影一区| 另类欧美日韩国产在线| 在线播放/欧美激情| 五月婷婷色综合| 欧美三日本三级三级在线播放| 亚洲精品第一国产综合野| av一二三不卡影片| 国产精品毛片无遮挡高清| 国产精品99久久不卡二区| 久久久久久久网| 国产99久久久久| 国产精品素人一区二区| 成人免费电影视频| 国产精品免费视频网站|