aboutsummaryrefslogtreecommitdiff
path: root/src/misc.c
diff options
context:
space:
mode:
authorAnderson Toshiyuki Sasaki <ansasaki@redhat.com>2019-08-01 12:45:01 +0200
committerAndreas Schneider <asn@cryptomilk.org>2019-08-06 16:52:24 +0200
commit7857cd1aa5e8979175b2f68df8cbe70921156e18 (patch)
tree7afc5f8e3f8678e5517c7196dd0687e0a5013962 /src/misc.c
parent3737e5f0e75f355895bf0b46a33b1c1621477226 (diff)
downloadlibssh-7857cd1aa5e8979175b2f68df8cbe70921156e18.tar.gz
libssh-7857cd1aa5e8979175b2f68df8cbe70921156e18.tar.xz
libssh-7857cd1aa5e8979175b2f68df8cbe70921156e18.zip
misc: Introduce internal function ssh_dir_writeable()
The introduced internal function checks if the provided path is for an existing directory which is accessible for writing. Signed-off-by: Anderson Toshiyuki Sasaki <ansasaki@redhat.com> Reviewed-by: Andreas Schneider <asn@cryptomilk.org>
Diffstat (limited to 'src/misc.c')
-rw-r--r--src/misc.c50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/misc.c b/src/misc.c
index 25df5910..19bf28c9 100644
--- a/src/misc.c
+++ b/src/misc.c
@@ -130,6 +130,31 @@ int ssh_file_readaccess_ok(const char *file) {
return 1;
}
+/**
+ * @brief Check if the given path is an existing directory and that is
+ * accessible for writing.
+ *
+ * @param[in] path Path to the directory to be checked
+ *
+ * @return Return 1 if the directory exists and is accessible; 0 otherwise
+ * */
+int ssh_dir_writeable(const char *path)
+{
+ struct _stat buffer;
+ int rc;
+
+ rc = _stat(path, &buffer);
+ if (rc < 0) {
+ return 0;
+ }
+
+ if ((buffer.st_mode & _S_IFDIR) && (buffer.st_mode & _S_IWRITE)) {
+ return 1;
+ }
+
+ return 0;
+}
+
#define SSH_USEC_IN_SEC 1000000LL
#define SSH_SECONDS_SINCE_1601 11644473600LL
@@ -247,6 +272,31 @@ int ssh_file_readaccess_ok(const char *file)
return 1;
}
+/**
+ * @brief Check if the given path is an existing directory and that is
+ * accessible for writing.
+ *
+ * @param[in] path Path to the directory to be checked
+ *
+ * @return Return 1 if the directory exists and is accessible; 0 otherwise
+ * */
+int ssh_dir_writeable(const char *path)
+{
+ struct stat buffer;
+ int rc;
+
+ rc = stat(path, &buffer);
+ if (rc < 0) {
+ return 0;
+ }
+
+ if (S_ISDIR(buffer.st_mode) && (buffer.st_mode & S_IWRITE)) {
+ return 1;
+ }
+
+ return 0;
+}
+
char *ssh_get_local_username(void)
{
struct passwd pwd;