X-Git-Url: https://git.realraum.at/?p=svn42.git;a=blobdiff_plain;f=door_daemon%2Fdaemon.h;fp=door_daemon%2Fdaemon.h;h=0000000000000000000000000000000000000000;hp=22e0ac000c7a58b7660962b0a222764760779c2f;hb=ce52b2a412383c7958cbd6f0dc8251fbf28b3c08;hpb=4ee2501ff864b8e15202ee814e8bafcc0c2adf6c diff --git a/door_daemon/daemon.h b/door_daemon/daemon.h deleted file mode 100644 index 22e0ac0..0000000 --- a/door_daemon/daemon.h +++ /dev/null @@ -1,173 +0,0 @@ -/* - * uAnytun - * - * uAnytun is a tiny implementation of SATP. Unlike Anytun which is a full - * featured implementation uAnytun has no support for multiple connections - * or synchronisation. It is a small single threaded implementation intended - * to act as a client on small platforms. - * The secure anycast tunneling protocol (satp) defines a protocol used - * for communication between any combination of unicast and anycast - * tunnel endpoints. It has less protocol overhead than IPSec in Tunnel - * mode and allows tunneling of every ETHER TYPE protocol (e.g. - * ethernet, ip, arp ...). satp directly includes cryptography and - * message authentication based on the methodes used by SRTP. It is - * intended to deliver a generic, scaleable and secure solution for - * tunneling and relaying of packets of any protocol. - * - * - * Copyright (C) 2007-2008 Christian Pointner - * - * This file is part of uAnytun. - * - * uAnytun is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * any later version. - * - * uAnytun is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with uAnytun. If not, see . - */ - -#ifndef UANYTUN_daemon_h_INCLUDED -#define UANYTUN_daemon_h_INCLUDED - -#include -#include -#include -#include -#include -#include -#include - -struct priv_info_struct { - struct passwd* pw_; - struct group* gr_; -}; -typedef struct priv_info_struct priv_info_t; - -int priv_init(priv_info_t* priv, const char* username, const char* groupname) -{ - if(!priv) - return -1; - - priv->pw_ = NULL; - priv->gr_ = NULL; - - priv->pw_ = getpwnam(username); - if(!priv->pw_) { - log_printf(ERROR, "unkown user %s", username); - return -1; - } - - if(groupname) - priv->gr_ = getgrnam(groupname); - else - priv->gr_ = getgrgid(priv->pw_->pw_gid); - - if(!priv->gr_) { - log_printf(ERROR, "unkown group %s", groupname); - return -1; - } - - return 0; -} - -int priv_drop(priv_info_t* priv) -{ - if(!priv || !priv->pw_ || !priv->gr_) { - log_printf(ERROR, "privileges not initialized properly"); - return -1; - } - - if(setgid(priv->gr_->gr_gid)) { - log_printf(ERROR, "setgid('%s') failed: %s", priv->gr_->gr_name, strerror(errno)); - return -1; - } - - gid_t gr_list[1]; - gr_list[0] = priv->gr_->gr_gid; - if(setgroups (1, gr_list)) { - log_printf(ERROR, "setgroups(['%s']) failed: %s", priv->gr_->gr_name, strerror(errno)); - return -1; - } - - if(setuid(priv->pw_->pw_uid)) { - log_printf(ERROR, "setuid('%s') failed: %s", priv->pw_->pw_name, strerror(errno)); - return -1; - } - - log_printf(NOTICE, "dropped privileges to %s:%s", priv->pw_->pw_name, priv->gr_->gr_name); - return 0; -} - - -int do_chroot(const char* chrootdir) -{ - if(getuid() != 0) { - log_printf(ERROR, "this programm has to be run as root in order to run in a chroot"); - return -1; - } - - if(chroot(chrootdir)) { - log_printf(ERROR, "can't chroot to %s: %s", chrootdir, strerror(errno)); - return -1; - } - log_printf(NOTICE, "we are in chroot jail (%s) now", chrootdir); - if(chdir("/")) { - log_printf(ERROR, "can't change to /: %s", strerror(errno)); - return -1; - } -} - -void daemonize() -{ - pid_t pid; - - pid = fork(); - if(pid < 0) { - log_printf(ERROR, "daemonizing failed at fork(): %s, exitting", strerror(errno)); - exit(-1); - } - if(pid) exit(0); - - umask(0); - - if(setsid() < 0) { - log_printf(ERROR, "daemonizing failed at setsid(): %s, exitting", strerror(errno)); - exit(-1); - } - - pid = fork(); - if(pid < 0) { - log_printf(ERROR, "daemonizing failed at fork(): %s, exitting", strerror(errno)); - exit(-1); - } - if(pid) exit(0); - - if ((chdir("/")) < 0) { - log_printf(ERROR, "daemonizing failed at chdir(): %s, exitting", strerror(errno)); - exit(-1); - } - - int fd; - for (fd=0;fd<=2;fd++) // close all file descriptors - close(fd); - fd = open("/dev/null",O_RDWR); // stdin - if(fd == -1) - log_printf(WARNING, "can't open stdin (chroot and no link to /dev/null?)"); - else { - if(dup(fd) == -1) // stdout - log_printf(WARNING, "can't open stdout"); - if(dup(fd) == -1) // stderr - log_printf(WARNING, "can't open stderr"); - } - umask(027); -} - -#endif -