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

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

?? boa.c

?? boa 一個簡小的web服務器 資源占用極少
?? C
字號:
/*
 *  Boa, an http server
 *  Copyright (C) 1995 Paul Phillips <paulp@go2net.com>
 *  Some changes Copyright (C) 1996 Charles F. Randall <crandall@goldsys.com>
 *  Some changes Copyright (C) 1996 Larry Doolittle <ldoolitt@boa.org>
 *  Some changes Copyright (C) 1996-2002 Jon Nelson <jnelson@boa.org>
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 1, or (at your option)
 *  any later version.
 *
 *  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., 675 Mass Ave, Cambridge, MA 02139, USA.
 *
 */

/* $Id: boa.c,v 1.99.2.2 2002/07/23 15:50:29 jnelson Exp $*/

#include "boa.h"
#include <sys/resource.h>

/* globals */
int backlog = SO_MAXCONN;
time_t start_time;

int sighup_flag = 0;            /* 1 => signal has happened, needs attention */
int sigchld_flag = 0;           /* 1 => signal has happened, needs attention */
int sigalrm_flag = 0;           /* 1 => signal has happened, needs attention */
int sigterm_flag = 0;           /* lame duck mode */
time_t current_time;
int max_fd = 0;
int pending_requests = 0;

/*-->changed by dxw 2005-10-23*/
int gflag=0;
time_t cgi_last_time;
/*<--*/

/* static to boa.c */
static void fixup_server_root(void);
static int create_server_socket(void);
static void drop_privs(void);

static int sock_opt = 1;
static int do_fork = 1;
int devnullfd = -1;

int main(int argc, char **argv)
{
    int c;                      /* command line arg */
    int server_s;                   /* boa socket */

    /* set umask to u+rw, u-x, go-rwx */
    c = umask(~0600);
    if (c == -1) {
        perror("umask");
        exit(1);
    }

    devnullfd = open("/dev/null", 0);

    /* make STDIN and STDOUT point to /dev/null */
    if (devnullfd == -1) {
        DIE("can't open /dev/null");
    }

    if (dup2(devnullfd, STDIN_FILENO) == -1) {
        DIE("can't dup2 /dev/null to STDIN_FILENO");
    }

    if (dup2(devnullfd, STDOUT_FILENO) == -1) {
        DIE("can't dup2 /dev/null to STDOUT_FILENO");
    }

    /* but first, update timestamp, because log_error_time uses it */
    (void) time(&current_time);

    while ((c = getopt(argc, argv, "c:r:d")) != -1) {
        switch (c) {
        case 'c':
            if (server_root)
                free(server_root);
            server_root = strdup(optarg);
            if (!server_root) {
                perror("strdup (for server_root)");
                exit(1);
            }
            break;
        case 'r':
            if (chdir(optarg) == -1) {
                log_error_time();
                perror("chdir (to chroot)");
                exit(1);
            }
            if (chroot(optarg) == -1) {
                log_error_time();
                perror("chroot");
                exit(1);
            }
            if (chdir("/") == -1) {
                log_error_time();
                perror("chdir (after chroot)");
                exit(1);
            }
            break;
        case 'd':
            do_fork = 0;
            break;
        default:
            fprintf(stderr, "Usage: %s [-c serverroot] [-r chroot] [-d]\n", argv[0]);
            exit(1);
        }
    }

    fixup_server_root();
    read_config_files();
    open_logs();
    server_s = create_server_socket();
    init_signals();
    drop_privs();
    create_common_env();
    build_needs_escape();

    if (max_connections < 1) {
        struct rlimit rl;

        /* has not been set explicitly */
        c = getrlimit(RLIMIT_NOFILE, &rl);
        if (c < 0) {
            perror("getrlimit");
            exit(1);
        }
        max_connections = rl.rlim_cur;
    }

    /* background ourself */
    if (do_fork) {
        switch(fork()) {
        case -1:
            /* error */
            perror("fork");
            exit(1);
            break;
        case 0:
            /* child, success */
            break;
        default:
            /* parent, success */
            exit(0);
            break;
        }
    }

    /* main loop */
    timestamp();

    status.requests = 0;
    status.errors = 0;

    start_time = current_time;
    select_loop(server_s);
    return 0;
}

