From f0134a602fa0216b88690908471eaa50e1088629 Mon Sep 17 00:00:00 2001 From: Olaf Rempel Date: Sat, 5 Jan 2008 18:54:05 +0100 Subject: [PATCH] old patch from ove --- cachesyncd.c | 30 ++++++++++++++++++++++++------ cachesyncd.conf | 2 +- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/cachesyncd.c b/cachesyncd.c index 96fb882..443b466 100644 --- a/cachesyncd.c +++ b/cachesyncd.c @@ -23,6 +23,7 @@ #include #include #include +#include #include #include @@ -37,7 +38,7 @@ #define DEFAULT_CONFIG "cachesyncd.conf" #define DEFAULT_LOGFILE "cachesyncd.log" - +#define DEFAULT_USER "httpd" #define BUF_SIZE 256 static struct option opts[] = { @@ -84,7 +85,8 @@ int msock_read_callback(int fd, void *privdata) } else if (!strncmp(privdata, "DELETE ", 7)) { log_print(LOG_DEBUG, "delete '%s'", privdata +7); - //delete_file(buf +7); + if (unlink(privdata +7)) + log_print(LOG_ERROR, "delete '%s' failed", privdata +7); } else { log_print(LOG_DEBUG, "recv unknown cmd via multicast: '%s'", privdata); @@ -99,6 +101,20 @@ int msock_keepalive_timeout(void *privdata) return 0; } +void drop_privileges(char *user) +{ + struct passwd *user_info; + user_info = getpwnam(user); + if (user_info == NULL) { + log_print(LOG_ERROR,"drop_privileges(): user '%s' not found", user); + } else { + if (setregid(user_info->pw_gid, user_info->pw_gid)) + log_print(LOG_ERROR, "setgid() failed"); + if (setreuid(user_info->pw_uid, user_info->pw_uid)) + log_print(LOG_ERROR, "setuid() failed"); + } +} + int main(int argc, char *argv[]) { char *config = DEFAULT_CONFIG; @@ -158,14 +174,16 @@ int main(int argc, char *argv[]) return -1; } - usock = sock_init(); - if (usock < 0) - return -1; - msock = mcast_init(); if (msock < 0) return -1; + drop_privileges(config_get_string("global", "user", DEFAULT_USER)); + + usock = sock_init(); + if (usock < 0) + return -1; + event_add_readfd(usock, usock_accept_callback, buf); event_add_readfd(msock, msock_read_callback, buf); diff --git a/cachesyncd.conf b/cachesyncd.conf index 5dcac01..9a14d7f 100644 --- a/cachesyncd.conf +++ b/cachesyncd.conf @@ -3,7 +3,7 @@ user httpd # unix domain socket location -socket ./cachesync.sock +socket /tmp/cachesync.sock # bind to multicast interface mcastdev eth0