Changeset 9e26841


Ignore:
Timestamp:
06/24/09 19:28:13 (9 years ago)
Author:
Erik Ekman <yarrick@…>
Branches:
iodine-0.6
Children:
eaef14
Parents:
35b7f3
git-author:
Erik Ekman <yarrick@…> (06/24/09 19:28:13)
git-committer:
Erik Ekman <yarrick@…> (06/24/09 19:28:13)
Message:

Add support for applying SELinux context

Files:
1 added
7 edited

Legend:

Unmodified
Added
Removed
  • CHANGELOG

    r35b7f3 r9e26841  
    1111        - Multiple installed TAP32 interfaces are now supported, fixes #46. 
    1212        - Return nonzero if tunnel fails to open, fixes #62. 
     13        - Support for setting a SELinux context, based on patch by 
     14                Sebastien Raveau. Sample context file in doc/iodine.te 
    1315 
    14162009-06-01: 0.5.2 "WifiFree" 
  • man/iodine.8

    r0ce0c6 r9e26841  
    2020.B ] [-m 
    2121.I fragsize 
     22.B ] [-z 
     23.I context 
    2224.B ] 
    2325.B [ 
     
    4850.B ] [-P 
    4951.I password 
    50 .B ]  
     52.B ] [-z 
     53.I context 
     54.B ] 
    5155.I tunnel_ip 
    5256.B [ 
     
    9094.B stdin 
    9195will be used as input. Only the first 32 characters will be used. 
     96.TP 
     97.B -z context 
     98Apply SELinux 'context' after initialization. 
    9299.SS Client Options: 
    93100.TP 
  • src/common.c

    r08efbd r9e26841  
    4040#include <arpa/inet.h> 
    4141#include <netinet/in.h> 
     42#endif 
     43 
     44#ifdef HAVE_SETCON 
     45# include <selinux/selinux.h> 
    4246#endif 
    4347 
     
    169173 
    170174void 
     175do_setcon(char *context) 
     176{ 
     177#ifdef HAVE_SETCON 
     178        if (-1 == setcon(context)) 
     179                err(1, "%s", context); 
     180#else 
     181        warnx("No SELinux support built in"); 
     182#endif 
     183} 
     184 
     185void 
    171186do_detach() 
    172187{ 
  • src/common.h

    r08efbd r9e26841  
    9191 
    9292void do_chroot(char *); 
     93void do_setcon(char *); 
    9394void do_detach(); 
    9495 
  • src/iodine.c

    r9facdcf r9e26841  
    11051105 
    11061106        fprintf(stderr, "Usage: %s [-v] [-h] [-f] [-u user] [-t chrootdir] [-d device] " 
    1107                         "[-P password] [-m maxfragsize] [nameserver] topdomain\n", __progname); 
     1107                        "[-P password] [-m maxfragsize] [-z context] [nameserver] topdomain\n", __progname); 
    11081108        exit(2); 
    11091109} 
     
    11151115        fprintf(stderr, "iodine IP over DNS tunneling client\n"); 
    11161116        fprintf(stderr, "Usage: %s [-v] [-h] [-f] [-u user] [-t chrootdir] [-d device] " 
    1117                         "[-P password] [-m maxfragsize] [nameserver] topdomain\n", __progname); 
     1117                        "[-P password] [-m maxfragsize] [-z context] [nameserver] topdomain\n", __progname); 
    11181118        fprintf(stderr, "  -v to print version info and exit\n"); 
    11191119        fprintf(stderr, "  -h to print this help and exit\n"); 
     
    11241124        fprintf(stderr, "  -P password used for authentication (max 32 chars will be used)\n"); 
    11251125        fprintf(stderr, "  -m maxfragsize, to limit size of downstream packets\n"); 
     1126        fprintf(stderr, "  -z context, to apply specified SELinux context after initialization\n"); 
    11261127        fprintf(stderr, "nameserver is the IP number of the relaying nameserver, if absent /etc/resolv.conf is used\n"); 
    11271128        fprintf(stderr, "topdomain is the FQDN that is delegated to the tunnel endpoint.\n"); 
     
    11521153        int foreground; 
    11531154        char *newroot; 
     1155        char *context; 
    11541156        char *device; 
    11551157        int choice; 
     
    11641166        foreground = 0; 
    11651167        newroot = NULL; 
     1168        context = NULL; 
    11661169        device = NULL; 
    11671170        chunkid = 0; 
     
    12231226                        max_downstream_frag_size = atoi(optarg); 
    12241227                        break; 
     1228                case 'z': 
     1229                        context = optarg; 
     1230                        break; 
    12251231                default: 
    12261232                        usage(); 
     
    13221328#endif 
    13231329        } 
     1330 
     1331        if (context != NULL) 
     1332                do_setcon(context); 
    13241333         
    13251334        downstream_seqno = 0; 
  • src/iodined.c

    rc15190 r9e26841  
    982982 
    983983        fprintf(stderr, "Usage: %s [-v] [-h] [-c] [-s] [-f] [-D] [-u user] " 
    984                 "[-t chrootdir] [-d device] [-m mtu] " 
     984                "[-t chrootdir] [-d device] [-m mtu] [-z context] " 
    985985                "[-l ip address to listen on] [-p port] [-n external ip] [-b dnsport] [-P password]" 
    986986                " tunnel_ip[/netmask] topdomain\n", __progname); 
     
    994994        fprintf(stderr, "iodine IP over DNS tunneling server\n"); 
    995995        fprintf(stderr, "Usage: %s [-v] [-h] [-c] [-s] [-f] [-D] [-u user] " 
    996                 "[-t chrootdir] [-d device] [-m mtu] " 
     996                "[-t chrootdir] [-d device] [-m mtu] [-z context] " 
    997997                "[-l ip address to listen on] [-p port] [-n external ip] [-b dnsport] [-P password]" 
    998998                " tunnel_ip[/netmask] topdomain\n", __progname); 
     
    10081008        fprintf(stderr, "  -d device to set tunnel device name\n"); 
    10091009        fprintf(stderr, "  -m mtu to set tunnel device mtu\n"); 
     1010        fprintf(stderr, "  -z context to apply SELinux context after initialization\n"); 
    10101011        fprintf(stderr, "  -l ip address to listen on for incoming dns traffic " 
    10111012                "(default 0.0.0.0)\n"); 
     
    10401041        char *username; 
    10411042        char *newroot; 
     1043        char *context; 
    10421044        char *device; 
    10431045        int dnsd_fd; 
     
    10581060        username = NULL; 
    10591061        newroot = NULL; 
     1062        context = NULL; 
    10601063        device = NULL; 
    10611064        foreground = 0; 
     
    10911094        fw_query_init(); 
    10921095         
    1093         while ((choice = getopt(argc, argv, "vcsfhDu:t:d:m:l:p:n:b:P:")) != -1) { 
     1096        while ((choice = getopt(argc, argv, "vcsfhDu:t:d:m:l:p:n:b:P:z:")) != -1) { 
    10941097                switch(choice) { 
    10951098                case 'v': 
     
    11421145                        /* XXX: find better way of cleaning up ps(1) */ 
    11431146                        memset(optarg, 0, strlen(optarg));  
     1147                        break; 
     1148                case 'z': 
     1149                        context = optarg; 
    11441150                        break; 
    11451151                default: 
     
    12881294        } 
    12891295 
     1296        if (context != NULL) 
     1297                do_setcon(context); 
     1298 
    12901299#ifndef WINDOWS32 
    12911300        openlog(__progname, LOG_NOWAIT, LOG_DAEMON); 
  • src/osflags

    r416f91 r9e26841  
    1717                        echo '-lws2_32 -liphlpapi'; 
    1818                ;; 
     19                Linux) 
     20                        [ -e /usr/include/selinux/selinux.h ] && echo '-lselinux'; 
     21                ;; 
    1922        esac 
    2023        ;; 
     
    2427                        echo '-Dsocklen_t=int'; 
    2528                ;; 
     29                Linux) 
     30                        [ -e /usr/include/selinux/selinux.h ] && echo '-DHAVE_SETCON'; 
     31                ;; 
    2632        esac 
    2733;; 
Note: See TracChangeset for help on using the changeset viewer.