static int create_server_socket(void)
{
    int server_s;

    server_s = socket(SERVER_AF, SOCK_STREAM, IPPROTO_TCP);
    if (server_s == -1) {
        DIE("unable to create socket");
    }

    /* server socket is nonblocking */
    if (set_nonblock_fd(server_s) == -1) {
        DIE("fcntl: unable to set server socket to nonblocking");
    }

    /* close server socket on exec so cgi's can't write to it */
    if (fcntl(server_s, F_SETFD, 1) == -1) {
        DIE("can't set close-on-exec on server socket!");
    }

    /* reuse socket addr */
    if ((setsockopt(server_s, SOL_SOCKET, SO_REUSEADDR, (void *) &sock_opt,
                    sizeof (sock_opt))) == -1) {
        DIE("setsockopt");
    }

    /* internet family-specific code encapsulated in bind_server()  */
    if (bind_server(server_s, server_ip) == -1) {
        DIE("unable to bind");
    }

    /* listen: large number just in case your kernel is nicely tweaked */
    if (listen(server_s, backlog) == -1) {
        DIE("unable to listen");
    }
    return server_s;
}

static void drop_privs(void)
{
    /* give away our privs if we can */
    if (getuid() == 0) {
        /*struct passwd *passwdbuf;
        passwdbuf = getpwuid(server_uid);
        if (passwdbuf == NULL) {
            DIE("getpwuid");
        }
        if (initgroups(passwdbuf->pw_name, passwdbuf->pw_gid) == -1) {
            DIE("initgroups");
        }
        if (setgid(server_gid) == -1) {
            DIE("setgid");
        }
        if (setuid(server_uid) == -1) {
            DIE("setuid");
        }
        // test for failed-but-return-was-successful setuid
        //http://www.securityportal.com/list-archive/bugtraq/2000/Jun/0101.html
         
        if (setuid(0) != -1) {
            DIE("icky Linux kernel bug!");
	
        }
	*/
    } else {
        if (server_gid || server_uid) {
            log_error_time();
            fprintf(stderr, "Warning: "
                    "Not running as root: no attempt to change"
                    " to uid %d gid %d\n", server_uid, server_gid);
        }
        server_gid = getgid();
        server_uid = getuid();
    }
}

/*
 * Name: fixup_server_root
 *
 * Description: Makes sure the server root is valid.
 *
 */

