From: Mark Andrews Date: Tue, 26 Feb 2019 02:01:53 +0000 (+1100) Subject: Handle EDQUOT and ENOSPC errors X-Git-Tag: v9.11.7~71^2 X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=28ea43ab35143f38cf11e84e5ed0dfe942092ca4;p=thirdparty%2Fbind9.git Handle EDQUOT and ENOSPC errors (cherry picked from commit 435ae2f29a87034ddcaa6abb2dcca47e024aa62f) --- diff --git a/CHANGES b/CHANGES index 3a82ed2b420..5d6759b103f 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] + 5176. [tests] Remove a dependency on libxml in statschannel system test. [GL #926] diff --git a/lib/isc/include/isc/result.h b/lib/isc/include/isc/result.h index 246aefba511..0fd4971d8b4 100644 --- a/lib/isc/include/isc/result.h +++ b/lib/isc/include/isc/result.h @@ -83,9 +83,13 @@ #define ISC_R_UNSET 61 /*%< unset */ #define ISC_R_MULTIPLE 62 /*%< multiple */ #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 64 +#define ISC_R_NRESULTS 68 ISC_LANG_BEGINDECLS diff --git a/lib/isc/result.c b/lib/isc/result.c index a707c32a28e..abb6ed26a67 100644 --- a/lib/isc/result.c +++ b/lib/isc/result.c @@ -99,6 +99,10 @@ static const char *description[ISC_R_NRESULTS] = { "unset", /*%< 61 */ "multiple", /*%< 62 */ "would block", /*%< 63 */ + "complete", /*%< 64 */ + "crypto failure", /*%< 65 */ + "disc quota", /*%< 66 */ + "disc full", /*%< 67 */ }; static const char *identifier[ISC_R_NRESULTS] = { @@ -166,6 +170,10 @@ static const char *identifier[ISC_R_NRESULTS] = { "ISC_R_UNSET", "ISC_R_MULTIPLE", "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 2f12bcc8bc0..32502e046c4 100644 --- a/lib/isc/unix/errno2result.c +++ b/lib/isc/unix/errno2result.c @@ -55,6 +55,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 83dbb4e4e39..11232470378 100644 --- a/lib/isc/win32/errno2result.c +++ b/lib/isc/win32/errno2result.c @@ -62,6 +62,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: