Firewall-Masquerade avec interface http

crabs_firewall-3.0.1 ©2005-2011 - Christophe CAZAJUS (crabs-mettre_le_signe_at-crabs-world.com)

firewall_col~~ / STAT / COL / daemon.c
Makefile firewall.h main.c daemon.c rc.firewall_col
    1 /*
    2 **=============================================================================
    3 ** crabs_firewall-3.0.1 : Firewall-Masquerade avec interface http
    4 ** Copyright (C) 2005-2011 : Christophe CAZAJUS (crabs-mettre_le_signe_at-crabs-world.com)
    5 **
    6 ** Ce source fait partie d'un projet logiciel libre. Vous pouvez le distribuer
    7 ** et/ou le modifier en respectant les termes de la GNU General Public License
    8 ** version 2 ou (suite a votre propre choix) une version ulterieure.
    9 **
   10 ** Ce programme est distribue dans l'espoir qu'il puisse etre utile, mais
   11 ** sans aucune garantie, meme si il est associe a un produit qui vous en
   12 ** propose une. Conformez-vous a la GNU General Public License pour avoir
   13 ** plus de precisions.
   14 **
   15 ** L'auteur ne peut etre tenu responsable de l'utilisation faite des
   16 ** composantes associees a ce projet (en partie ou dans leur totalite).
   17 **
   18 ** Une copie du fichier de la GNU GPL est fournie dans le repertoire DOC
   19 ** de ce projet sous le nom gnu_gpl.txt
   20 **
   21 **=============================================================================
   22 */
   23 #include <sys/types.h>
   24 #include <errno.h>
   25 #include <stdarg.h>
   26 #include <fcntl.h>
   27 #include <stdio.h>
   28 #include <unistd.h>
   29 #include <stdlib.h>
   30 #include <string.h>
   31 #include <syslog.h>
   32 
   33 char *str_err( char* dst, size_t sz, char* fmt, ... )
   34     {
   35     va_list args            ;
   36     char    format  [1024]  ;
   37     char    err_m   [1024]  ;
   38     int     i, j, l, n      ;
   39     int     l_err_m         ;
   40 
   41     va_start(args, fmt ) ;
   42     l = strlen(fmt) ; format[0] = 0 ; j = 0  ;
   43 
   44     strcpy( err_m, strerror(errno) ); l_err_m = strlen(err_m) ;
   45 
   46     for ( i=0; i<l; i++ )
   47         {
   48         if ( strncmp( fmt+i, "%m",2 ) == 0 )
   49             {
   50             strcat( format, err_m ) ;
   51             j += l_err_m ; i++ ;
   52             }
   53         else
   54             format[j++] = fmt[i] ;
   55         format[j] = 0 ;
   56         }
   57 
   58     vsnprintf( dst, sz, format, args ) ;
   59     va_end( args );
   60     return dst ;
   61     }
   62 
   63 int be_a_daemon( char *name, char *err, size_t sz )
   64     {
   65     pid_t       pid ;
   66 
   67     switch ( pid = fork() )
   68         {
   69         case -1 :
   70             str_err(err,sz,"%s(%d):fork():%m",__FILE__,__LINE__) ;
   71             return -1 ;
   72         case 0 :
   73             break ;
   74         default :
   75             printf ( "Daemon %s starting (%u) ...\n", name, pid ) ;
   76             exit ( 0 ) ;
   77         }
   78 
   79     openlog( name, LOG_CONS|LOG_PID, LOG_DAEMON ) ;
   80     if ( close(0) == -1 )
   81         {
   82         str_err(err,sz,"%s(%d):close(0):%m",__FILE__,__LINE__) ;
   83         return -1 ;
   84         }
   85 
   86     if ( close(1) == -1 )
   87         {
   88         str_err(err,sz,"%s(%d):close(1):%m",__FILE__,__LINE__) ;
   89         return -1 ;
   90         }
   91 
   92     if ( close(2) == -1 )
   93         {
   94         str_err(err,sz,"%s(%d):close(2):%m",__FILE__,__LINE__) ;
   95         return -1 ;
   96         }
   97 
   98     if ( open ( "/", O_RDONLY ) == -1 )
   99         {
  100         str_err(err,sz,"%s(%d):open(/):%m",__FILE__,__LINE__) ;
  101         return -1 ;
  102         }
  103 
  104     if ( dup2( 0, 1 ) == -1 )
  105         {
  106         str_err(err,sz,"%s(%d):dup2(0,1):%m",__FILE__,__LINE__) ;
  107         return -1 ;
  108         }
  109 
  110     if ( dup2( 0, 2 ) == -1 )
  111         {
  112         str_err(err,sz,"%s(%d):dup2(0,2):%m",__FILE__,__LINE__) ;
  113         return -1 ;
  114         }
  115 
  116     if ( setsid() == -1 )
  117         {
  118         str_err(err,sz,"%s(%d):setsid():%m",__FILE__,__LINE__) ;
  119         return -1 ;
  120         }
  121     return 0 ;
  122     }
  123 
Makefile firewall.h main.c daemon.c rc.firewall_col
firewall_col~~ / STAT / COL / daemon.c

Haut de page

Contacter crabs

Date de génération : 22/09/2011 21:48