From 435ae2f29a87034ddcaa6abb2dcca47e024aa62f Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Tue, 26 Feb 2019 13:01:53 +1100 Subject: [PATCH] Handle EDQUOT and ENOSPC errors --- CHANGES | 3 +++ lib/isc/include/isc/result.h | 4 +++- lib/isc/result.c | 4 ++++ lib/isc/unix/errno2result.c | 6 ++++++ lib/isc/win32/errno2result.c | 2 ++ 5 files changed, 18 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index e53d3994cc..f324517f47 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,6 @@ +5178. [bug] Handle EDQUOT (disk quota) and ENOSPC (disk full) + errors when writing files. [GL #902] + 5177. [func] Add the ability to specify in named.conf whether a response-policy zone's SOA record should be added to the additional section (add-soa yes/no). [GL #865] diff --git a/lib/isc/include/isc/result.h b/lib/isc/include/isc/result.h index d0ece05570..36792fa0dc 100644 --- a/lib/isc/include/isc/result.h +++ b/lib/isc/include/isc/result.h @@ -85,9 +85,11 @@ #define ISC_R_WOULDBLOCK 63 /*%< would block */ #define ISC_R_COMPLETE 64 /*%< complete */ #define ISC_R_CRYPTOFAILURE 65 /*%< cryptography library failure */ +#define ISC_R_DISCQUOTA 66 /*%< disc quota */ +#define ISC_R_DISCFULL 67 /*%< disc full */ /*% Not a result code: the number of results. */ -#define ISC_R_NRESULTS 66 +#define ISC_R_NRESULTS 68 ISC_LANG_BEGINDECLS diff --git a/lib/isc/result.c b/lib/isc/result.c index 67a0118703..7eb4284022 100644 --- a/lib/isc/result.c +++ b/lib/isc/result.c @@ -99,6 +99,8 @@ static const char *description[ISC_R_NRESULTS] = { "would block", /*%< 63 */ "complete", /*%< 64 */ "crypto failure", /*%< 65 */ + "disc quota", /*%< 66 */ + "disc full", /*%< 67 */ }; static const char *identifier[ISC_R_NRESULTS] = { @@ -168,6 +170,8 @@ static const char *identifier[ISC_R_NRESULTS] = { "ISC_R_WOULDBLOCK", "ISC_R_COMPLETE", "ISC_R_CRYPTOFAILURE", + "ISC_R_DISCQUOTA", + "ISC_R_DISCFULL", }; #define ISC_RESULT_RESULTSET 2 diff --git a/lib/isc/unix/errno2result.c b/lib/isc/unix/errno2result.c index d72d56f7e9..35689e4722 100644 --- a/lib/isc/unix/errno2result.c +++ b/lib/isc/unix/errno2result.c @@ -57,6 +57,12 @@ isc___errno2result(int posixerrno, bool dolog, case ENFILE: case EMFILE: return (ISC_R_TOOMANYOPENFILES); +#ifdef EDQUOT + case EDQUOT: + return (ISC_R_DISCQUOTA); +#endif + case ENOSPC: + return (ISC_R_DISCFULL); #ifdef EOVERFLOW case EOVERFLOW: return (ISC_R_RANGE); diff --git a/lib/isc/win32/errno2result.c b/lib/isc/win32/errno2result.c index d09fc2b233..59af4cae88 100644 --- a/lib/isc/win32/errno2result.c +++ b/lib/isc/win32/errno2result.c @@ -63,6 +63,8 @@ isc__errno2resultx(int posixerrno, bool dolog, case EMFILE: case WSAEMFILE: return (ISC_R_TOOMANYOPENFILES); + case ENOSPC: + return (ISC_R_DISCFULL); case ERROR_CANCELLED: return (ISC_R_CANCELED); case ERROR_CONNECTION_REFUSED: