summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changelog1
-rw-r--r--quota.h4
-rw-r--r--quota_nld.c48
3 files changed, 42 insertions, 11 deletions
diff --git a/Changelog b/Changelog
index 2e9efff..ee9c949 100644
--- a/Changelog
+++ b/Changelog
@@ -1,4 +1,5 @@
Changes in quota-tools from 3.16 to 3.17
+* implemented writing of messages that user got below hard/soft limits to quota_nld (Jan Kara)
* use PKG_CHECK_MODULES to check for DBUS (Ladislav Michnovic)
* Implement setting of charset for emails sent by warnquota (Michael Meskes)
* Added quota_nld to the list of installed programs (Jan Kara)
diff --git a/quota.h b/quota.h
index ca3db7b..e512677 100644
--- a/quota.h
+++ b/quota.h
@@ -112,6 +112,10 @@ struct if_dqinfo {
#define QUOTA_NL_BHARDWARN 4 /* Block hardlimit reached */
#define QUOTA_NL_BSOFTLONGWARN 5 /* Block grace time expired */
#define QUOTA_NL_BSOFTWARN 6 /* Block softlimit reached */
+#define QUOTA_NL_IHARDBELOW 7 /* Usage got below inode hardlimit */
+#define QUOTA_NL_ISOFTBELOW 8 /* Usage got below inode softlimit */
+#define QUOTA_NL_BHARDBELOW 9 /* Usage got below block hardlimit */
+#define QUOTA_NL_BSOFTBELOW 10 /* Usage got below block softlimit */
enum {
QUOTA_NL_C_UNSPEC,
diff --git a/quota_nld.c b/quota_nld.c
index 6276fc1..6c08d56 100644
--- a/quota_nld.c
+++ b/quota_nld.c
@@ -67,6 +67,7 @@ static struct nla_policy quota_nl_warn_cmd_policy[QUOTA_NL_A_MAX+1] = {
#define FL_NODBUS 1
#define FL_NOCONSOLE 2
#define FL_NODAEMON 4
+#define FL_PRINTBELOW 8
int flags;
DBusConnection *dhandle;
@@ -77,6 +78,7 @@ void show_help(void)
-h --help shows this text\n\
-V --version shows version information\n\
-C --no-console do not try to write messages to console\n\
+ -b --print-below write to console also information about getting below hard/soft limits\n\
-D --no-dbus do not try to write messages to DBUS\n\
-F --foreground run daemon in foreground\n"), progname);
}
@@ -85,7 +87,7 @@ static void parse_options(int argc, char **argv)
{
int opt;
- while ((opt = getopt_long(argc, argv, "VhDCF", options, NULL)) >= 0) {
+ while ((opt = getopt_long(argc, argv, "VhDCFb", options, NULL)) >= 0) {
switch (opt) {
case 'V':
version();
@@ -102,6 +104,9 @@ static void parse_options(int argc, char **argv)
case 'F':
flags |= FL_NODAEMON;
break;
+ case 'b':
+ flags |= FL_PRINTBELOW;
+ break;
default:
errstr(_("Unknown option '%c'.\n"), opt);
show_help();
@@ -231,6 +236,11 @@ static void write_console_warning(struct quota_warning *warn)
char warnbuf[WARN_BUF_SIZE];
char *level, *msg;
+ if ((warn->warntype == QUOTA_NL_IHARDBELOW ||
+ warn->warntype == QUOTA_NL_ISOFTBELOW ||
+ warn->warntype == QUOTA_NL_BHARDBELOW ||
+ warn->warntype == QUOTA_NL_BSOFTBELOW) && !(flags & FL_PRINTBELOW))
+ return;
uid2user(warn->caused_id, user);
strcpy(dev, "/dev/");
@@ -260,31 +270,47 @@ static void write_console_warning(struct quota_warning *warn)
return;
}
id2name(warn->excess_id, warn->qtype, user);
- if (warn->warntype == QUOTA_NL_ISOFTWARN || warn->warntype == QUOTA_NL_BSOFTWARN)
- level = "Warning";
+ if (warn->warntype == QUOTA_NL_ISOFTWARN ||
+ warn->warntype == QUOTA_NL_BSOFTWARN)
+ level = _("Warning");
+ else if (warn->warntype == QUOTA_NL_IHARDWARN ||
+ warn->warntype == QUOTA_NL_BHARDWARN)
+ level = _("Error");
else
- level = "Error";
+ level = _("Info");
switch (warn->warntype) {
case QUOTA_NL_IHARDWARN:
- msg = "file limit reached";
+ msg = _("file limit reached");
break;
case QUOTA_NL_ISOFTLONGWARN:
- msg = "file quota exceeded too long";
+ msg = _("file quota exceeded too long");
break;
case QUOTA_NL_ISOFTWARN:
- msg = "file quota exceeded";
+ msg = _("file quota exceeded");
break;
case QUOTA_NL_BHARDWARN:
- msg = "block limit reached";
+ msg = _("block limit reached");
break;
case QUOTA_NL_BSOFTLONGWARN:
- msg = "block quota exceeded too long";
+ msg = _("block quota exceeded too long");
break;
case QUOTA_NL_BSOFTWARN:
- msg = "block quota exceeded";
+ msg = _("block quota exceeded");
+ break;
+ case QUOTA_NL_IHARDBELOW:
+ msg = _("got below file limit");
+ break;
+ case QUOTA_NL_ISOFTBELOW:
+ msg = _("got below file quota");
+ break;
+ case QUOTA_NL_BHARDBELOW:
+ msg = _("got below block limit");
+ break;
+ case QUOTA_NL_BSOFTBELOW:
+ msg = _("got below block quota");
break;
default:
- msg = "unknown quota warning";
+ msg = _("unknown quota warning");
}
sprintf(warnbuf, "%s: %s %s %s.\r\n", level, type2name(warn->qtype), user, msg);
if (write_all(fd, warnbuf, strlen(warnbuf)) < 0)