Changeset 25221


Ignore:
Timestamp:
2011-01-28T20:51:13+01:00 (7 years ago)
Author:
jow
Message:

[backfire] merge r25220

Location:
branches/backfire/package/uhttpd
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/backfire/package/uhttpd/Makefile

    r24953 r25221  
    99 
    1010PKG_NAME:=uhttpd 
    11 PKG_RELEASE:=21 
     11PKG_RELEASE:=22 
    1212 
    1313PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME) 
  • branches/backfire/package/uhttpd/src/uhttpd.c

    r24953 r25221  
    621621} 
    622622 
    623  
    624 int main (int argc, char **argv) 
     623#ifdef HAVE_TLS 
     624static inline uh_inittls(struct config *conf) 
    625625{ 
    626         /* master file descriptor list */ 
    627         fd_set serv_fds; 
    628  
    629         /* working structs */ 
    630         struct addrinfo hints; 
    631         struct sigaction sa; 
    632         struct config conf; 
    633  
    634         /* signal mask */ 
    635         sigset_t ss; 
    636  
    637         /* maximum file descriptor number */ 
    638         int cur_fd, max_fd = 0; 
    639  
    640 #ifdef HAVE_TLS 
    641         int tls = 0; 
    642         int keys = 0; 
    643 #endif 
    644  
    645         int bound = 0; 
    646         int nofork = 0; 
    647  
    648         /* args */ 
    649         int opt; 
    650         char bind[128]; 
    651         char *port = NULL; 
    652  
    653 #if defined(HAVE_TLS) || defined(HAVE_LUA) 
    654626        /* library handle */ 
    655627        void *lib; 
    656 #endif 
    657  
    658         FD_ZERO(&serv_fds); 
    659  
    660         /* handle SIGPIPE, SIGINT, SIGTERM, SIGCHLD */ 
    661         sa.sa_flags = 0; 
    662         sigemptyset(&sa.sa_mask); 
    663  
    664         sa.sa_handler = SIG_IGN; 
    665         sigaction(SIGPIPE, &sa, NULL); 
    666  
    667         sa.sa_handler = uh_sigchld; 
    668         sigaction(SIGCHLD, &sa, NULL); 
    669  
    670         sa.sa_handler = uh_sigterm; 
    671         sigaction(SIGINT,  &sa, NULL); 
    672         sigaction(SIGTERM, &sa, NULL); 
    673  
    674         /* defer SIGCHLD */ 
    675         sigemptyset(&ss); 
    676         sigaddset(&ss, SIGCHLD); 
    677         sigprocmask(SIG_BLOCK, &ss, NULL); 
    678  
    679         /* prepare addrinfo hints */ 
    680         memset(&hints, 0, sizeof(hints)); 
    681         hints.ai_family   = AF_UNSPEC; 
    682         hints.ai_socktype = SOCK_STREAM; 
    683         hints.ai_flags    = AI_PASSIVE; 
    684  
    685         /* parse args */ 
    686         memset(&conf, 0, sizeof(conf)); 
    687         memset(bind, 0, sizeof(bind)); 
    688  
    689 #ifdef HAVE_TLS 
     628 
     629        /* already loaded */ 
     630        if( conf->tls != NULL ) 
     631                return 0; 
     632 
    690633        /* load TLS plugin */ 
    691634        if( ! (lib = dlopen("uhttpd_tls.so", RTLD_LAZY | RTLD_GLOBAL)) ) 
     
    695638                        "(Reason: %s)\n", dlerror() 
    696639                ); 
     640 
     641                return 1; 
    697642        } 
    698643        else 
    699644        { 
    700645                /* resolve functions */ 
    701                 if( !(conf.tls_init   = dlsym(lib, "uh_tls_ctx_init"))      || 
    702                     !(conf.tls_cert   = dlsym(lib, "uh_tls_ctx_cert"))      || 
    703                     !(conf.tls_key    = dlsym(lib, "uh_tls_ctx_key"))       || 
    704                     !(conf.tls_free   = dlsym(lib, "uh_tls_ctx_free"))      || 
    705                         !(conf.tls_accept = dlsym(lib, "uh_tls_client_accept")) || 
    706                         !(conf.tls_close  = dlsym(lib, "uh_tls_client_close"))  || 
    707                         !(conf.tls_recv   = dlsym(lib, "uh_tls_client_recv"))   || 
    708                         !(conf.tls_send   = dlsym(lib, "uh_tls_client_send")) 
     646                if( !(conf->tls_init   = dlsym(lib, "uh_tls_ctx_init"))      || 
     647                    !(conf->tls_cert   = dlsym(lib, "uh_tls_ctx_cert"))      || 
     648                    !(conf->tls_key    = dlsym(lib, "uh_tls_ctx_key"))       || 
     649                    !(conf->tls_free   = dlsym(lib, "uh_tls_ctx_free"))      || 
     650                    !(conf->tls_accept = dlsym(lib, "uh_tls_client_accept")) || 
     651                    !(conf->tls_close  = dlsym(lib, "uh_tls_client_close"))  || 
     652                    !(conf->tls_recv   = dlsym(lib, "uh_tls_client_recv"))   || 
     653                    !(conf->tls_send   = dlsym(lib, "uh_tls_client_send")) 
    709654                ) { 
    710655                        fprintf(stderr, 
     
    716661 
    717662                /* init SSL context */ 
    718                 if( ! (conf.tls = conf.tls_init()) ) 
     663                if( ! (conf->tls = conf->tls_init()) ) 
    719664                { 
    720665                        fprintf(stderr, "Error: Failed to initalize SSL context\n"); 
     
    722667                } 
    723668        } 
    724 #endif 
     669 
     670        return 0; 
     671} 
     672#endif 
     673 
     674int main (int argc, char **argv) 
     675{ 
     676        /* master file descriptor list */ 
     677        fd_set serv_fds; 
     678 
     679        /* working structs */ 
     680        struct addrinfo hints; 
     681        struct sigaction sa; 
     682        struct config conf; 
     683 
     684        /* signal mask */ 
     685        sigset_t ss; 
     686 
     687        /* maximum file descriptor number */ 
     688        int cur_fd, max_fd = 0; 
     689 
     690#ifdef HAVE_TLS 
     691        int tls = 0; 
     692        int keys = 0; 
     693#endif 
     694 
     695        int bound = 0; 
     696        int nofork = 0; 
     697 
     698        /* args */ 
     699        int opt; 
     700        char bind[128]; 
     701        char *port = NULL; 
     702 
     703#ifdef HAVE_LUA 
     704        /* library handle */ 
     705        void *lib; 
     706#endif 
     707 
     708        FD_ZERO(&serv_fds); 
     709 
     710        /* handle SIGPIPE, SIGINT, SIGTERM, SIGCHLD */ 
     711        sa.sa_flags = 0; 
     712        sigemptyset(&sa.sa_mask); 
     713 
     714        sa.sa_handler = SIG_IGN; 
     715        sigaction(SIGPIPE, &sa, NULL); 
     716 
     717        sa.sa_handler = uh_sigchld; 
     718        sigaction(SIGCHLD, &sa, NULL); 
     719 
     720        sa.sa_handler = uh_sigterm; 
     721        sigaction(SIGINT,  &sa, NULL); 
     722        sigaction(SIGTERM, &sa, NULL); 
     723 
     724        /* defer SIGCHLD */ 
     725        sigemptyset(&ss); 
     726        sigaddset(&ss, SIGCHLD); 
     727        sigprocmask(SIG_BLOCK, &ss, NULL); 
     728 
     729        /* prepare addrinfo hints */ 
     730        memset(&hints, 0, sizeof(hints)); 
     731        hints.ai_family   = AF_UNSPEC; 
     732        hints.ai_socktype = SOCK_STREAM; 
     733        hints.ai_flags    = AI_PASSIVE; 
     734 
     735        /* parse args */ 
     736        memset(&conf, 0, sizeof(conf)); 
     737        memset(bind, 0, sizeof(bind)); 
     738 
    725739 
    726740        while( (opt = getopt(argc, argv, 
     
    751765                                if( opt == 's' ) 
    752766                                { 
    753                                         if( !conf.tls ) 
     767                                        if( uh_inittls(&conf) ) 
    754768                                        { 
    755769                                                fprintf(stderr, 
     
    776790                        /* certificate */ 
    777791                        case 'C': 
    778                                 if( conf.tls ) 
     792                                if( !uh_inittls(&conf) ) 
    779793                                { 
    780794                                        if( conf.tls_cert(conf.tls, optarg) < 1 ) 
     
    792806                        /* key */ 
    793807                        case 'K': 
    794                                 if( conf.tls ) 
     808                                if( !uh_inittls(&conf) ) 
    795809                                { 
    796810                                        if( conf.tls_key(conf.tls, optarg) < 1 ) 
     
    913927                                if( (port = malloc(strlen(optarg)+1)) != NULL ) 
    914928                                { 
     929                                        /* "decode" plus to space to retain compat */ 
     930                                        for (opt = 0; optarg[opt]; opt++) 
     931                                                if (optarg[opt] == '+') 
     932                                                        optarg[opt] = ' '; 
     933 
    915934                                        memset(port, 0, strlen(optarg)+1); 
    916935                                        uh_urldecode(port, strlen(optarg), optarg, strlen(optarg)); 
     936 
    917937                                        printf("%s", port); 
    918938                                        free(port); 
Note: See TracChangeset for help on using the changeset viewer.