static const char *print_a2(const char *val, const rnode *r) { int machine = r->machine, syscall = r->syscall; char *out; const char *sys = audit_syscall_to_name(syscall, machine); if (sys) { if (strncmp(sys, "fcntl", 5) == 0) { int ival; errno = 0; ival = strtoul(val, NULL, 16); if (errno) { asprintf(&out, "conversion error(%s)", val); return out; } switch (r->a1) { case F_SETOWN: return print_uid(val, 16); case F_SETFD: if (ival == FD_CLOEXEC) return strdup("FD_CLOEXEC"); /* Fall thru okay. */ case F_SETFL: case F_SETLEASE: case F_GETLEASE: case F_NOTIFY: break; } } else if (strcmp(sys, "openat") == 0) return print_open_flags(val); else if (strcmp(sys, "fchmodat") == 0) return print_mode_short(val); else if (strstr(sys, "chown")) return print_gid(val, 16); else if (strcmp(sys, "setresuid") == 0) return print_uid(val, 16); else if (strcmp(sys, "setresgid") == 0) return print_gid(val, 16); else if (strcmp(sys, "tgkill") == 0) return print_signals(val, 16); else if (strcmp(sys, "mkdirat") == 0) return print_mode_short(val); else if (strcmp(sys, "mmap") == 0) return print_prot(val, 1); else if (strcmp(sys, "mprotect") == 0) return print_prot(val, 0); else if (strcmp(sys, "socket") == 0) return print_socket_proto(val); else if (strcmp(sys, "clone") == 0) return print_clone_flags(val); else if (strcmp(sys, "recvmsg") == 0) return print_recv(val); } return strdup(val); }
static void print_file_info(const struct stat *file_st, const struct print_f *format) { print_mode(file_st->st_mode, format->mode_flag); print_nlink(file_st->st_nlink, format->link_flag); print_uid(file_st->st_uid, format->id_name_flag); print_gid(file_st->st_gid, format->id_name_flag); print_size(file_st->st_size, format->size_flag); print_time(file_st, format->date_flag, format->time_form); return; }
static const char *print_a1(const char *val, const rnode *r) { int machine = r->machine, syscall = r->syscall; const char *sys = audit_syscall_to_name(syscall, machine); if (sys) { if (strcmp(sys, "open") == 0) return print_open_flags(val); else if (strcmp(sys, "epoll_ctl") == 0) return print_epoll_ctl(val); else if (strcmp(sys, "chmod") == 0) return print_mode_short(val); else if (strcmp(sys, "fchmod") == 0) return print_mode_short(val); else if (strstr(sys, "chown")) return print_uid(val, 16); else if (strcmp(sys, "setreuid") == 0) return print_uid(val, 16); else if (strcmp(sys, "setresuid") == 0) return print_uid(val, 16); else if (strcmp(sys, "setregid") == 0) return print_gid(val, 16); else if (strcmp(sys, "setresgid") == 0) return print_gid(val, 16); else if (strcmp(sys, "kill") == 0) return print_signals(val, 16); else if (strcmp(sys, "tkill") == 0) return print_signals(val, 16); else if (strcmp(sys, "mkdir") == 0) return print_mode_short(val); else if (strcmp(sys, "creat") == 0) return print_mode_short(val); else if (strncmp(sys, "fcntl", 5) == 0) return print_fcntl_cmd(val); else if (strcmp(sys, "mknod") == 0) return print_mode(val, 16); else if (strcmp(sys, "socket") == 0) return print_socket_type(val); } return strdup(val); }
void long_entry(const char *file, const struct stat *st) { printf("%s%s %2u %7s %7s %10u %s\n", print_serial(st), mode2str(st->st_mode), st->st_nlink, print_uid(st), print_gid(st), st->st_size, print_name(file, st) ); }
static const char *print_a0(const char *val, const rnode *r) { int machine = r->machine, syscall = r->syscall; const char *sys = audit_syscall_to_name(syscall, machine); if (sys) { if (strcmp(sys, "rt_sigaction") == 0) return print_signals(val, 16); else if (strcmp(sys, "setuid") == 0) return print_uid(val, 16); else if (strcmp(sys, "setreuid") == 0) return print_uid(val, 16); else if (strcmp(sys, "setresuid") == 0) return print_uid(val, 16); else if (strcmp(sys, "setfsuid") == 0) return print_uid(val, 16); else if (strcmp(sys, "setgid") == 0) return print_gid(val, 16); else if (strcmp(sys, "setregid") == 0) return print_gid(val, 16); else if (strcmp(sys, "setresgid") == 0) return print_gid(val, 16); else if (strcmp(sys, "setfsgid") == 0) return print_gid(val, 16); else if (strcmp(sys, "clock_settime") == 0) return print_clock_id(val); else if (strcmp(sys, "personality") == 0) return print_personality(val); else if (strcmp(sys, "ptrace") == 0) return print_ptrace(val); else if (strstr(sys, "etrlimit")) return print_rlimit(val); else if (strcmp(sys, "socket") == 0) return print_socket_domain(val); } return strdup(val); }
static void interpret(char *name, char *val, int comma, int rtype) { int type; while (*name == ' '||*name == '(') name++; /* Do some fixups */ if (rtype == AUDIT_EXECVE && name[0] == 'a') type = T_ESCAPED; else if (rtype == AUDIT_AVC && strcmp(name, "saddr") == 0) type = -1; else if (strcmp(name, "acct") == 0) { // Remove trailing punctuation int len = strlen(val); if (val[len-1] == ':') val[len-1] = 0; if (val[0] == '"') type = T_ESCAPED; else if (is_hex_string(val)) type = T_ESCAPED; else type = -1; } else type = audit_lookup_type(name); switch(type) { case T_UID: print_uid(val); break; case T_GID: print_gid(val); break; case T_SYSCALL: print_syscall(val); break; case T_ARCH: print_arch(val); break; case T_EXIT: print_exit(val); break; case T_ESCAPED: print_escaped(val); break; case T_PERM: print_perm(val); break; case T_MODE: print_mode(val); break; case T_SOCKADDR: print_sockaddr(val); break; case T_FLAGS: print_flags(val); break; case T_PROMISC: print_promiscuous(val); break; case T_CAPABILITY: print_capabilities(val); break; case T_SIGNAL: print_signals(val); break; case T_KEY: print_key(val); break; case T_LIST: print_list(val); break; case T_TTY_DATA: print_tty_data(val); break; default: printf("%s%c", val, comma ? ',' : ' '); } }
// process characters at a time for commands char command(void) { S16 ret=0; IPADDR t; U8 *u; readln_from_a_file((FILE*)stdin, command_buffer, CMD_MAX_SIZE); yprintf("command in = %s\n",command_buffer); if(command_buffer[0]=='?') { // Attach to service printf("Supported Commands:\n"); printf(" r - restart\n"); printf(" e - drop next tunnel rx packet\n"); printf(" m - check status of memory allocator\n"); printf(" p - change port\n"); printf(" s - status\n"); printf(" y - startup proxy\n"); printf(" c - connect\n"); printf(" w - send wakup command (ping server and clients)\n"); printf(" i - send direct message (specify uid and msg)\n"); #if defined(WEB_SSL) printf(" ssl on - enable ssl\n"); printf(" ssl off - disable ssl\n"); #endif printf(" f - files from share target (fl - directory list...)\n"); printf(" d - Get device List (only works if yoicsid client.)\n"); printf("\n q to quit bcaster\n"); printf("\n x to exit right now without cleanup.\n"); } else if(command_buffer[0]=='r') { // Attach to service printf("Reconnect to Weaved Service...\n"); Yoics_reconnect(); //printf("current state %s\n",server_state_string[state]); } else if(command_buffer[0]=='p') { printf("Swapping local port to %d\n",Yoics_Change_Port(0)); } else if(command_buffer[0]=='w') { printf("Wakeup Command\n"); send_ping(PING_STANDARD); Yoics_Session_Force_Ping(); #if defined(TRACE_LOG) traceDump(); // Tracedump just for test #endif } else if (command_buffer[0]=='c') { // connect printf("sending connect request for "); print_uid(Remote_Address); printf("\n"); //Session_create(&Remote_Address, 0); ////+++ remote address right? #if defined(BCASTER) ret=Yoics_Session_create(Remote_Address); if(-1== ret ) { printf("Initiate session create faild\n"); } else if(-2==ret) { printf("Initiate session create faild, no slots left\n"); } else printf("OK ret= %d\n",ret); #endif #if defined(BUILD_SHARE) new_share=Share_Connect(Remote_Address,&share_app_callback); if(0== new_share ) { printf("Initiate session create faild\n"); } else printf("OK ret= %d\n",ret); #endif //yoics_connect(Remote_Address); } else if (command_buffer[0]=='m') { #if ALLOC_DEBUG alloc_check(); #else alloc_stat(); #endif alloc_pool_check(pool); } else if (command_buffer[0]=='s') { #if defined(WEB_SSL) if (!strcmp(command_buffer,"ssl on")) { printf("Turn on SSL\n"); // // Set the web port to ssl port // webPort = WEB_PORT_SSL; // // Enable SSL module Yoics_Set_SSL(SSL_ENABLE); } else if (!strcmp (command_buffer, "ssl off")) { printf("Turn off SSL\n"); // // Set the web port to non SSL port // webPort = WEB_PORT; // // Disable SSL module // Yoics_Set_SSL (SSL_DISABLE); } else #endif { t=Yoics_Get_Current_Server(); u=Yoics_Current_UID(); printf("server state is %d -- 0)Uconn 1)rstart 2)NATchk 3)ReqAuth 4)ID 5)Conn\n",Yoics_Server_Connection_State()); printf(" server is %d.%d.%d.%d:%d\n",t.ipb1,t.ipb2,t.ipb3,t.ipb4,(U16)Yoics_Get_Current_Server_Port()); printf(" key hash is %x:%x\n",secret[0],secret[1]); printf(" server spi is 0x%X\n",(unsigned int)Yoics_Return_Server_SPI()); printf("Our UID is %.2x:%.2x:%.2x:%.2x:%.2x:%.2x:%.2x:%.2x\n", u[0],u[1],u[2],u[3],u[4],u[5],u[6],u[7]); printf("Our Serial Number is %.2x:%.2x:%.2x:%.2x:%.2x:%.2x:%.2x:%.2x\n", serial_num[0],serial_num[1],serial_num[2],serial_num[3],serial_num[4],serial_num[5], serial_num[6],serial_num[7]); t=Yoics_Get_Our_Bound_IP(); printf("Our bound ip:port is %d.%d.%d.%d:%d\n",t.ipb1,t.ipb2,t.ipb3,t.ipb4,Yoics_Get_Our_Bound_Port()); t=Yoics_Get_Our_Mapped_IP(); printf("Our mapped ip:port is %d.%d.%d.%d:%d - UPNP/NAT-PMP mapped port is %d\n",t.ipb1,t.ipb2,t.ipb3,t.ipb4,Yoics_Get_Our_Mapped_Port(),parameters.upnp_port); printf("Last server hearbeat %u seconds ago\n",(U32)((U32)second_count()-(U32)server_hearbeat)); printf("Our NAT type is %d\n",Yoics_Return_NAT_Type()); printf("Forward Port is %d\n\n",parameters.forward_port); alloc_stat(); printf("\nActive Sessions %d\n",active_sessions); printf("\nSession List\n"); Yoics_session_list(); printf("\nProxy Status\n"); proxy_status(); } } else if (command_buffer[0]=='e') { //printf("Drop next tun data packet.\n"); //tunnel_drop(tun_num); } else if (command_buffer[0]=='y') { if(sindex) { if(proxy_local_port==0) proxy_local_port=5959; printf("Starting Proxy on port %d.\n",proxy_local_port); if(proxy_client_start(proxy_ip,proxy_local_port, restrict_connect_ip, sindex)) //if(proxy_start(proxy_ip,proxy_local_port)) printf("Proxy started.\n"); else printf("proxy startup failed.\n"); } else { printf("must be connected to peer first\n"); } } else if (command_buffer[0]=='d') { printf("Device List:\n"); #if !defined(BCASTER) if(YOICS_SERVER_CONNECTED==Yoics_Server_Connection_State()) { DEVICE devlist[10]; char server_name[32]; int tt; IPADDR answer; // Get current server IP and make it into a string answer=Yoics_Get_Current_Server(); sprintf(server_name,"%d.%d.%d.%d",answer.ipb1,answer.ipb2,answer.ipb3,answer.ipb4); tt=Yoics_Get_Device_List(server_name, webPort, 5000, devlist, 10, 1); printf("found %d entries\n",tt); } else printf("Must be connected to service to issue this command\n"); #endif } else if (command_buffer[0]=='z') { U8* crash; yprintf("Force SIG 11:\n"); crash=0; *crash="c"; // This is correct, it forces a crash! Ignore this warning in compile //session_list(); } else if (command_buffer[0]=='q') { ret=EXIT; } else if (command_buffer[0]=='x') { DEBUG4("Free Pool x\n"); free_pool(); #if defined(TRACE_LOG) traceCleanup(); #endif exit(0); ret=EXIT; } else if (command_buffer[0]=='i') { int len; U8* tptr; char tpack[255]; U8 tuid[32]; YOICSPACKET *pkt; pkt=(YOICSPACKET*)tpack; // // Create a map peer // pkt->packet_type = htons(PING_MSG); pkt->source = htons(TARGET_FORWARD); // not done yet len = sizeof(YOICSPACKET); pkt->salt = 0; pkt->spi = 0; tptr=pkt->data; // // Add our UID // tptr=yoics_add_data(tptr,CLIENTUID,my_uid,UID_SIZE); len+=UID_SIZE+sizeof(DATATYPE); // // Add Null Type to finish the message // yoics_add_data(tptr,NULLTYPE,0,0); len+=sizeof(DATATYPE); // // send direct message using packet forwarder // UID_Extract(&tuid[0],"80:00:00:05:46:00:26:e7"); send_packet_forward(tuid, (U8*)tpack ,len); } else { yprintf("unknown command = %s\n",command_buffer); } return((S8)ret); }