From owner-svn-src-stable-10@FreeBSD.ORG Sun Jun 21 06:40:45 2015 Return-Path: Delivered-To: svn-src-stable-10@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id D6BF5E3E; Sun, 21 Jun 2015 06:40:44 +0000 (UTC) (envelope-from trasz@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id B76CE358; Sun, 21 Jun 2015 06:40:44 +0000 (UTC) (envelope-from trasz@FreeBSD.org) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id t5L6eiV2052483; Sun, 21 Jun 2015 06:40:44 GMT (envelope-from trasz@FreeBSD.org) Received: (from trasz@localhost) by svn.freebsd.org (8.14.9/8.14.9/Submit) id t5L6eijW052482; Sun, 21 Jun 2015 06:40:44 GMT (envelope-from trasz@FreeBSD.org) Message-Id: <201506210640.t5L6eijW052482@svn.freebsd.org> X-Authentication-Warning: svn.freebsd.org: trasz set sender to trasz@FreeBSD.org using -f From: Edward Tomasz Napierala Date: Sun, 21 Jun 2015 06:40:44 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Subject: svn commit: r284667 - stable/10/usr.bin/rctl X-SVN-Group: stable-10 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable-10@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for only the 10-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 21 Jun 2015 06:40:45 -0000 Author: trasz Date: Sun Jun 21 06:40:43 2015 New Revision: 284667 URL: https://svnweb.freebsd.org/changeset/base/284667 Log: MFC r282236: Make rctl(8) more user-friendly when RACCT/RCTL is disabled for some reason. Sponsored by: The FreeBSD Foundation Modified: stable/10/usr.bin/rctl/rctl.c Directory Properties: stable/10/ (props changed) Modified: stable/10/usr.bin/rctl/rctl.c ============================================================================== --- stable/10/usr.bin/rctl/rctl.c Sun Jun 21 06:36:54 2015 (r284666) +++ stable/10/usr.bin/rctl/rctl.c Sun Jun 21 06:40:43 2015 (r284667) @@ -34,6 +34,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include #include #include @@ -305,13 +306,37 @@ print_rules(char *rules, int hflag, int } static void +enosys(void) +{ + int error, racct_enable; + size_t racct_enable_len; + + racct_enable_len = sizeof(racct_enable); + error = sysctlbyname("kern.racct.enable", + &racct_enable, &racct_enable_len, NULL, 0); + + if (error != 0) { + if (errno == ENOENT) + errx(1, "RACCT/RCTL support not present in kernel; see rctl(8) for details."); + + err(1, "sysctlbyname"); + } + + if (racct_enable == 0) + errx(1, "RACCT/RCTL present, but disabled; enable using kern.racct.enable=1 tunable"); +} + +static void add_rule(char *rule) { int error; error = rctl_add_rule(rule, strlen(rule) + 1, NULL, 0); - if (error != 0) + if (error != 0) { + if (errno == ENOSYS) + enosys(); err(1, "rctl_add_rule"); + } free(rule); } @@ -330,8 +355,11 @@ show_limits(char *filter, int hflag, int error = rctl_get_limits(filter, strlen(filter) + 1, outbuf, outbuflen); - if (error && errno != ERANGE) + if (error && errno != ERANGE) { + if (errno == ENOSYS) + enosys(); err(1, "rctl_get_limits"); + } } while (error && errno == ERANGE); print_rules(outbuf, hflag, nflag); @@ -345,8 +373,11 @@ remove_rule(char *filter) int error; error = rctl_remove_rule(filter, strlen(filter) + 1, NULL, 0); - if (error != 0) + if (error != 0) { + if (errno == ENOSYS) + enosys(); err(1, "rctl_remove_rule"); + } free(filter); } @@ -399,8 +430,11 @@ show_usage(char *filter, int hflag) error = rctl_get_racct(filter, strlen(filter) + 1, outbuf, outbuflen); - if (error && errno != ERANGE) + if (error && errno != ERANGE) { + if (errno == ENOSYS) + enosys(); err(1, "rctl_get_racct"); + } } while (error && errno == ERANGE); while ((tmp = strsep(&outbuf, ",")) != NULL) { @@ -439,8 +473,11 @@ show_rules(char *filter, int hflag, int err(1, "realloc"); error = rctl_get_rules(filter, filterlen, outbuf, outbuflen); - if (error && errno != ERANGE) + if (error && errno != ERANGE) { + if (errno == ENOSYS) + enosys(); err(1, "rctl_get_rules"); + } } while (error && errno == ERANGE); print_rules(outbuf, hflag, nflag);