diff options
author | Günther Deschner <gd@samba.org> | 2011-04-29 22:34:56 +0200 |
---|---|---|
committer | Günther Deschner <gd@samba.org> | 2011-05-02 15:03:43 +0200 |
commit | c1f3ff734043082a9488c787324e76a37702f94d (patch) | |
tree | 58de7856e8b7cb08647296f5c15e4bb13919d528 /source3/lib | |
parent | 49d5f62b42d821bb8a11b595efb53eb88ec3c570 (diff) | |
download | samba-c1f3ff734043082a9488c787324e76a37702f94d.tar.gz samba-c1f3ff734043082a9488c787324e76a37702f94d.tar.xz samba-c1f3ff734043082a9488c787324e76a37702f94d.zip |
s3-util: move valid_share_pathname() to lib/util.c
Guenther
Diffstat (limited to 'source3/lib')
-rw-r--r-- | source3/lib/util.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/source3/lib/util.c b/source3/lib/util.c index 8805197f2d8..718500a684f 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; +} |