From 534cf516ed17d90bbd851fd8e190811a055aa5f0 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 16 Apr 2013 12:09:41 -0700 Subject: [PATCH] Add the ability to parse out the port to SMBC_parse_path(). Signed-off-by: Jeremy Allison Reviewed-by: David Disseldorp --- source3/include/libsmb_internal.h | 1 + source3/libsmb/libsmb_dir.c | 16 ++++++++++++++++ source3/libsmb/libsmb_file.c | 12 ++++++++++++ source3/libsmb/libsmb_path.c | 24 ++++++++++++++++++++++++ source3/libsmb/libsmb_printjob.c | 6 ++++++ source3/libsmb/libsmb_stat.c | 4 ++++ source3/libsmb/libsmb_xattr.c | 6 ++++++ 7 files changed, 69 insertions(+) diff --git a/source3/include/libsmb_internal.h b/source3/include/libsmb_internal.h index aba159ada24..bd9143892cd 100644 --- a/source3/include/libsmb_internal.h +++ b/source3/include/libsmb_internal.h @@ -415,6 +415,7 @@ SMBC_parse_path(TALLOC_CTX *ctx, const char *fname, char **pp_workgroup, char **pp_server, + uint16_t *p_port, char **pp_share, char **pp_path, char **pp_user, diff --git a/source3/libsmb/libsmb_dir.c b/source3/libsmb/libsmb_dir.c index 700196c10c6..5428b17258d 100644 --- a/source3/libsmb/libsmb_dir.c +++ b/source3/libsmb/libsmb_dir.c @@ -378,6 +378,7 @@ SMBC_opendir_ctx(SMBCCTX *context, char *workgroup = NULL; char *path = NULL; uint16 mode; + uint16_t port = 0; char *p = NULL; SMBCSRV *srv = NULL; SMBCFILE *dir = NULL; @@ -404,6 +405,7 @@ SMBC_opendir_ctx(SMBCCTX *context, fname, &workgroup, &server, + &port, &share, &path, &user, @@ -1161,6 +1163,7 @@ SMBC_mkdir_ctx(SMBCCTX *context, char *workgroup = NULL; char *path = NULL; char *targetpath = NULL; + uint16_t port = 0; struct cli_state *targetcli = NULL; TALLOC_CTX *frame = talloc_stackframe(); NTSTATUS status; @@ -1184,6 +1187,7 @@ SMBC_mkdir_ctx(SMBCCTX *context, fname, &workgroup, &server, + &port, &share, &path, &user, @@ -1270,6 +1274,7 @@ SMBC_rmdir_ctx(SMBCCTX *context, char *workgroup = NULL; char *path = NULL; char *targetpath = NULL; + uint16_t port = 0; struct cli_state *targetcli = NULL; TALLOC_CTX *frame = talloc_stackframe(); NTSTATUS status; @@ -1293,6 +1298,7 @@ SMBC_rmdir_ctx(SMBCCTX *context, fname, &workgroup, &server, + &port, &share, &path, &user, @@ -1557,6 +1563,7 @@ SMBC_chmod_ctx(SMBCCTX *context, struct cli_state *targetcli = NULL; char *path = NULL; uint16 mode; + uint16_t port = 0; TALLOC_CTX *frame = talloc_stackframe(); NTSTATUS status; @@ -1580,6 +1587,7 @@ SMBC_chmod_ctx(SMBCCTX *context, fname, &workgroup, &server, + &port, &share, &path, &user, @@ -1648,6 +1656,7 @@ SMBC_utimes_ctx(SMBCCTX *context, char *path = NULL; time_t access_time; time_t write_time; + uint16_t port = 0; TALLOC_CTX *frame = talloc_stackframe(); if (!context || !context->internal->initialized) { @@ -1696,6 +1705,7 @@ SMBC_utimes_ctx(SMBCCTX *context, fname, &workgroup, &server, + &port, &share, &path, &user, @@ -1748,6 +1758,7 @@ SMBC_unlink_ctx(SMBCCTX *context, char *workgroup = NULL; char *path = NULL; char *targetpath = NULL; + uint16_t port = 0; struct cli_state *targetcli = NULL; SMBCSRV *srv = NULL; TALLOC_CTX *frame = talloc_stackframe(); @@ -1773,6 +1784,7 @@ SMBC_unlink_ctx(SMBCCTX *context, fname, &workgroup, &server, + &port, &share, &path, &user, @@ -1886,6 +1898,8 @@ SMBC_rename_ctx(SMBCCTX *ocontext, struct cli_state *targetcli1 = NULL; struct cli_state *targetcli2 = NULL; SMBCSRV *srv = NULL; + uint16_t port1 = 0; + uint16_t port2 = 0; TALLOC_CTX *frame = talloc_stackframe(); NTSTATUS status; @@ -1911,6 +1925,7 @@ SMBC_rename_ctx(SMBCCTX *ocontext, oname, &workgroup, &server1, + &port1, &share1, &path1, &user1, @@ -1935,6 +1950,7 @@ SMBC_rename_ctx(SMBCCTX *ocontext, nname, NULL, &server2, + &port2, &share2, &path2, &user2, diff --git a/source3/libsmb/libsmb_file.c b/source3/libsmb/libsmb_file.c index 9521542cb27..06d09ac7bd4 100644 --- a/source3/libsmb/libsmb_file.c +++ b/source3/libsmb/libsmb_file.c @@ -49,6 +49,7 @@ SMBC_open_ctx(SMBCCTX *context, SMBCSRV *srv = NULL; SMBCFILE *file = NULL; uint16_t fd; + uint16_t port = 0; NTSTATUS status = NT_STATUS_OBJECT_PATH_INVALID; TALLOC_CTX *frame = talloc_stackframe(); @@ -69,6 +70,7 @@ SMBC_open_ctx(SMBCCTX *context, fname, &workgroup, &server, + &port, &share, &path, &user, @@ -230,6 +232,7 @@ SMBC_read_ctx(SMBCCTX *context, char *path = NULL; char *targetpath = NULL; struct cli_state *targetcli = NULL; + uint16_t port = 0; TALLOC_CTX *frame = talloc_stackframe(); NTSTATUS status; @@ -274,6 +277,7 @@ SMBC_read_ctx(SMBCCTX *context, file->fname, NULL, &server, + &port, &share, &path, &user, @@ -327,6 +331,7 @@ SMBC_write_ctx(SMBCCTX *context, char *path = NULL; char *targetpath = NULL; struct cli_state *targetcli = NULL; + uint16_t port = 0; TALLOC_CTX *frame = talloc_stackframe(); NTSTATUS status; @@ -360,6 +365,7 @@ SMBC_write_ctx(SMBCCTX *context, file->fname, NULL, &server, + &port, &share, &path, &user, @@ -408,6 +414,7 @@ SMBC_close_ctx(SMBCCTX *context, char *server = NULL, *share = NULL, *user = NULL, *password = NULL; char *path = NULL; char *targetpath = NULL; + uint16_t port = 0; struct cli_state *targetcli = NULL; TALLOC_CTX *frame = talloc_stackframe(); NTSTATUS status; @@ -436,6 +443,7 @@ SMBC_close_ctx(SMBCCTX *context, file->fname, NULL, &server, + &port, &share, &path, &user, @@ -684,6 +692,7 @@ SMBC_lseek_ctx(SMBCCTX *context, char *path = NULL; char *targetpath = NULL; struct cli_state *targetcli = NULL; + uint16_t port = 0; TALLOC_CTX *frame = talloc_stackframe(); NTSTATUS status; @@ -719,6 +728,7 @@ SMBC_lseek_ctx(SMBCCTX *context, file->fname, NULL, &server, + &port, &share, &path, &user, @@ -782,6 +792,7 @@ SMBC_ftruncate_ctx(SMBCCTX *context, char *password = NULL; char *path = NULL; char *targetpath = NULL; + uint16_t port = 0; struct cli_state *targetcli = NULL; TALLOC_CTX *frame = talloc_stackframe(); NTSTATUS status; @@ -810,6 +821,7 @@ SMBC_ftruncate_ctx(SMBCCTX *context, file->fname, NULL, &server, + &port, &share, &path, &user, diff --git a/source3/libsmb/libsmb_path.c b/source3/libsmb/libsmb_path.c index 1dcf2dd5167..b286691a21a 100644 --- a/source3/libsmb/libsmb_path.c +++ b/source3/libsmb/libsmb_path.c @@ -224,6 +224,7 @@ SMBC_parse_path(TALLOC_CTX *ctx, const char *fname, char **pp_workgroup, char **pp_server, + uint16_t *p_port, char **pp_share, char **pp_path, char **pp_user, @@ -238,6 +239,7 @@ SMBC_parse_path(TALLOC_CTX *ctx, /* Ensure these returns are at least valid pointers. */ *pp_server = talloc_strdup(ctx, ""); + *p_port = 0; *pp_share = talloc_strdup(ctx, ""); *pp_path = talloc_strdup(ctx, ""); *pp_user = talloc_strdup(ctx, ""); @@ -363,6 +365,28 @@ SMBC_parse_path(TALLOC_CTX *ctx, return -1; } + /* + * Does *pp_server contain a ':' ? If so + * this denotes the port. + */ + q = strchr_m(*pp_server, ':'); + if (q != NULL) { + long int port; + char *endptr = NULL; + *q = '\0'; + q++; + if (*q == '\0') { + /* Bad port. */ + return -1; + } + port = strtol(q, &endptr, 10); + if (*endptr != '\0') { + /* Bad port. */ + return -1; + } + *p_port = (uint16_t)port; + } + if (*p == (char)0) { goto decoding; /* That's it ... */ } diff --git a/source3/libsmb/libsmb_printjob.c b/source3/libsmb/libsmb_printjob.c index 173fa327d3e..3189463cf28 100644 --- a/source3/libsmb/libsmb_printjob.c +++ b/source3/libsmb/libsmb_printjob.c @@ -41,6 +41,7 @@ SMBC_open_print_job_ctx(SMBCCTX *context, char *user = NULL; char *password = NULL; char *path = NULL; + uint16_t port = 0; TALLOC_CTX *frame = talloc_stackframe(); if (!context || !context->internal->initialized) { @@ -62,6 +63,7 @@ SMBC_open_print_job_ctx(SMBCCTX *context, fname, NULL, &server, + &port, &share, &path, &user, @@ -190,6 +192,7 @@ SMBC_list_print_jobs_ctx(SMBCCTX *context, char *password = NULL; char *workgroup = NULL; char *path = NULL; + uint16_t port = 0; TALLOC_CTX *frame = talloc_stackframe(); if (!context || !context->internal->initialized) { @@ -211,6 +214,7 @@ SMBC_list_print_jobs_ctx(SMBCCTX *context, fname, &workgroup, &server, + &port, &share, &path, &user, @@ -266,6 +270,7 @@ SMBC_unlink_print_job_ctx(SMBCCTX *context, char *workgroup = NULL; char *path = NULL; int err; + uint16_t port = 0; TALLOC_CTX *frame = talloc_stackframe(); if (!context || !context->internal->initialized) { @@ -287,6 +292,7 @@ SMBC_unlink_print_job_ctx(SMBCCTX *context, fname, &workgroup, &server, + &port, &share, &path, &user, diff --git a/source3/libsmb/libsmb_stat.c b/source3/libsmb/libsmb_stat.c index 5cfbcb842c5..f87e2d34bd2 100644 --- a/source3/libsmb/libsmb_stat.c +++ b/source3/libsmb/libsmb_stat.c @@ -120,6 +120,7 @@ SMBC_stat_ctx(SMBCCTX *context, struct timespec change_time_ts; off_t size = 0; uint16 mode = 0; + uint16_t port = 0; SMB_INO_T ino = 0; TALLOC_CTX *frame = talloc_stackframe(); @@ -142,6 +143,7 @@ SMBC_stat_ctx(SMBCCTX *context, fname, &workgroup, &server, + &port, &share, &path, &user, @@ -214,6 +216,7 @@ SMBC_fstat_ctx(SMBCCTX *context, char *targetpath = NULL; struct cli_state *targetcli = NULL; SMB_INO_T ino = 0; + uint16_t port = 0; TALLOC_CTX *frame = talloc_stackframe(); NTSTATUS status; @@ -240,6 +243,7 @@ SMBC_fstat_ctx(SMBCCTX *context, file->fname, NULL, &server, + &port, &share, &path, &user, diff --git a/source3/libsmb/libsmb_xattr.c b/source3/libsmb/libsmb_xattr.c index c2ba61f88ea..89bdd25aa5f 100644 --- a/source3/libsmb/libsmb_xattr.c +++ b/source3/libsmb/libsmb_xattr.c @@ -1724,6 +1724,7 @@ SMBC_setxattr_ctx(SMBCCTX *context, const char * write_time_attr; const char * change_time_attr; } attr_strings; + uint16_t port = 0; TALLOC_CTX *frame = talloc_stackframe(); if (!context || !context->internal->initialized) { @@ -1746,6 +1747,7 @@ SMBC_setxattr_ctx(SMBCCTX *context, fname, &workgroup, &server, + &port, &share, &path, &user, @@ -2018,6 +2020,7 @@ SMBC_getxattr_ctx(SMBCCTX *context, const char * write_time_attr; const char * change_time_attr; } attr_strings; + uint16_t port = 0; TALLOC_CTX *frame = talloc_stackframe(); if (!context || !context->internal->initialized) { @@ -2039,6 +2042,7 @@ SMBC_getxattr_ctx(SMBCCTX *context, fname, &workgroup, &server, + &port, &share, &path, &user, @@ -2153,6 +2157,7 @@ SMBC_removexattr_ctx(SMBCCTX *context, char *password = NULL; char *workgroup = NULL; char *path = NULL; + uint16_t port = 0; TALLOC_CTX *frame = talloc_stackframe(); if (!context || !context->internal->initialized) { @@ -2174,6 +2179,7 @@ SMBC_removexattr_ctx(SMBCCTX *context, fname, &workgroup, &server, + &port, &share, &path, &user, -- 2.11.4.GIT