Changeset 1858 for zzuf/trunk/src


Ignore:
Timestamp:
Nov 2, 2007, 11:45:54 PM (13 years ago)
Author:
Sam Hocevar
Message:
  • Network destination port choosing with -p/--ports.
  • Renamed -p/--pick into -l/--list to avoid conflicts.
Location:
zzuf/trunk/src
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • zzuf/trunk/src/fd.c

    r1794 r1858  
    4444#endif
    4545
     46/* Network port cherry picking */
     47static int *ports = NULL;
     48static int static_ports[512];
     49
    4650/* File descriptor cherry picking */
    47 static int *ranges = NULL;
    48 static int static_ranges[512];
     51static int *list = NULL;
     52static int static_list[512];
    4953
    5054/* File descriptor stuff. When program is launched, we use the static array of
     
    96100}
    97101
    98 /* This function is the same as _zz_bytes() */
    99 void _zz_pick(char const *list)
     102void _zz_ports(char const *list)
    100103{   
    101     ranges = _zz_allocrange(list, static_ranges);
     104    ports = _zz_allocrange(list, static_ports);
     105}
     106
     107void _zz_list(char const *list)
     108{   
     109    list = _zz_allocrange(list, static_list);
    102110}
    103111
     
    190198    if(fds != static_fds)
    191199        free(fds);
    192     if(ranges != static_ranges)
    193         free(ranges);
     200    if(list != static_list)
     201        free(list);
     202    if(ports != static_ports)
     203        free(ports);
    194204}
    195205
     
    215225
    216226    return 1;
     227}
     228
     229int _zz_portwatched(int port)
     230{
     231    return _zz_isinrange(port, ports);
    217232}
    218233
     
    274289
    275290    /* Check whether we should ignore the fd */
    276     if(ranges)
     291    if(list)
    277292    {
    278293        static int idx = 0;
    279294
    280         files[i].active = _zz_isinrange(++idx, ranges);
     295        files[i].active = _zz_isinrange(++idx, list);
    281296    }
    282297    else
  • zzuf/trunk/src/fd.h

    r1791 r1858  
    2727
    2828extern int _zz_mustwatch(char const *);
     29extern int _zz_portwatched(int);
    2930extern int _zz_iswatched(int);
    3031extern void _zz_register(int);
  • zzuf/trunk/src/fuzz.c

    r1794 r1858  
    6666}
    6767
    68 /* This function is the same as _zz_pick() */
    6968void _zz_bytes(char const *list)
    7069{
  • zzuf/trunk/src/fuzz.h

    r1791 r1858  
    1919extern void _zz_fuzzing(char const *);
    2020extern void _zz_bytes(char const *);
    21 extern void _zz_pick(char const *);
     21extern void _zz_list(char const *);
     22extern void _zz_ports(char const *);
    2223extern void _zz_protect(char const *);
    2324extern void _zz_refuse(char const *);
  • zzuf/trunk/src/lib-fd.c

    r1855 r1858  
    4343#if defined HAVE_SYS_SOCKET_H
    4444#   include <sys/socket.h>
     45#endif
     46#if defined HAVE_NETINET_IN_H
     47#   include <netinet/in.h>
    4548#endif
    4649#if defined HAVE_SYS_UIO_H
     
    172175    LOADSYM(accept);
    173176    ret = ORIG(accept)(sockfd, addr, addrlen);
    174     if(!_zz_ready || _zz_islocked(-1) || !_zz_network)
     177    if(!_zz_ready || _zz_islocked(-1) || !_zz_network
     178         || !_zz_iswatched(sockfd) || !_zz_isactive(sockfd))
    175179        return ret;
    176180
     
    198202    if(ret >= 0)
    199203    {
     204        const struct sockaddr_in* in = (const struct sockaddr_in *)my_addr;
     205        long int port;
     206
     207        switch(my_addr->sa_family)
     208        {
     209        case AF_INET:
     210#if defined AF_INET6
     211        case AF_INET6:
     212#endif
     213#if defined AF_UNIX
     214        case AF_UNIX:
     215#endif
     216        case AF_UNSPEC:
     217            port = ntohs(in->sin_port);
     218            if(!_zz_portwatched(port))
     219            {
     220                _zz_unregister(sockfd);
     221                return ret;
     222            }
     223            break;
     224        default:
     225            break;
     226        }
     227
    200228        debug("%s(%i, %p, %i) = %i", __func__,
    201229              sockfd, my_addr, (int)addrlen, ret);
    202         _zz_register(ret);
    203230    }
    204231
  • zzuf/trunk/src/libzzuf.c

    r1791 r1858  
    9191        _zz_bytes(tmp);
    9292
    93     tmp = getenv("ZZUF_PICK");
     93    tmp = getenv("ZZUF_LIST");
    9494    if(tmp && *tmp)
    95         _zz_pick(tmp);
     95        _zz_list(tmp);
     96
     97    tmp = getenv("ZZUF_PORTS");
     98    if(tmp && *tmp)
     99        _zz_ports(tmp);
    96100
    97101    tmp = getenv("ZZUF_PROTECT");
  • zzuf/trunk/src/opts.c

    r1801 r1858  
    3434void _zz_opts_init(struct opts *opts)
    3535{
    36     opts->fuzzing = opts->bytes = opts->pick = NULL;
     36    opts->fuzzing = opts->bytes = opts->list = opts->ports = NULL;
    3737    opts->protect = opts->refuse = NULL;
    3838    opts->seed = DEFAULT_SEED;
  • zzuf/trunk/src/opts.h

    r1801 r1858  
    2121    char **oldargv;
    2222    char **newargv;
    23     char *fuzzing, *bytes, *pick, *protect, *refuse;
     23    char *fuzzing, *bytes, *list, *ports, *protect, *refuse;
    2424    uint32_t seed;
    2525    uint32_t endseed;
  • zzuf/trunk/src/zzuf.c

    r1802 r1858  
    147147    int cmdline = 0;
    148148#endif
     149    int network = 0;
    149150    int i;
    150151
     
    169170#endif
    170171#define OPTSTR OPTSTR_REGEX OPTSTR_RLIMIT_MEM OPTSTR_RLIMIT_CPU \
    171                 "Ab:B:C:dD:f:F:imnp:P:qr:R:s:St:vxhV"
     172                "Ab:B:C:dD:f:F:il:mnp:P:qr:R:s:St:vxhV"
    172173#define MOREINFO "Try `%s --help' for more information.\n"
    173174        int option_index = 0;
     
    193194            { "include",     1, NULL, 'I' },
    194195#endif
     196            { "list",        1, NULL, 'l' },
    195197            { "md5",         0, NULL, 'm' },
    196198            { "max-memory",  1, NULL, 'M' },
    197199            { "network",     0, NULL, 'n' },
    198             { "pick",        1, NULL, 'p' },
     200            { "ports",       1, NULL, 'p' },
    199201            { "protect",     1, NULL, 'P' },
    200202            { "quiet",       0, NULL, 'q' },
     
    276278            break;
    277279#endif
     280        case 'l': /* --list */
     281            opts->list = myoptarg;
     282            break;
    278283        case 'm': /* --md5 */
    279284            opts->md5 = 1;
     
    287292        case 'n': /* --network */
    288293            setenv("ZZUF_NETWORK", "1", 1);
    289             break;
    290         case 'p': /* --pick */
    291             opts->pick = myoptarg;
     294            network = 1;
     295            break;
     296        case 'p': /* --ports */
     297            opts->ports = myoptarg;
    292298            break;
    293299        case 'P': /* --protect */
     
    343349    }
    344350
     351    if(opts->ports && !network)
     352    {
     353        fprintf(stderr, "%s: port option (-p) requires network fuzzing (-n)\n",
     354                argv[0]);
     355        printf(MOREINFO, argv[0]);
     356        _zz_opts_fini(opts);
     357        return EXIT_FAILURE;
     358    }
     359
    345360    _zz_setratio(opts->minratio, opts->maxratio);
    346361    _zz_setseed(opts->seed);
     
    397412    if(opts->bytes)
    398413        setenv("ZZUF_BYTES", opts->bytes, 1);
    399     if(opts->pick)
    400         setenv("ZZUF_PICK", opts->pick, 1);
     414    if(opts->list)
     415        setenv("ZZUF_LIST", opts->list, 1);
     416    if(opts->ports)
     417        setenv("ZZUF_PORTS", opts->ports, 1);
    401418    if(opts->protect)
    402419        setenv("ZZUF_PROTECT", opts->protect, 1);
     
    451468    if(opts->bytes)
    452469        _zz_bytes(opts->bytes);
    453     if(opts->pick)
    454         _zz_pick(opts->pick);
     470    if(opts->list)
     471        _zz_list(opts->list);
     472    if(opts->ports)
     473        _zz_ports(opts->ports);
    455474    if(opts->protect)
    456475        _zz_protect(opts->protect);
     
    11471166    printf(                                        "[-M megabytes] ");
    11481167#endif
    1149     printf(                                                       "[-b ranges]\n");
    1150     printf("              [-P protect] [-R refuse] [-p pick]");
     1168    printf(                                                       "[-b ranges] [-p ports]\n");
     1169    printf("              [-P protect] [-R refuse] [-l list]");
    11511170#if defined HAVE_REGEX_H
    11521171    printf(                                                " [-I include] [-E exclude]");
     
    11771196    printf("  -I, --include <regex>     only fuzz files matching <regex>\n");
    11781197#endif
     1198    printf("  -l, --list <list>         only fuzz Nth descriptor with N in <list>\n");
    11791199    printf("  -m, --md5                 compute the output's MD5 hash\n");
    11801200#if defined HAVE_SETRLIMIT && defined ZZUF_RLIMIT_MEM
     
    11821202#endif
    11831203    printf("  -n, --network             fuzz network input\n");
    1184     printf("  -p, --pick <list>         only fuzz Nth descriptor with N in <list>\n");
     1204    printf("  -p, --ports <list>        only fuzz network destination ports in <list>\n");
    11851205    printf("  -P, --protect <list>      protect bytes and characters in <list>\n");
    11861206    printf("  -q, --quiet               do not print children's messages\n");
Note: See TracChangeset for help on using the changeset viewer.