Add JSON support to smbstatus

Add JSON support to smbstatus and smbstatus profiling and tests for it.

Examplary output:

{
  "timestamp": "2022-04-15T18:25:15.364891+0200",
  "version": "4.17.0pre1-GIT-a0f12b9c80b",
  "smb_conf": "/opt/sambaTest/etc/smb.conf",
  "sessions": {
    "3639217376": {
      "session_id": "3639217376",
      "server_id": {
        "pid": "69650",
        "task_id": "0",
        "vnn": "4294967295",
        "unique_id": "10756714984493602300"
      },
      "uid": 1000,
      "gid": 1000,
      "username": "janger",
      "groupname": "janger",
      "remote_machine": "127.0.0.1",
      "hostname": "ipv4:127.0.0.1:59944",
      "session_dialect": "SMB3_11",
      "encryption": {
        "cipher": "",
        "degree": "none"
      },
      "signing": {
        "cipher": "AES-128-GMAC",
        "degree": "partial"
      }
    }
  },
  "tcons": {
    "3813255619": {
      "service": "gemeinsam",
      "server_id": {
        "pid": "69650",
        "task_id": "0",
        "vnn": "4294967295",
        "unique_id": "10756714984493602300"
      },
      "tcon_id": "3813255619",
      "session_id": "3639217376",
      "machine": "127.0.0.1",
      "connected_at": "2022-04-15T17:30:37+0200",
      "encryption": {
        "cipher": "AES-128-GMAC",
        "degree": "full"
      },
      "signing": {
        "cipher": "",
        "degree": "none"
      }
    }
  },
  "open_files": {
    "/home/janger/testfolder/hallo": {
      "service_path": "/home/janger/testfolder",
      "filename": "hallo",
      "fileid": {
        "devid": 59,
        "inode": 11404245,
        "extid": 0
      },
      "num_pending_deletes": 0,
      "opens": {
        "56839/2": {
          "server_id": {
            "pid": "69650",
            "task_id": "0",
            "vnn": "4294967295",
            "unique_id": "10756714984493602300"
          },
          "uid": 1000,
          "share_file_id": 2,
          "sharemode": {
            "hex": "0x00000003",
            "NONE": false,
            "READ": true,
            "WRITE": true,
            "DELETE": false,
            "text": "RW"
          },
          "access_mask": {
            "hex": "0x00000003",
            "READ_DATA": true,
            "WRITE_DATA": true,
            "APPEND_DATA": false,
            "READ_EA": false,
            "WRITE_EA": false,
            "EXECUTE": false,
            "READ_ATTRIBUTES": false,
            "WRITE_ATTRIBUTES": false,
            "DELETE_CHILD": false,
            "DELETE": false,
            "READ_CONTROL": false,
            "WRITE_DAC": false,
            "SYNCHRONIZE": false,
            "ACCESS_SYSTEM_SECURITY": false,
            "text": "RW"
          },
          "caching": {
            "READ": false,
            "WRITE": false,
            "HANDLE": false,
            "hex": "0x00000000",
            "text": ""
          },
          "oplock": {},
          "lease": {},
          "opened_at": "2022-04-15T17:30:38+0200"
        }
      }
    }
  }
}

If oplocks are used:

...
          "oplock": {
            "EXCLUSIVE": false,
            "BATCH": false,
            "LEVEL_II": true,
            "LEASE": false,
            "text": "NONE"
          }
...

If leases are used:

...
          "lease": {
            "lease_key": "29316055-f55c-de10-c813-af7bf5a430bb",
            "hex": "0x00000005",
            "READ": true,
            "WRITE": true,
            "HANDLE": false,
            "text": "RW"
          }
...

With byte-range locks (-B, --byterange):

  "byte_range_locks": {
    "/home/janger/testfolder/hallo": {
      "fileid": {
        "devid": 59,
        "inode": 11404245,
        "extid": 0
      },
      "file_name": "hallo",
      "share_path": "/home/janger/testfolder",
      "locks": [
        {
          "server_id": {
            "pid": "69650",
            "task_id": "0",
            "vnn": "4294967295",
            "unique_id": "10756714984493602300"
          },
          "type": "R",
          "flavour": "Posix",
          "start": 0,
          "size": 16
        }
      ]
    }

With notifies (-N, --notify):

  "notify": {
    "77247": {
      "server_id": {
        "pid": "69650",
        "task_id": "0",
        "vnn": "4294967295",
        "unique_id": "10756714984493602300"
      },
      "path": "/home/janger/testfolder/testdir",
      "filter": 4095,
      "subdir_filter": 4095,
      "creation_time": "1970-01-01T01:00:14.326582+01:00"
    }
  }

For profiling (-P, --profile):

{
  "timestamp": "2022-04-15T18:40:43.112216+0200",
  "version": "4.17.0pre1-GIT-a0f12b9c80b",
  "smb_conf": "/opt/sambaTest2/etc/smb.conf",
  "SMBD loop": {
    "connect": {
      "count": 2
    },
    "disconnect": {
      "count": 1
    },
    ...
  },
  "System Calls": {
    "syscall_opendir": {
      "count": 0,
      "time": 0
    },
    ...
  },
  "ACL Calls": {
    "get_nt_acl": {
      "count": 0,
      "time": 0
    },
    ...
  },
  "Stat Cache": {
    "statcache_lookups": {
      "count": 2
    },
    ...
  },
  "SMB Calls": {
    "SMBmkdir": {
      "count": 0,
      "time": 0
    },
    ...
  },
  "Trans2 Calls": {
    "Trans2_open": {
      "count": 0,
      "time": 0
    },
    ...
  },
  "NT Transact Calls": {
    "NT_transact_create": {
      "count": 0,
      "time": 0
    },
    ...
  },
  "SMB2 Calls": {
    "smb2_negprot": {
      "count": 2,
      "time": 3060,
      "idle": 0,
      "inbytes": 452,
      "outbytes": 568
    },
    ...
  }
}

Open tasks

  • add tconn_id and sess_id to open dictionary (not possible)
  • check wrong creation_date in the files (error in notify code?)

Checklist

  • Commits have Signed-off-by: with name/author being identical to the commit author
  • (optional) This MR is just one part towards a larger feature.
  • (optional, if backport required) Bugzilla bug filed and BUG: tag added
  • Test suite updated with functionality tests
  • Test suite updated with negative tests
  • Documentation updated
  • CI timeout is 3h or higher (see Settings/CICD/General pipelines/ Timeout)

Reviewer's checklist:

  • There is a test suite reasonably covering new functionality or modifications
  • Function naming, parameters, return values, types, etc., are consistent and according to README.Coding.md
  • This feature/change has adequate documentation added
  • No obvious mistakes in the code
Edited by J A

Merge request reports

Loading
Loading