restrict-process-size.c revision cfbab67e839000b57f32308dd26f9807b5dbe8e3
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen/*
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen Copyright (c) 2002 Timo Sirainen
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen Permission is hereby granted, free of charge, to any person obtaining
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen a copy of this software and associated documentation files (the
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen "Software"), to deal in the Software without restriction, including
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen without limitation the rights to use, copy, modify, merge, publish,
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen distribute, sublicense, and/or sell copies of the Software, and to
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen permit persons to whom the Software is furnished to do so, subject to
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen the following conditions:
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen The above copyright notice and this permission notice shall be
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen included in all copies or substantial portions of the Software.
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen*/
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen#include "lib.h"
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen#include "restrict-process-size.h"
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen#include <unistd.h>
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen#include <sys/time.h>
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen#ifdef HAVE_SYS_RESOURCE_H
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen# include <sys/resource.h>
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen#endif
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainenvoid restrict_process_size(unsigned int size __attr_unused__)
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen{
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen#ifdef HAVE_SETRLIMIT
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen struct rlimit rlim;
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen rlim.rlim_max = rlim.rlim_cur =
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen size > 0 && size < INT_MAX/1024/1024 ?
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen size*1024*1024 : RLIM_INFINITY;
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen if (setrlimit(RLIMIT_AS, &rlim) < 0)
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen i_fatal("setrlimit(RLIMIT_AS, %u): %m", size);
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen#else
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen if (size != 0) {
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen i_warning("Can't restrict process size: "
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen "setrlimit() not supported by system. "
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen "Set the limit to 0 to hide this warning.");
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen }
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen#endif
cfbab67e839000b57f32308dd26f9807b5dbe8e3Timo Sirainen}