diff options
| author | 2019-12-17 01:46:30 +0000 | |
|---|---|---|
| committer | 2019-12-17 01:46:30 +0000 | |
| commit | 3ef32adf69b1fed9e0363dd1f2116627f09e6af3 (patch) | |
| tree | 4d9d566691647dad37619d7bd9d1c7114f554bbe /usr.sbin/bind/lib/isc/unix/file.c | |
| parent | Add support for NCT6775F, NCT5104D, NCT6779D, NCT679[1235]D sensors. (diff) | |
| download | wireguard-openbsd-3ef32adf69b1fed9e0363dd1f2116627f09e6af3.tar.xz wireguard-openbsd-3ef32adf69b1fed9e0363dd1f2116627f09e6af3.zip | |
update to 9.10.8-P1, last isc-licensed release
Diffstat (limited to 'usr.sbin/bind/lib/isc/unix/file.c')
| -rw-r--r-- | usr.sbin/bind/lib/isc/unix/file.c | 35 |
1 files changed, 21 insertions, 14 deletions
diff --git a/usr.sbin/bind/lib/isc/unix/file.c b/usr.sbin/bind/lib/isc/unix/file.c index 75980292713..d43e4f7aaae 100644 --- a/usr.sbin/bind/lib/isc/unix/file.c +++ b/usr.sbin/bind/lib/isc/unix/file.c @@ -1,6 +1,5 @@ /* - * Copyright (C) 2004, 2005, 2007, 2009, 2011-2016 Internet Systems Consortium, Inc. ("ISC") - * Copyright (C) 2000-2002 Internet Software Consortium. + * Copyright (C) Internet Systems Consortium, Inc. ("ISC") * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -44,7 +43,7 @@ * SUCH DAMAGE. */ -/* $Id: file.c,v 1.6 2019/12/16 16:16:27 deraadt Exp $ */ +/* $Id: file.c,v 1.7 2019/12/17 01:46:37 sthen Exp $ */ /*! \file */ @@ -239,17 +238,18 @@ isc_file_template(const char *path, const char *templet, char *buf, s = strrchr(path, '/'); if (s != NULL) { - if ((s - path + 1 + strlen(templet) + 1) > buflen) + size_t prefixlen = s - path + 1; + if ((prefixlen + strlen(templet) + 1) > buflen) return (ISC_R_NOSPACE); - strncpy(buf, path, s - path + 1); - buf[s - path + 1] = '\0'; - strcat(buf, templet); + /* Copy 'prefixlen' bytes and NUL terminate. */ + strlcpy(buf, path, ISC_MIN(prefixlen + 1, buflen)); + strlcat(buf, templet, buflen); } else { if ((strlen(templet) + 1) > buflen) return (ISC_R_NOSPACE); - strcpy(buf, templet); + strlcpy(buf, templet, buflen); } return (ISC_R_SUCCESS); @@ -546,15 +546,17 @@ dir_current(char *dirname, size_t length) { cwd = getcwd(dirname, length); if (cwd == NULL) { - if (errno == ERANGE) + if (errno == ERANGE) { result = ISC_R_NOSPACE; - else + } else { result = isc__errno2result(errno); + } } else { - if (strlen(dirname) + 1 == length) + if (strlen(dirname) + 1 == length) { result = ISC_R_NOSPACE; - else if (dirname[1] != '\0') - strcat(dirname, "/"); + } else if (dirname[1] != '\0') { + strlcat(dirname, "/", length); + } } return (result); @@ -568,7 +570,7 @@ isc_file_absolutepath(const char *filename, char *path, size_t pathlen) { return (result); if (strlen(path) + strlen(filename) + 1 > pathlen) return (ISC_R_NOSPACE); - strcat(path, filename); + strlcat(path, filename, pathlen); return (ISC_R_SUCCESS); } @@ -701,3 +703,8 @@ isc_file_munmap(void *addr, size_t len) { return (0); #endif } + +isc_boolean_t +isc_file_isdirwritable(const char *path) { + return (ISC_TF(access(path, W_OK|X_OK) == 0)); +} |
