it works
This commit is contained in:
parent
cde9a94a7b
commit
e9caf5798a
3 changed files with 154 additions and 0 deletions
3
Makefile
3
Makefile
|
@ -0,0 +1,3 @@
|
||||||
|
|
||||||
|
all:
|
||||||
|
gcc -o ./rsudo rsudo.c
|
9
log.h
Normal file
9
log.h
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
#ifndef __LOG_H__
|
||||||
|
#define __LOG_H__
|
||||||
|
|
||||||
|
#define LOG_DEBUG(m, s) printf("[DEBUG] [%s] %s\n", m, s)
|
||||||
|
#define LOG_INFO(m, s) printf("[INFO] [%s] %s\n", m, s)
|
||||||
|
#define LOG_WARN(m, s) printf("[WARN] [%s] %s\n", m, s)
|
||||||
|
#define LOG_ERROR(m, s) printf("[ERROR] [%s] %s\n", m, s)
|
||||||
|
|
||||||
|
#endif
|
142
rsudo.c
Normal file
142
rsudo.c
Normal file
|
@ -0,0 +1,142 @@
|
||||||
|
/*
|
||||||
|
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 <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <sys/un.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#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);
|
||||||
|
}
|
Loading…
Reference in a new issue