xref: /aosp_15_r20/external/libpcap/testprogs/fuzz/fuzz_rserver.c (revision 8b26181f966a6af5cf6981a6f474313de533bb28)
1*8b26181fSAndroid Build Coastguard Worker #include <stdio.h>
2*8b26181fSAndroid Build Coastguard Worker #include <stdlib.h>
3*8b26181fSAndroid Build Coastguard Worker #include <fcntl.h>
4*8b26181fSAndroid Build Coastguard Worker #include <errno.h>
5*8b26181fSAndroid Build Coastguard Worker #include <stdarg.h>
6*8b26181fSAndroid Build Coastguard Worker 
7*8b26181fSAndroid Build Coastguard Worker #include <pcap/pcap.h>
8*8b26181fSAndroid Build Coastguard Worker 
9*8b26181fSAndroid Build Coastguard Worker FILE * outfile = NULL;
10*8b26181fSAndroid Build Coastguard Worker 
fuzz_openFile(const char * name)11*8b26181fSAndroid Build Coastguard Worker void fuzz_openFile(const char * name) {
12*8b26181fSAndroid Build Coastguard Worker     if (outfile != NULL) {
13*8b26181fSAndroid Build Coastguard Worker         fclose(outfile);
14*8b26181fSAndroid Build Coastguard Worker     }
15*8b26181fSAndroid Build Coastguard Worker     outfile = fopen(name, "w");
16*8b26181fSAndroid Build Coastguard Worker }
17*8b26181fSAndroid Build Coastguard Worker 
18*8b26181fSAndroid Build Coastguard Worker typedef enum {
19*8b26181fSAndroid Build Coastguard Worker     LOGPRIO_DEBUG,
20*8b26181fSAndroid Build Coastguard Worker     LOGPRIO_INFO,
21*8b26181fSAndroid Build Coastguard Worker     LOGPRIO_WARNING,
22*8b26181fSAndroid Build Coastguard Worker     LOGPRIO_ERROR
23*8b26181fSAndroid Build Coastguard Worker } log_priority;
24*8b26181fSAndroid Build Coastguard Worker 
rpcapd_log(log_priority priority,const char * message,...)25*8b26181fSAndroid Build Coastguard Worker void rpcapd_log(log_priority priority, const char *message, ...)
26*8b26181fSAndroid Build Coastguard Worker {
27*8b26181fSAndroid Build Coastguard Worker     va_list ap;
28*8b26181fSAndroid Build Coastguard Worker 
29*8b26181fSAndroid Build Coastguard Worker     va_start(ap, message);
30*8b26181fSAndroid Build Coastguard Worker     fprintf(outfile, "rpcapd[%d]:", priority);
31*8b26181fSAndroid Build Coastguard Worker     vfprintf(outfile, message, ap);
32*8b26181fSAndroid Build Coastguard Worker     putc('\n', outfile);
33*8b26181fSAndroid Build Coastguard Worker     va_end(ap);
34*8b26181fSAndroid Build Coastguard Worker }
35*8b26181fSAndroid Build Coastguard Worker 
36*8b26181fSAndroid Build Coastguard Worker void sock_initfuzz(const uint8_t *Data, size_t Size);
37*8b26181fSAndroid Build Coastguard Worker int daemon_serviceloop(int sockctrl, int isactive, char *passiveClients, int nullAuthAllowed, int uses_ssl);
38*8b26181fSAndroid Build Coastguard Worker 
LLVMFuzzerTestOneInput(const uint8_t * Data,size_t Size)39*8b26181fSAndroid Build Coastguard Worker int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
40*8b26181fSAndroid Build Coastguard Worker     int sock;
41*8b26181fSAndroid Build Coastguard Worker 
42*8b26181fSAndroid Build Coastguard Worker     //initialization
43*8b26181fSAndroid Build Coastguard Worker     if (outfile == NULL) {
44*8b26181fSAndroid Build Coastguard Worker         fuzz_openFile("/dev/null");
45*8b26181fSAndroid Build Coastguard Worker     }
46*8b26181fSAndroid Build Coastguard Worker 
47*8b26181fSAndroid Build Coastguard Worker     sock_initfuzz(Data, Size);
48*8b26181fSAndroid Build Coastguard Worker     sock = socket(AF_INET, SOCK_STREAM, 0);
49*8b26181fSAndroid Build Coastguard Worker     if (sock == INVALID_SOCKET) {
50*8b26181fSAndroid Build Coastguard Worker         abort();
51*8b26181fSAndroid Build Coastguard Worker     }
52*8b26181fSAndroid Build Coastguard Worker     //dummy socket, active, null auth allowed, no ssl
53*8b26181fSAndroid Build Coastguard Worker     daemon_serviceloop(sock, 1, malloc(0), 1, 0);
54*8b26181fSAndroid Build Coastguard Worker 
55*8b26181fSAndroid Build Coastguard Worker     return 0;
56*8b26181fSAndroid Build Coastguard Worker }
57