Print this page
NEX-15069 smtorture smb2.create.blob is failed
Reviewed by: Matt Barden <matt.barden@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>
NEX-15069 smtorture smb2.create.blob is failed
Reviewed by: Matt Barden <matt.barden@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>
NEX-1643 dtrace provider for smbsrv
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Reviewed by: Matt Barden <matt.barden@nexenta.com>
SMB-65 SMB server in non-global zones (use zone_kcred())
re #14152 Race between ipmi_submit_driver_request() and kcs_loop() (sync with illumos fix 3902)
SMB-46 File handle leaks exposed by mtime fixes (rm 7815)
re #7815 SMB server delivers old modification time...

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/fs/smbsrv/smb_directory.c
          +++ new/usr/src/uts/common/fs/smbsrv/smb_directory.c
↓ open down ↓ 14 lines elided ↑ open up ↑
  15   15   * If applicable, add the following below this CDDL HEADER, with the
  16   16   * fields enclosed by brackets "[]" replaced with your own identifying
  17   17   * information: Portions Copyright [yyyy] [name of copyright owner]
  18   18   *
  19   19   * CDDL HEADER END
  20   20   */
  21   21  /*
  22   22   * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
  23   23   * Use is subject to license terms.
  24   24   *
  25      - * Copyright 2013 Nexenta Systems, Inc.  All rights reserved.
       25 + * Copyright 2017 Nexenta Systems, Inc.  All rights reserved.
  26   26   */
  27   27  
  28   28  #include <smbsrv/smb_kproto.h>
  29   29  #include <smbsrv/smbinfo.h>
  30   30  #include <smbsrv/smb_fsops.h>
  31   31  
  32   32  /*
  33   33   * The create directory message is sent to create a new directory.  The
  34   34   * appropriate Tid and additional pathname are passed.  The directory must
  35   35   * not exist for it to be created.
↓ open down ↓ 16 lines elided ↑ open up ↑
  52   52   * USHORT ByteCount;                  Count of data bytes = 0
  53   53   */
  54   54  smb_sdrc_t
  55   55  smb_pre_create_directory(smb_request_t *sr)
  56   56  {
  57   57          int rc;
  58   58  
  59   59          rc = smbsr_decode_data(sr, "%S", sr,
  60   60              &sr->arg.dirop.fqi.fq_path.pn_path);
  61   61  
  62      -        DTRACE_SMB_2(op__CreateDirectory__start, smb_request_t *, sr,
  63      -            struct dirop *, &sr->arg.dirop);
       62 +        DTRACE_SMB_START(op__CreateDirectory, smb_request_t *, sr);
  64   63  
  65   64          return ((rc == 0) ? SDRC_SUCCESS : SDRC_ERROR);
  66   65  }
  67   66  
  68   67  void
  69   68  smb_post_create_directory(smb_request_t *sr)
  70   69  {
  71      -        DTRACE_SMB_1(op__CreateDirectory__done, smb_request_t *, sr);
       70 +        DTRACE_SMB_DONE(op__CreateDirectory, smb_request_t *, sr);
  72   71  }
  73   72  
  74   73  smb_sdrc_t
  75   74  smb_com_create_directory(smb_request_t *sr)
  76   75  {
  77   76          int rc = 0;
  78   77          smb_pathname_t *pn = &sr->arg.dirop.fqi.fq_path;
  79   78  
  80   79          if (!STYPE_ISDSK(sr->tid_tree->t_res_type)) {
  81   80                  smbsr_error(sr, NT_STATUS_ACCESS_DENIED,
↓ open down ↓ 117 lines elided ↑ open up ↑
 199  198   * USHORT ByteCount;                  Count of data bytes = 0
 200  199   */
 201  200  smb_sdrc_t
 202  201  smb_pre_delete_directory(smb_request_t *sr)
 203  202  {
 204  203          int rc;
 205  204  
 206  205          rc = smbsr_decode_data(sr, "%S", sr,
 207  206              &sr->arg.dirop.fqi.fq_path.pn_path);
 208  207  
 209      -        DTRACE_SMB_2(op__DeleteDirectory__start, smb_request_t *, sr,
 210      -            struct dirop *, &sr->arg.dirop);
      208 +        DTRACE_SMB_START(op__DeleteDirectory, smb_request_t *, sr);
 211  209  
 212  210          return ((rc == 0) ? SDRC_SUCCESS : SDRC_ERROR);
 213  211  }
 214  212  
 215  213  void
 216  214  smb_post_delete_directory(smb_request_t *sr)
 217  215  {
 218      -        DTRACE_SMB_1(op__DeleteDirectory__done, smb_request_t *, sr);
      216 +        DTRACE_SMB_DONE(op__DeleteDirectory, smb_request_t *, sr);
 219  217  }
 220  218  
 221  219  smb_sdrc_t
 222  220  smb_com_delete_directory(smb_request_t *sr)
 223  221  {
 224  222          int rc;
 225  223          uint32_t flags = 0;
 226  224          smb_fqi_t *fqi;
 227  225          smb_node_t *tnode;
 228  226  
↓ open down ↓ 16 lines elided ↑ open up ↑
 245  243              tnode, tnode, &fqi->fq_dnode, fqi->fq_last_comp);
 246  244  
 247  245          if (rc != 0) {
 248  246                  smbsr_errno(sr, rc);
 249  247                  return (SDRC_ERROR);
 250  248          }
 251  249  
 252  250          rc = smb_fsop_lookup(sr, sr->user_cr, SMB_FOLLOW_LINKS,
 253  251              tnode, fqi->fq_dnode, fqi->fq_last_comp, &fqi->fq_fnode);
 254  252          if (rc != 0) {
 255      -                if (rc == ENOENT)
 256      -                        smbsr_error(sr, NT_STATUS_OBJECT_NAME_NOT_FOUND,
 257      -                            ERRDOS, ERROR_FILE_NOT_FOUND);
 258      -                else
 259      -                        smbsr_errno(sr, rc);
      253 +                smbsr_errno(sr, rc);
 260  254                  smb_node_release(fqi->fq_dnode);
 261  255                  return (SDRC_ERROR);
 262  256          }
 263  257  
 264  258          /*
 265  259           * Delete should fail if this is the root of a share
 266  260           * or a DFS link
 267  261           */
 268  262          if ((fqi->fq_fnode == tnode) || smb_node_is_dfslink(fqi->fq_fnode)) {
 269  263                  smbsr_error(sr, NT_STATUS_ACCESS_DENIED,
↓ open down ↓ 84 lines elided ↑ open up ↑
 354  348   * not found.
 355  349   */
 356  350  smb_sdrc_t
 357  351  smb_pre_check_directory(smb_request_t *sr)
 358  352  {
 359  353          int rc;
 360  354  
 361  355          rc = smbsr_decode_data(sr, "%S", sr,
 362  356              &sr->arg.dirop.fqi.fq_path.pn_path);
 363  357  
 364      -        DTRACE_SMB_2(op__CheckDirectory__start, smb_request_t *, sr,
 365      -            struct dirop *, &sr->arg.dirop);
      358 +        DTRACE_SMB_START(op__CheckDirectory, smb_request_t *, sr);
 366  359  
 367  360          return ((rc == 0) ? SDRC_SUCCESS : SDRC_ERROR);
 368  361  }
 369  362  
 370  363  void
 371  364  smb_post_check_directory(smb_request_t *sr)
 372  365  {
 373      -        DTRACE_SMB_1(op__CheckDirectory__done, smb_request_t *, sr);
      366 +        DTRACE_SMB_DONE(op__CheckDirectory, smb_request_t *, sr);
 374  367  }
 375  368  
 376  369  smb_sdrc_t
 377  370  smb_com_check_directory(smb_request_t *sr)
 378  371  {
 379  372          int rc;
 380  373          smb_fqi_t *fqi;
 381  374          smb_node_t *tnode;
 382  375          smb_node_t *node;
 383  376          char *path;
↓ open down ↓ 26 lines elided ↑ open up ↑
 410  403              &fqi->fq_dnode, fqi->fq_last_comp);
 411  404          if (rc != 0) {
 412  405                  smbsr_errno(sr, rc);
 413  406                  return (SDRC_ERROR);
 414  407          }
 415  408  
 416  409          rc = smb_fsop_lookup(sr, sr->user_cr, SMB_FOLLOW_LINKS,
 417  410              tnode, fqi->fq_dnode, fqi->fq_last_comp, &fqi->fq_fnode);
 418  411          smb_node_release(fqi->fq_dnode);
 419  412          if (rc != 0) {
 420      -                if (rc == ENOENT)
 421      -                        smbsr_error(sr, NT_STATUS_OBJECT_NAME_NOT_FOUND,
 422      -                            ERRDOS, ERROR_PATH_NOT_FOUND);
 423      -                else
 424      -                        smbsr_errno(sr, rc);
      413 +                smbsr_errno(sr, rc);
 425  414                  return (SDRC_ERROR);
 426  415          }
 427  416  
 428  417          node = fqi->fq_fnode;
 429  418          if (!smb_node_is_dir(node)) {
 430  419                  smbsr_error(sr, NT_STATUS_NOT_A_DIRECTORY,
 431  420                      ERRDOS, ERROR_PATH_NOT_FOUND);
 432  421                  smb_node_release(node);
 433  422                  return (SDRC_ERROR);
 434  423          }
↓ open down ↓ 20 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX