/* rsudo - request sudo this file and distributions are memework property. unauthorized distribution of this file and related files (like header files) is strictly prohibited by people other than the owner. Copyright (C) Luna Mendes 2017 */ #include #include #include #include #include #include "log.h" const char* sock_path = "/home/luna/local.git/memed/memed.succ"; struct header_s { unsigned int len; int op; }; char *join(const char* s1, const char* s2) { char* result = malloc(strlen(s1) + strlen(s2) + 1); if (result) { strcpy(result, s1); strcat(result, s2); } return result; } int main(int argc, char **argv) { // the idea here is to open the socket // send a message to it and run asap struct sockaddr_un addr; // receiving data from socket struct header_s header; char buffer[1024]; // fd file descriptor // rc read count int fd, rc; if ( (fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) { perror("socket error"); exit(-1); } memset(&addr, 0, sizeof(addr)); addr.sun_family = AF_UNIX; strncpy(addr.sun_path, sock_path, sizeof(addr.sun_path)-1); LOG_INFO("main", "connecting"); if ( connect(fd, (struct sockaddr*)&addr, sizeof(addr)) == -1 ) { perror("connect error"); exit(-1); } // read the hello // We start by reading and filling our header if ((rc = recv(fd, &header, 8, 0)) < 0) { perror("recv"); exit(-1); } printf("%d %d\n", header.len, header.op); // Then we proceed to, with the data from header, // read the message if ((rc = recv(fd, &buffer, header.len, 0)) < 0) { perror("recv"); exit(-1); } if(strlen(buffer) - 1 != header.len) { printf("%u %d\n", strlen(buffer), header.len); LOG_ERROR("main", "hello length != header length"); exit(-1); } if(header.op != 0) { LOG_ERROR("main", "incorrect header op"); exit(-1); } LOG_INFO("main", "finished hello"); char *tot = ""; for(int i = 1; i < argc; i++) { char *arg = argv[i]; tot = join(tot, arg); if(i != argc - 1) tot = join(tot, " "); } printf("sending command: %s\n", tot); // encode our data struct header_s send_h; send_h.len = strlen(tot); send_h.op = 2; if (send(fd, &send_h, sizeof(send_h), 0) < 0) { perror("send req"); exit(-1); } if (send(fd, tot, strlen(tot), 0) < 0) { perror("send req total"); exit(-1); } shutdown(fd, SHUT_RDWR); printf("Successfully communicated your command to memed!\n"); close(fd); exit(0); }