From c1f3ff734043082a9488c787324e76a37702f94d Mon Sep 17 00:00:00 2001 From: =?utf8?q?G=C3=BCnther=20Deschner?= Date: Fri, 29 Apr 2011 22:34:56 +0200 Subject: [PATCH] s3-util: move valid_share_pathname() to lib/util.c Guenther --- source3/include/proto.h | 5 +---- source3/lib/util.c | 34 +++++++++++++++++++++++++++++++ source3/rpc_server/srvsvc/srv_srvsvc_nt.c | 34 ------------------------------- 3 files changed, 35 insertions(+), 38 deletions(-) diff --git a/source3/include/proto.h b/source3/include/proto.h index 5ff1c056ceb..aee1da97682 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -736,6 +736,7 @@ bool tevent_req_poll_ntstatus(struct tevent_req *req, NTSTATUS *status); bool any_nt_status_not_ok(NTSTATUS err1, NTSTATUS err2, NTSTATUS *result); int timeval_to_msec(struct timeval t); +char *valid_share_pathname(TALLOC_CTX *ctx, const char *dos_pathname); /* The following definitions come from lib/util_cmdline.c */ @@ -2667,10 +2668,6 @@ void do_drv_upgrade_printer(struct messaging_context *msg, DATA_BLOB *data); void update_monitored_printq_cache(struct messaging_context *msg_ctx); -/* The following definitions come from rpc_server/srv_srvsvc_nt.c */ - -char *valid_share_pathname(TALLOC_CTX *ctx, const char *dos_pathname); - /* The following definitions come from rpc_server/srv_svcctl_nt.c */ bool init_service_op_table( void ); 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; +} diff --git a/source3/rpc_server/srvsvc/srv_srvsvc_nt.c b/source3/rpc_server/srvsvc/srv_srvsvc_nt.c index e51fee89c61..36f4c18226b 100644 --- a/source3/rpc_server/srvsvc/srv_srvsvc_nt.c +++ b/source3/rpc_server/srvsvc/srv_srvsvc_nt.c @@ -1513,40 +1513,6 @@ WERROR _srvsvc_NetShareGetInfo(struct pipes_struct *p, } /******************************************************************* - 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; -} - -/******************************************************************* _srvsvc_NetShareSetInfo. Modify share details. ********************************************************************/ -- 2.11.4.GIT