static void fixup_server_root()
{
    char *dirbuf;

    if (!server_root) {
#ifdef SERVER_ROOT
        server_root = strdup(SERVER_ROOT);
        if (!server_root) {
            perror("strdup (SERVER_ROOT)");
            exit(1);
        }
#else
        fputs("boa: don't know where server root is.  Please #define "
              "SERVER_ROOT in boa.h\n"
              "and recompile, or use the -c command line option to "
              "specify it.\n", stderr);
        exit(1);
#endif
    }

    if (chdir(server_root) == -1) {
        fprintf(stderr, "Could not chdir to \"%s\": aborting\n",
                server_root);
        exit(1);
    }

    dirbuf = normalize_path(server_root);
    free(server_root);
    server_root = dirbuf;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
3atv在线一区二区三区| 国产在线国偷精品产拍免费yy | 91美女在线看| 国产不卡一区视频| 久久99热国产| 精东粉嫩av免费一区二区三区| 免费久久99精品国产| 午夜一区二区三区视频| 亚洲va国产天堂va久久en| 一区二区三区不卡在线观看| 中文字幕亚洲在| 国产精品久久久久天堂| 专区另类欧美日韩| 亚洲精品免费在线观看| 亚洲自拍另类综合| 天堂久久一区二区三区| 日韩高清不卡在线| 精品在线播放免费| 懂色av噜噜一区二区三区av| 94-欧美-setu| 欧美日韩一区中文字幕| 欧美sm极限捆绑bd| 中文欧美字幕免费| 亚洲v中文字幕| 久久99精品久久久久久久久久久久 | 蜜臀99久久精品久久久久久软件| 日韩精彩视频在线观看| 久久黄色级2电影| 成人在线视频一区二区| 欧美日韩一本到| 久久嫩草精品久久久久| 亚洲视频你懂的| 日本人妖一区二区| aa级大片欧美| 精品国产乱码久久久久久久久 | 日韩一区二区三区三四区视频在线观看 | 成人av在线播放网址| 91久久国产综合久久| www国产精品av| 亚洲午夜电影网| 亚洲国产视频直播| 欧美一区二区三区播放老司机| 欧美一区二区三区思思人| 久久久www免费人成精品| 亚洲欧美日韩在线播放| 免费在线看一区| 97精品视频在线观看自产线路二| 制服丝袜中文字幕一区| 中文字幕一区二区三中文字幕| 蜜桃视频一区二区三区在线观看 | 日韩精品一区国产麻豆| 亚洲伦理在线免费看| 国产呦萝稀缺另类资源| 91精品麻豆日日躁夜夜躁| 亚洲美女屁股眼交3| 国产一区二区在线看| 久久久久久久久久久久电影| 日本一区二区三区免费乱视频| 一区二区欧美精品| 成人精品视频一区| 精品少妇一区二区三区日产乱码 | 日韩影院在线观看| 日本精品一区二区三区高清| 国产精品视频一二三区| 国产精品小仙女| 久久久精品国产99久久精品芒果| 肉丝袜脚交视频一区二区| 在线中文字幕不卡| 亚洲日本va在线观看| 成人av网站在线观看免费| 久久精品夜夜夜夜久久| 国产老妇另类xxxxx| 久久色视频免费观看| 99精品偷自拍| 欧美极品另类videosde| 精品夜夜嗨av一区二区三区| 日韩三级免费观看| 男男gaygay亚洲| 欧美不卡一区二区| 精品在线播放免费| 久久久久久久久久久黄色| 久久av老司机精品网站导航| 日韩一区二区视频在线观看| 精品一区二区久久久| 久久久亚洲精品一区二区三区| 黄色成人免费在线| 欧美激情中文不卡| 91久久精品网| 日本91福利区| 国产欧美一区在线| 99综合影院在线| 亚洲综合一二区| 91精品国产综合久久久久久| 久久精品72免费观看| 国产欧美一区二区精品性色 | 精品福利二区三区| 国产91丝袜在线播放九色| 久久久久久久久久久久久女国产乱 | 国产不卡免费视频| 综合久久综合久久| 欧美日韩一级黄| 激情小说欧美图片| 亚洲色图欧洲色图| 在线不卡中文字幕播放| 国产精品77777| 国产一区三区三区| 日韩一区二区免费电影| 韩国午夜理伦三级不卡影院| 国产精品人成在线观看免费| 色婷婷综合久久久久中文一区二区| 亚洲国产人成综合网站| 欧美变态口味重另类| jizzjizzjizz欧美| 午夜电影网亚洲视频| 国产欧美日韩视频一区二区| 成人激情校园春色| **网站欧美大片在线观看| 色婷婷综合在线| 久草中文综合在线| 亚洲乱码一区二区三区在线观看| 这里只有精品视频在线观看| 国产福利精品一区二区| 亚洲大型综合色站| 国产欧美一区二区三区网站| 91麻豆精品国产| 99v久久综合狠狠综合久久| 亚洲777理论| 国产精品乱码一区二区三区软件| 欧美三级日韩在线| 成人午夜免费视频| 裸体在线国模精品偷拍| 亚洲一区二区三区美女| 日本一区二区久久| 久久久亚洲高清| 日韩女优av电影| 欧美精品第1页| 91久久精品一区二区二区| 成人性生交大合| 蜜桃视频一区二区三区在线观看| 一区二区视频免费在线观看| 国产亚洲欧美中文| 91精品国产手机| 欧美日韩国产综合一区二区| 色噜噜狠狠色综合中国| 国产成人丝袜美腿| 国产美女视频91| 老司机精品视频线观看86| 午夜电影网亚洲视频| 性感美女久久精品| 亚洲国产精品久久久久婷婷884| 亚洲色图一区二区三区| 亚洲天堂福利av| 亚洲免费在线电影| 亚洲免费在线播放| 亚洲综合免费观看高清完整版在线| 国产精品久线观看视频| 国产精品久久久久影院色老大| 久久精品一区二区三区不卡| 国产亚洲精久久久久久| 国产精品情趣视频| 亚洲欧洲一区二区三区| 亚洲欧美aⅴ...| 一区二区三区毛片| 偷窥少妇高潮呻吟av久久免费| 日韩**一区毛片| 久久99久久久久| 成人午夜激情影院| 色综合婷婷久久| 欧美高清视频一二三区| 日韩欧美一级片| 久久久久久久久久看片| 国产精品不卡在线| 亚洲国产精品影院| 蜜臀av性久久久久蜜臀aⅴ流畅 | 国产精品色呦呦| 亚洲精品乱码久久久久久黑人 | 亚洲男女毛片无遮挡| 亚洲成人精品一区二区| 日韩 欧美一区二区三区| 国产一区二区三区最好精华液| 成人免费黄色在线| 91激情在线视频| 26uuu欧美| 亚洲欧美国产毛片在线| 午夜国产精品影院在线观看| 国产一区二区日韩精品| 一本大道久久a久久综合婷婷| 在线不卡中文字幕| 中文字幕+乱码+中文字幕一区| 亚洲国产精品综合小说图片区| 国产一区在线视频| 欧美三级一区二区| 国产农村妇女毛片精品久久麻豆 | 处破女av一区二区| 欧美人牲a欧美精品| 中文字幕乱码一区二区免费| 丝袜美腿高跟呻吟高潮一区| 成人三级伦理片| 精品国产免费人成在线观看| 亚洲情趣在线观看|