summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarolin Seeger <kseeger@samba.org>2012-10-31 11:40:26 +0100
committerKarolin Seeger <kseeger@samba.org>2012-11-01 09:10:38 +0100
commit3985669176ad4989133f9a7a8995ce6c69504bf2 (patch)
tree33c482a5b4266ad7712e124921c775a80fbc9e84
parentc1a451cacc441b47a92699805697cc123f449e06 (diff)
downloadsamba-3985669176ad4989133f9a7a8995ce6c69504bf2.tar.gz
Revert "Fix bug #7781 (Samba transforms "ShareName" to lowercase when adding new share via MMC)"
This reverts commit 157b88da4db727eafa682c7fc7eab11d5955f57b. This one seems to break make test on my system. Karolin (cherry picked from commit 92bd768ed56585c2a45d0ca41eec9e6a1e3701ae)
-rw-r--r--source3/include/proto.h2
-rw-r--r--source3/lib/dummysmbd.c2
-rw-r--r--source3/lib/util_str.c4
-rw-r--r--source3/modules/vfs_xattr_tdb.c3
-rw-r--r--source3/param/loadparm.c9
-rw-r--r--source3/printing/nt_printing.c12
-rw-r--r--source3/registry/reg_backend_printing.c7
-rw-r--r--source3/rpc_server/srv_srvsvc_nt.c75
-rw-r--r--source3/smbd/lanman.c14
-rw-r--r--source3/smbd/msdfs.c3
-rw-r--r--source3/smbd/service.c16
-rw-r--r--source3/smbd/smb2_tcon.c2
12 files changed, 70 insertions, 79 deletions
diff --git a/source3/include/proto.h b/source3/include/proto.h
index cee5d6af7f3..785cc303877 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -7002,7 +7002,7 @@ bool set_conn_connectpath(connection_struct *conn, const char *connectpath);
bool set_current_service(connection_struct *conn, uint16 flags, bool do_chdir);
void load_registry_shares(void);
int add_home_service(const char *service, const char *username, const char *homedir);
-int find_service(const char *service_in, fstring service);
+int find_service(fstring service);
connection_struct *make_connection_snum(struct smbd_server_connection *sconn,
int snum, user_struct *vuser,
DATA_BLOB password,
diff --git a/source3/lib/dummysmbd.c b/source3/lib/dummysmbd.c
index 28c6f0effe4..a41e6dc033a 100644
--- a/source3/lib/dummysmbd.c
+++ b/source3/lib/dummysmbd.c
@@ -28,7 +28,7 @@ int get_client_fd(void)
return -1;
}
-int find_service(const char *service_in, fstring service)
+int find_service(fstring service)
{
return -1;
}
diff --git a/source3/lib/util_str.c b/source3/lib/util_str.c
index 17a4a8f2c4e..d86963702e0 100644
--- a/source3/lib/util_str.c
+++ b/source3/lib/util_str.c
@@ -2301,10 +2301,6 @@ bool validate_net_name( const char *name,
{
int i;
- if (!name) {
- return false;
- }
-
for ( i=0; i<max_len && name[i]; i++ ) {
/* fail if strchr_m() finds one of the invalid characters */
if ( name[i] && strchr_m( invalid_chars, name[i] ) ) {
diff --git a/source3/modules/vfs_xattr_tdb.c b/source3/modules/vfs_xattr_tdb.c
index fa8db047f8c..f7fbfce4cb9 100644
--- a/source3/modules/vfs_xattr_tdb.c
+++ b/source3/modules/vfs_xattr_tdb.c
@@ -733,7 +733,8 @@ static int xattr_tdb_connect(vfs_handle_struct *handle, const char *service,
return res;
}
- snum = find_service(service, sname);
+ fstrcpy(sname, service);
+ snum = find_service(sname);
if (snum == -1) {
/*
* Should not happen, but we should not fail just *here*.
diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c
index eaff9e6ec4c..8c1cf0973b0 100644
--- a/source3/param/loadparm.c
+++ b/source3/param/loadparm.c
@@ -9471,10 +9471,15 @@ struct share_params *get_share_params(TALLOC_CTX *mem_ctx,
const char *sharename)
{
struct share_params *result;
- fstring sname;
+ char *sname;
int snum;
- snum = find_service(sharename, sname);
+ if (!(sname = SMB_STRDUP(sharename))) {
+ return NULL;
+ }
+
+ snum = find_service(sname);
+ SAFE_FREE(sname);
if (snum < 0) {
return NULL;
diff --git a/source3/printing/nt_printing.c b/source3/printing/nt_printing.c
index 85ce703bd80..beaa9e5790a 100644
--- a/source3/printing/nt_printing.c
+++ b/source3/printing/nt_printing.c
@@ -1472,7 +1472,9 @@ static uint32 get_correct_cversion(struct pipes_struct *p,
return 3;
}
- printdollar_snum = find_service("print$", printdollar);
+ fstrcpy(printdollar, "print$");
+
+ printdollar_snum = find_service(printdollar);
if (printdollar_snum == -1) {
*perr = WERR_NO_SUCH_SHARE;
return -1;
@@ -1862,7 +1864,9 @@ WERROR move_driver_to_download_area(struct pipes_struct *p,
return WERR_UNKNOWN_PRINTER_DRIVER;
}
- printdollar_snum = find_service("print$", printdollar);
+ fstrcpy(printdollar, "print$");
+
+ printdollar_snum = find_service(printdollar);
if (printdollar_snum == -1) {
*perr = WERR_NO_SUCH_SHARE;
return WERR_NO_SUCH_SHARE;
@@ -5130,7 +5134,9 @@ static bool delete_driver_files(struct pipes_struct *rpc_pipe,
DEBUG(6,("delete_driver_files: deleting driver [%s] - version [%d]\n",
r->driver_name, r->version));
- printdollar_snum = find_service("print$", printdollar);
+ fstrcpy(printdollar, "print$");
+
+ printdollar_snum = find_service(printdollar);
if (printdollar_snum == -1) {
return false;
}
diff --git a/source3/registry/reg_backend_printing.c b/source3/registry/reg_backend_printing.c
index cba4f798d38..90ccc33c4c9 100644
--- a/source3/registry/reg_backend_printing.c
+++ b/source3/registry/reg_backend_printing.c
@@ -278,7 +278,7 @@ done:
static bool add_printers_by_registry( struct regsubkey_ctr *subkeys )
{
int i, num_keys, snum;
- char *printername_in;
+ char *printername;
NT_PRINTER_INFO_LEVEL_2 info2;
NT_PRINTER_INFO_LEVEL printer;
@@ -289,9 +289,8 @@ static bool add_printers_by_registry( struct regsubkey_ctr *subkeys )
become_root();
for ( i=0; i<num_keys; i++ ) {
- fstring printername;
- printername_in = regsubkey_ctr_specific_key( subkeys, i );
- snum = find_service(printername_in, printername);
+ printername = regsubkey_ctr_specific_key( subkeys, i );
+ snum = find_service( printername );
/* just verify a valied snum for now */
if ( snum == -1 ) {
diff --git a/source3/rpc_server/srv_srvsvc_nt.c b/source3/rpc_server/srv_srvsvc_nt.c
index b51c7e2f2f9..a2d1d0716d2 100644
--- a/source3/rpc_server/srv_srvsvc_nt.c
+++ b/source3/rpc_server/srv_srvsvc_nt.c
@@ -1397,11 +1397,9 @@ WERROR _srvsvc_NetShareGetInfo(pipes_struct *p,
DEBUG(5,("_srvsvc_NetShareGetInfo: %d\n", __LINE__));
- if (!r->in.share_name) {
- return WERR_INVALID_NAME;
- }
+ fstrcpy(share_name, r->in.share_name);
- snum = find_service(r->in.share_name, share_name);
+ snum = find_service(share_name);
if (snum < 0) {
return WERR_INVALID_NAME;
}
@@ -1509,7 +1507,7 @@ WERROR _srvsvc_NetShareSetInfo(pipes_struct *p,
struct srvsvc_NetShareSetInfo *r)
{
char *command = NULL;
- fstring share_name;
+ char *share_name = NULL;
char *comment = NULL;
const char *pathname = NULL;
int type;
@@ -1525,25 +1523,26 @@ WERROR _srvsvc_NetShareSetInfo(pipes_struct *p,
DEBUG(5,("_srvsvc_NetShareSetInfo: %d\n", __LINE__));
- if (!r->in.share_name) {
- return WERR_INVALID_NAME;
+ share_name = talloc_strdup(p->mem_ctx, r->in.share_name);
+ if (!share_name) {
+ return WERR_NOMEM;
}
if (r->out.parm_error) {
*r->out.parm_error = 0;
}
- if ( strequal(r->in.share_name,"IPC$")
- || ( lp_enable_asu_support() && strequal(r->in.share_name,"ADMIN$") )
- || strequal(r->in.share_name,"global") )
+ if ( strequal(share_name,"IPC$")
+ || ( lp_enable_asu_support() && strequal(share_name,"ADMIN$") )
+ || strequal(share_name,"global") )
{
DEBUG(5,("_srvsvc_NetShareSetInfo: share %s cannot be "
"modified by a remote user.\n",
- r->in.share_name ));
+ share_name ));
return WERR_ACCESS_DENIED;
}
- snum = find_service(r->in.share_name, share_name);
+ snum = find_service(share_name);
/* Does this share exist ? */
if (snum < 0)
@@ -1738,8 +1737,7 @@ WERROR _srvsvc_NetShareAdd(pipes_struct *p,
struct srvsvc_NetShareAdd *r)
{
char *command = NULL;
- char *share_name_in = NULL;
- fstring share_name;
+ char *share_name = NULL;
char *comment = NULL;
char *pathname = NULL;
int type;
@@ -1776,7 +1774,7 @@ WERROR _srvsvc_NetShareAdd(pipes_struct *p,
/* Not enough info in a level 1 to do anything. */
return WERR_ACCESS_DENIED;
case 2:
- share_name_in = talloc_strdup(ctx, r->in.info->info2->name);
+ share_name = talloc_strdup(ctx, r->in.info->info2->name);
comment = talloc_strdup(ctx, r->in.info->info2->comment);
pathname = talloc_strdup(ctx, r->in.info->info2->path);
max_connections = (r->in.info->info2->max_users == (uint32_t)-1) ?
@@ -1787,7 +1785,7 @@ WERROR _srvsvc_NetShareAdd(pipes_struct *p,
/* No path. Not enough info in a level 501 to do anything. */
return WERR_ACCESS_DENIED;
case 502:
- share_name_in = talloc_strdup(ctx, r->in.info->info502->name);
+ share_name = talloc_strdup(ctx, r->in.info->info502->name);
comment = talloc_strdup(ctx, r->in.info->info502->comment);
pathname = talloc_strdup(ctx, r->in.info->info502->path);
max_connections = (r->in.info->info502->max_users == (uint32_t)-1) ?
@@ -1815,21 +1813,21 @@ WERROR _srvsvc_NetShareAdd(pipes_struct *p,
/* check for invalid share names */
- if (!share_name_in || !validate_net_name(share_name_in,
+ if (!share_name || !validate_net_name(share_name,
INVALID_SHARENAME_CHARS,
- strlen(share_name_in))) {
+ strlen(share_name))) {
DEBUG(5,("_srvsvc_NetShareAdd: Bad sharename \"%s\"\n",
- share_name_in ? share_name_in : ""));
+ share_name ? share_name : ""));
return WERR_INVALID_NAME;
}
- if (strequal(share_name_in,"IPC$") || strequal(share_name_in,"global")
+ if (strequal(share_name,"IPC$") || strequal(share_name,"global")
|| (lp_enable_asu_support() &&
- strequal(share_name_in,"ADMIN$"))) {
+ strequal(share_name,"ADMIN$"))) {
return WERR_ACCESS_DENIED;
}
- snum = find_service(share_name_in, share_name);
+ snum = find_service(share_name);
/* Share already exists. */
if (snum >= 0) {
@@ -1847,7 +1845,7 @@ WERROR _srvsvc_NetShareAdd(pipes_struct *p,
}
/* Ensure share name, pathname and comment don't contain '"' characters. */
- string_replace(share_name_in, '"', ' ');
+ string_replace(share_name, '"', ' ');
string_replace(path, '"', ' ');
if (comment) {
string_replace(comment, '"', ' ');
@@ -1857,7 +1855,7 @@ WERROR _srvsvc_NetShareAdd(pipes_struct *p,
"%s \"%s\" \"%s\" \"%s\" \"%s\" %d",
lp_add_share_cmd(),
get_dyn_CONFIGFILE(),
- share_name_in,
+ share_name,
path,
comment ? comment : "",
max_connections);
@@ -1894,8 +1892,6 @@ WERROR _srvsvc_NetShareAdd(pipes_struct *p,
return WERR_ACCESS_DENIED;
if (psd) {
- /* Note we use share_name here, not share_name_in as
- we need a canonicalized name for setting security. */
if (!set_share_security(share_name, psd)) {
DEBUG(0,("_srvsvc_NetShareAdd: Failed to add security info to share %s.\n",
share_name ));
@@ -1923,7 +1919,7 @@ WERROR _srvsvc_NetShareDel(pipes_struct *p,
struct srvsvc_NetShareDel *r)
{
char *command = NULL;
- fstring share_name;
+ char *share_name = NULL;
int ret;
int snum;
SE_PRIV se_diskop = SE_DISK_OPERATOR;
@@ -1933,21 +1929,22 @@ WERROR _srvsvc_NetShareDel(pipes_struct *p,
DEBUG(5,("_srvsvc_NetShareDel: %d\n", __LINE__));
- if (!r->in.share_name) {
+ share_name = talloc_strdup(p->mem_ctx, r->in.share_name);
+ if (!share_name) {
return WERR_NET_NAME_NOT_FOUND;
}
- if ( strequal(r->in.share_name,"IPC$")
- || ( lp_enable_asu_support() && strequal(r->in.share_name,"ADMIN$") )
- || strequal(r->in.share_name,"global") )
+ if ( strequal(share_name,"IPC$")
+ || ( lp_enable_asu_support() && strequal(share_name,"ADMIN$") )
+ || strequal(share_name,"global") )
{
return WERR_ACCESS_DENIED;
}
- if (!(params = get_share_params(p->mem_ctx, r->in.share_name))) {
+ if (!(params = get_share_params(p->mem_ctx, share_name))) {
return WERR_NO_SUCH_SHARE;
}
- snum = find_service(r->in.share_name, share_name);
+ snum = find_service(share_name);
/* No change to printer shares. */
if (lp_print_ok(snum))
@@ -2090,11 +2087,9 @@ WERROR _srvsvc_NetGetFileSecurity(pipes_struct *p,
ZERO_STRUCT(st);
- if (!r->in.share) {
- return WERR_INVALID_NAME;
- }
+ fstrcpy(servicename, r->in.share);
- snum = find_service(r->in.share, servicename);
+ snum = find_service(servicename);
if (snum == -1) {
DEBUG(10, ("Could not find service %s\n", servicename));
werr = WERR_NET_NAME_NOT_FOUND;
@@ -2222,11 +2217,9 @@ WERROR _srvsvc_NetSetFileSecurity(pipes_struct *p,
ZERO_STRUCT(st);
- if (!r->in.share) {
- return WERR_INVALID_NAME;
- }
+ fstrcpy(servicename, r->in.share);
- snum = find_service(r->in.share, servicename);
+ snum = find_service(servicename);
if (snum == -1) {
DEBUG(10, ("Could not find service %s\n", servicename));
werr = WERR_NET_NAME_NOT_FOUND;
diff --git a/source3/smbd/lanman.c b/source3/smbd/lanman.c
index 9b173d4d7f4..7b01968a1f0 100644
--- a/source3/smbd/lanman.c
+++ b/source3/smbd/lanman.c
@@ -849,7 +849,6 @@ static bool api_DosPrintQGetInfo(connection_struct *conn, uint16 vuid,
char *str2 = skip_string(param,tpscnt,str1);
char *p = skip_string(param,tpscnt,str2);
char *QueueName = p;
- fstring share_name;
unsigned int uLevel;
int count=0;
int snum;
@@ -900,7 +899,7 @@ static bool api_DosPrintQGetInfo(connection_struct *conn, uint16 vuid,
return(True);
}
- snum = find_service(QueueName, share_name);
+ snum = find_service(QueueName);
if ( !(lp_snum_ok(snum) && lp_print_ok(snum)) )
return False;
@@ -1930,13 +1929,12 @@ static bool api_RNetShareGetInfo(connection_struct *conn,uint16 vuid,
char *p = skip_string(param,tpscnt,netname);
int uLevel = get_safe_SVAL(param,tpscnt,p,0,-1);
int snum;
- fstring share_name;
if (!str1 || !str2 || !netname || !p) {
return False;
}
- snum = find_service(netname, share_name);
+ snum = find_service(netname);
if (snum < 0) {
return False;
}
@@ -2128,7 +2126,7 @@ static bool api_RNetShareAdd(connection_struct *conn,uint16 vuid,
return False;
}
pull_ascii_fstring(sharename,data);
- snum = find_service(sharename, sharename);
+ snum = find_service(sharename);
if (snum >= 0) { /* already exists */
res = ERRfilexists;
goto error_exit;
@@ -4184,7 +4182,6 @@ static bool api_WPrintJobEnumerate(connection_struct *conn, uint16 vuid,
struct pack_desc desc;
print_queue_struct *queue=NULL;
print_status_struct status;
- fstring share_name;
if (!str1 || !str2 || !p) {
return False;
@@ -4214,7 +4211,7 @@ static bool api_WPrintJobEnumerate(connection_struct *conn, uint16 vuid,
return False;
}
- snum = find_service(name, share_name);
+ snum = find_service(name);
if ( !(lp_snum_ok(snum) && lp_print_ok(snum)) ) {
return False;
}
@@ -4335,7 +4332,6 @@ static bool api_WPrintDestGetInfo(connection_struct *conn, uint16 vuid,
char *str2 = skip_string(param,tpscnt,str1);
char *p = skip_string(param,tpscnt,str2);
char* PrinterName = p;
- fstring share_name;
int uLevel;
struct pack_desc desc;
int snum;
@@ -4363,7 +4359,7 @@ static bool api_WPrintDestGetInfo(connection_struct *conn, uint16 vuid,
return False;
}
- snum = find_service(PrinterName, share_name);
+ snum = find_service(PrinterName);
if ( !(lp_snum_ok(snum) && lp_print_ok(snum)) ) {
*rdata_len = 0;
desc.errcode = NERR_DestNotFound;
diff --git a/source3/smbd/msdfs.c b/source3/smbd/msdfs.c
index 718d0def721..0480b585503 100644
--- a/source3/smbd/msdfs.c
+++ b/source3/smbd/msdfs.c
@@ -822,7 +822,8 @@ NTSTATUS get_referred_path(TALLOC_CTX *ctx,
snum = lp_servicenumber(jucn->service_name);
if(snum < 0) {
fstring service_name;
- if ((snum = find_service(jucn->service_name, service_name)) < 0) {
+ fstrcpy(service_name, jucn->service_name);
+ if ((snum = find_service(service_name)) < 0) {
return NT_STATUS_NOT_FOUND;
}
TALLOC_FREE(jucn->service_name);
diff --git a/source3/smbd/service.c b/source3/smbd/service.c
index 5281ef32c93..2de93848935 100644
--- a/source3/smbd/service.c
+++ b/source3/smbd/service.c
@@ -300,20 +300,14 @@ int add_home_service(const char *service, const char *username, const char *home
/**
* Find a service entry.
*
- * @param service_in is modified (to canonical form??)
- * and returned in return parameter service.
+ * @param service is modified (to canonical form??)
**/
-int find_service(const char *service_in, fstring service)
+int find_service(fstring service)
{
int iService;
struct smbd_server_connection *sconn = smbd_server_conn;
- if (!service_in) {
- return -1;
- }
-
- fstrcpy(service, service_in);
all_string_sub(service,"\\","/",0);
iService = lp_servicenumber(service);
@@ -400,7 +394,7 @@ int find_service(const char *service_in, fstring service)
goto fail;
}
- iService = find_service(defservice, service);
+ iService = find_service(defservice);
if (iService >= 0) {
all_string_sub(service, "_","/",0);
iService = lp_add_service(service, iService);
@@ -1183,7 +1177,7 @@ connection_struct *make_connection(struct smbd_server_connection *sconn,
fstrcpy(unix_username,
current_user_info.smb_name);
map_username(sconn, unix_username);
- snum = find_service(unix_username, unix_username);
+ snum = find_service(unix_username);
}
if (snum != -1) {
DEBUG(5, ("making a connection to 'homes' "
@@ -1211,7 +1205,7 @@ connection_struct *make_connection(struct smbd_server_connection *sconn,
strlower_m(service);
- snum = find_service(service, service);
+ snum = find_service(service);
if (snum < 0) {
if (strequal(service,"IPC$") ||
diff --git a/source3/smbd/smb2_tcon.c b/source3/smbd/smb2_tcon.c
index f7b9bdb5929..70c5e8845e5 100644
--- a/source3/smbd/smb2_tcon.c
+++ b/source3/smbd/smb2_tcon.c
@@ -167,7 +167,7 @@ static NTSTATUS smbd_smb2_tree_connect(struct smbd_smb2_request *req,
strlower_m(service);
- snum = find_service(service, service);
+ snum = find_service(service);
if (snum < 0) {
DEBUG(3,("smbd_smb2_tree_connect: couldn't find service %s\n",
service));