summaryrefslogtreecommitdiff
path: root/source3/lib/util.c
diff options
context:
space:
mode:
authorGünther Deschner <gd@samba.org>2011-04-29 22:34:56 +0200
committerGünther Deschner <gd@samba.org>2011-05-02 15:03:43 +0200
commitc1f3ff734043082a9488c787324e76a37702f94d (patch)
tree58de7856e8b7cb08647296f5c15e4bb13919d528 /source3/lib/util.c
parent49d5f62b42d821bb8a11b595efb53eb88ec3c570 (diff)
downloadsamba-c1f3ff734043082a9488c787324e76a37702f94d.tar.gz
samba-c1f3ff734043082a9488c787324e76a37702f94d.tar.bz2
samba-c1f3ff734043082a9488c787324e76a37702f94d.zip
s3-util: move valid_share_pathname() to lib/util.c
Guenther
Diffstat (limited to 'source3/lib/util.c')
-rw-r--r--source3/lib/util.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/source3/lib/util.c b/source3/lib/util.c
index 8805197f2d..718500a684 100644
--- a/source3/lib/util.c
+++ b/source3/lib/util.c
@@ -2652,3 +2652,37 @@ int timeval_to_msec(struct timeval t)
{
return t.tv_sec * 1000 + (t.tv_usec+999) / 1000;
}
+
+/*******************************************************************
+ Check a given DOS pathname is valid for a share.
+********************************************************************/
+
+char *valid_share_pathname(TALLOC_CTX *ctx, const char *dos_pathname)
+{
+ char *ptr = NULL;
+
+ if (!dos_pathname) {
+ return NULL;
+ }
+
+ ptr = talloc_strdup(ctx, dos_pathname);
+ if (!ptr) {
+ return NULL;
+ }
+ /* Convert any '\' paths to '/' */
+ unix_format(ptr);
+ ptr = unix_clean_name(ctx, ptr);
+ if (!ptr) {
+ return NULL;
+ }
+
+ /* NT is braindead - it wants a C: prefix to a pathname ! So strip it. */
+ if (strlen(ptr) > 2 && ptr[1] == ':' && ptr[0] != '/')
+ ptr += 2;
+
+ /* Only absolute paths allowed. */
+ if (*ptr != '/')
+ return NULL;
+
+ return ptr;
+}