From b7f7adb2e1068d1c382f774e54d1b495e6345938 Mon Sep 17 00:00:00 2001 From: James Peach Date: Wed, 8 Feb 2006 05:13:11 +0000 Subject: r13387: Make sure smbcli_parse_unc reports a failure for strings of the form //server. Make sure failure cases are well-defined. (This used to be commit e0020df66bf38873eaaacb95cadac55e17f432be) --- source4/libcli/cliconnect.c | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) (limited to 'source4/libcli') diff --git a/source4/libcli/cliconnect.c b/source4/libcli/cliconnect.c index 9a5236a661..8103208a26 100644 --- a/source4/libcli/cliconnect.c +++ b/source4/libcli/cliconnect.c @@ -177,25 +177,29 @@ struct smbcli_state *smbcli_state_init(TALLOC_CTX *mem_ctx) } /* Insert a NULL at the first separator of the given path and return a pointer - * to the location it was inserted at. + * to the remainder of the string. */ static char * terminate_path_at_separator(char * path) { char * p; + if (!path) { + return NULL; + } + if ((p = strchr_m(path, '/'))) { - *p = '\0'; - return(p); + *p = '\0'; + return p + 1; } if ((p = strchr_m(path, '\\'))) { - *p = '\0'; - return(p); + *p = '\0'; + return p + 1; } - /* No terminator. Return pointer to the last byte. */ - return(p + strlen(path)); + /* No separator. */ + return NULL; } /* @@ -206,6 +210,8 @@ BOOL smbcli_parse_unc(const char *unc_name, TALLOC_CTX *mem_ctx, { char *p; + *hostname = *sharename = NULL; + if (strncmp(unc_name, "\\\\", 2) && strncmp(unc_name, "//", 2)) { return False; @@ -214,10 +220,19 @@ BOOL smbcli_parse_unc(const char *unc_name, TALLOC_CTX *mem_ctx, *hostname = talloc_strdup(mem_ctx, &unc_name[2]); p = terminate_path_at_separator(*hostname); - *sharename = talloc_strdup(mem_ctx, p+1); - p = terminate_path_at_separator(*sharename); + if (p && *p) { + *sharename = talloc_strdup(mem_ctx, p); + terminate_path_at_separator(*sharename); + } - return True; + if (*hostname && *sharename) { + return True; + } + + talloc_free(*hostname); + talloc_free(*sharename); + *hostname = *sharename = NULL; + return False; } -- cgit