The branch, master has been updated
       via  9152c08955c .github: CodeQL triggers on current branches
       via  0887c0358e4 .gitlab: CodeQL runner runs a bootstrap.sh
       via  c8435d71dd4 .github: add CodeQL workflow
       via  0eaf4601d07 ctdb-scripts: Reformat with "shfmt -w -p -i 0 -fn"
       via  f1cb1b1fc39 ctdb-scripts: Add ctdb_diagnostics -l option
      from  a65a9e2e34c samba-tool backup restore: cope with no sysvol

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 9152c08955cf49a20a09dec349ac20066897b0e7
Author: Douglas Bagnall <douglas.bagn...@catalyst.net.nz>
Date:   Fri Mar 14 16:53:42 2025 +1300

    .github: CodeQL triggers on current branches
    
    Signed-off-by: Douglas Bagnall <douglas.bagn...@catalyst.net.nz>
    Reviewed-by: Martin Schwenke <mar...@meltin.net>
    
    Autobuild-User(master): Ralph Böhme <s...@samba.org>
    Autobuild-Date(master): Sat Mar 29 12:38:10 UTC 2025 on atb-devel-224

commit 0887c0358e4f297c95e4e40aecb3cbd1f5ab89f1
Author: Douglas Bagnall <douglas.bagn...@catalyst.net.nz>
Date:   Fri Mar 14 16:45:18 2025 +1300

    .gitlab: CodeQL runner runs a bootstrap.sh
    
    Signed-off-by: Douglas Bagnall <douglas.bagn...@catalyst.net.nz>
    Reviewed-by: Martin Schwenke <mar...@meltin.net>

commit c8435d71dd4ddc2e7347d43c9b784da440d5f660
Author: Douglas Bagnall <douglas.bagn...@catalyst.net.nz>
Date:   Fri Mar 14 16:21:41 2025 +1300

    .github: add CodeQL workflow
    
    This is the automatically generated config file for CodeQL, a code
    query language, which can be used to run bespoke static analysis
    tasks.
    
    It is currently set to "autobuild" mode, which in Github's terminology
    means it tries `./configure && make`, which fails because configure
    looks for packages that aren't installed.
    
    In another commit or two we'll add the necessary bootstrap lines, and
    perhaps remove some of the unneeded bits.
    
    Signed-off-by: Douglas Bagnall <douglas.bagn...@catalyst.net.nz>
    Reviewed-by: Martin Schwenke <mar...@meltin.net>

commit 0eaf4601d073a6e4d5a026d4a4a9d613aff6a696
Author: Martin Schwenke <mschwe...@ddn.com>
Date:   Fri Mar 14 17:28:43 2025 +1100

    ctdb-scripts: Reformat with "shfmt -w -p -i 0 -fn"
    
    Best reviewed with "git show -w".
    
    Signed-off-by: Martin Schwenke <mschwe...@ddn.com>
    Reviewed-by: Ralph Boehme <s...@samba.org>

commit f1cb1b1fc3984b22f7bf241511e79b1732f2b215
Author: yogita72 <yogita.bij...@gmail.com>
Date:   Tue Mar 11 23:55:19 2025 +0000

    ctdb-scripts: Add ctdb_diagnostics -l option
    
    Allows ctdb_diagnostics to be run on the local node without onnode.
    
    Signed-off-by: yogita72 <yogita.bij...@gmail.com>
    Reviewed-by: Martin Schwenke <mar...@meltin.net>
    Reviewed-by: Ralph Boehme <s...@samba.org>

-----------------------------------------------------------------------

Summary of changes:
 .github/workflows/codeql.yml |  97 +++++++++++++
 ctdb/tools/ctdb_diagnostics  | 328 +++++++++++++++++++++++++------------------
 2 files changed, 285 insertions(+), 140 deletions(-)
 create mode 100644 .github/workflows/codeql.yml


Changeset truncated at 500 lines:

diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml
new file mode 100644
index 00000000000..3f0a1d742ef
--- /dev/null
+++ b/.github/workflows/codeql.yml
@@ -0,0 +1,97 @@
+# For most projects, this workflow file will not need changing; you simply need
+# to commit it to your repository.
+#
+# You may wish to alter this file to override the set of languages analyzed,
+# or to provide custom queries or build logic.
+#
+# ******** NOTE ********
+# We have attempted to detect the languages in your repository. Please check
+# the `language` matrix defined below to confirm you have the correct set of
+# supported CodeQL languages.
+#
+name: "CodeQL Advanced"
+
+on:
+  push:
+    branches: [ "master", "v4-21-test", "v4-22-test", "v4-23-test", 
"v4-24-test", "v4-25-test" ]
+  pull_request:
+    branches: [ "master" ]
+  schedule:
+    - cron: '31 18 * * 6'
+
+jobs:
+  analyze:
+    name: Analyze (${{ matrix.language }})
+    # Runner size impacts CodeQL analysis time. To learn more, please see:
+    #   - https://gh.io/recommended-hardware-resources-for-running-codeql
+    #   - https://gh.io/supported-runners-and-hardware-resources
+    #   - https://gh.io/using-larger-runners (GitHub.com only)
+    # Consider using larger runners or machines with greater resources for 
possible analysis time improvements.
+    runs-on: ubuntu-22.04
+    permissions:
+      # required for all workflows
+      security-events: write
+
+      # required to fetch internal or private CodeQL packs
+      packages: read
+
+      # only required for workflows in private repositories
+      actions: read
+      contents: read
+
+    strategy:
+      fail-fast: false
+      matrix:
+        include:
+        - language: c-cpp
+          build-mode: manual
+        - language: python
+          build-mode: none
+        # CodeQL supports the following values keywords for 'language': 
'actions', 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 
'python', 'ruby', 'swift'
+        # Use `c-cpp` to analyze code written in C, C++ or both
+        # Use 'java-kotlin' to analyze code written in Java, Kotlin or both
+        # Use 'javascript-typescript' to analyze code written in JavaScript, 
TypeScript or both
+        # To learn more about changing the languages that are analyzed or 
customizing the build mode for your analysis,
+        # see 
https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning.
+        # If you are analyzing a compiled language, you can modify the 
'build-mode' for that language to customize how
+        # your codebase is analyzed, see 
https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages
+    steps:
+    - name: Checkout repository
+      uses: actions/checkout@v4
+
+    # Add any setup steps before running the `github/codeql-action/init` 
action.
+    # This includes steps like installing compilers or runtimes 
(`actions/setup-node`
+    # or others). This is typically only required for manual builds.
+    # - name: Setup runtime (example)
+    #   uses: actions/setup-example@v1
+
+    # Initializes the CodeQL tools for scanning.
+    - name: Initialize CodeQL
+      uses: github/codeql-action/init@v3
+      with:
+        languages: ${{ matrix.language }}
+        build-mode: ${{ matrix.build-mode }}
+        # If you wish to specify custom queries, you can do so here or in a 
config file.
+        # By default, queries listed here will override any specified in a 
config file.
+        # Prefix the list here with "+" to use these queries and those in the 
config file.
+
+        # For more details on CodeQL's query packs, refer to: 
https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
+        # queries: security-extended,security-and-quality
+
+    # If the analyze step fails for one of the languages you are analyzing with
+    # "We were unable to automatically build your code", modify the matrix 
above
+    # to set the build mode to "manual" for that language. Then modify this 
step
+    # to build your code.
+    # ℹ️ Command-line programs to run using the OS shell.
+    # 📚 See 
https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
+    - if: matrix.build-mode == 'manual'
+      shell: bash
+      run: |
+        bash bootstrap/generated-dists/ubuntu2204/bootstrap.sh
+        ./configure
+        make -j4
+
+    - name: Perform CodeQL Analysis
+      uses: github/codeql-action/analyze@v3
+      with:
+        category: "/language:${{matrix.language}}"
diff --git a/ctdb/tools/ctdb_diagnostics b/ctdb/tools/ctdb_diagnostics
index d16a71c8f30..d3f7a3588f2 100755
--- a/ctdb/tools/ctdb_diagnostics
+++ b/ctdb/tools/ctdb_diagnostics
@@ -1,82 +1,108 @@
 #!/bin/sh
-# a script to test the basic setup of a CTDB/Samba install 
+# a script to test the basic setup of a CTDB/Samba install
 # tri...@samba.org September 2007
 # mar...@meltin.net August 2010
 
-usage ()
+usage()
 {
-    cat >&2 <<EOF
+       cat >&2 <<EOF
 Usage: ctdb_diagnostics [OPTION] ...
   options:
     -n <nodes>  Comma separated list of nodes to operate on
     -c          Ignore comment lines (starting with '#') in file comparisons
+    -l          Run in local mode
     -w          Ignore whitespace in file comparisons
     --no-ads    Do not use commands that assume an Active Directory Server
 EOF
-    exit 1
+       exit 1
 
 }
 
 nodes=$(ctdb listnodes -X | cut -d'|' -f2)
+local_mode=false
 bad_nodes=""
 diff_opts=
 no_ads=false
 
-parse_options ()
+parse_options()
 {
-    temp=$(getopt -n "ctdb_diagnostics" -o "n:cwh" -l no-ads,help -- "$@")
-
-    # No! Checking the exit code afterwards is actually clearer...
-    # shellcheck disable=SC2181
-    [ $? -eq 0 ] || usage
-
-    eval set -- "$temp"
-
-    while true ; do
-       case "$1" in
-           -n) nodes=$(echo "$2" | sed -e 's@,@ @g') ; shift 2 ;;
-           -c) diff_opts="${diff_opts} -I ^#.*" ; shift ;;
-           -w) diff_opts="${diff_opts} -w" ; shift ;;
-           --no-ads) no_ads=true ; shift ;;
-           --) shift ; break ;;
-           -h|--help|*) usage ;;
-       esac
-    done
-
-    [ $# -ne 0 ] && usage
+       temp=$(getopt -n "ctdb_diagnostics" -o "n:clwh" -l no-ads,help -- "$@")
+
+       # No! Checking the exit code afterwards is actually clearer...
+       # shellcheck disable=SC2181
+       [ $? -eq 0 ] || usage
+
+       eval set -- "$temp"
+
+       while true; do
+               case "$1" in
+               -n)
+                       nodes=$(echo "$2" | sed -e 's@,@ @g')
+                       shift 2
+                       ;;
+               -c)
+                       diff_opts="${diff_opts} -I ^#.*"
+                       shift
+                       ;;
+               -l)
+                       local_mode=true
+                       shift
+                       ;;
+               -w)
+                       diff_opts="${diff_opts} -w"
+                       shift
+                       ;;
+               --no-ads)
+                       no_ads=true
+                       shift
+                       ;;
+               --)
+                       shift
+                       break
+                       ;;
+               -h | --help | *) usage ;;
+               esac
+       done
+
+       [ $# -ne 0 ] && usage
 }
 
 parse_options "$@"
 
 # Use 5s ssh timeout if EXTRA_SSH_OPTS doesn't set a timeout.
 case "$EXTRA_SSH_OPTS" in
-    *ConnectTimeout=*) : ;;
-    *)
+*ConnectTimeout=*) : ;;
+*)
        export EXTRA_SSH_OPTS="${EXTRA_SSH_OPTS} -o ConnectTimeout=5"
+       ;;
 esac
 
 # Filter nodes.  Remove any nodes we can't contact from $node and add
 # them to $bad_nodes.
+
 _nodes=""
-for _i in $nodes ; do
-    if onnode "$_i" true >/dev/null 2>&1 ; then
-       _nodes="${_nodes}${_nodes:+ }${_i}"
-    else
-       bad_nodes="${bad_nodes}${bad_nodes:+,}${_i}"
-    fi
-done
+if ! $local_mode; then
+       for _i in $nodes; do
+               if onnode "$_i" true >/dev/null 2>&1; then
+                       _nodes="${_nodes}${_nodes:+ }${_i}"
+               else
+                       bad_nodes="${bad_nodes}${bad_nodes:+,}${_i}"
+               fi
+       done
+fi
+
 nodes="$_nodes"
 
 nodes_comma=$(echo "$nodes" | sed -e 's@[[:space:]]@,@g')
 
 PATH="$PATH:/sbin:/usr/sbin:/usr/lpp/mmfs/bin"
 
-# list of config files that must exist and that we check are the same 
+# list of config files that must exist and that we check are the same
 # on the nodes
-if [ -d /etc/sysconfig ] ; then
-    CONFIG_FILES_MUST="/etc/krb5.conf /etc/hosts /usr/local/etc/ctdb/nodes 
/etc/sysconfig/ctdb /etc/resolv.conf /etc/nsswitch.conf /etc/sysctl.conf 
/etc/samba/smb.conf /etc/fstab /etc/multipath.conf /etc/pam.d/system-auth 
/etc/sysconfig/nfs /etc/exports /etc/vsftpd/vsftpd.conf"
+if [ -d /etc/sysconfig ]; then
+       CONFIG_FILES_MUST="/etc/krb5.conf /etc/hosts /usr/local/etc/ctdb/nodes 
/etc/sysconfig/ctdb /etc/resolv.conf /etc/nsswitch.conf /etc/sysctl.conf 
/etc/samba/smb.conf /etc/fstab /etc/multipath.conf /etc/pam.d/system-auth 
/etc/sysconfig/nfs /etc/exports /etc/vsftpd/vsftpd.conf"
 else
-    CONFIG_FILES_MUST="/etc/krb5.conf /etc/hosts /usr/local/etc/ctdb/nodes 
/etc/default/ctdb /etc/resolv.conf /etc/nsswitch.conf /etc/sysctl.conf 
/etc/samba/smb.conf /etc/fstab /etc/multipath.conf /etc/pam.d/system-auth 
/etc/default/nfs /etc/exports /etc/vsftpd/vsftpd.conf"
+       CONFIG_FILES_MUST="/etc/krb5.conf /etc/hosts /usr/local/etc/ctdb/nodes 
/etc/default/ctdb /etc/resolv.conf /etc/nsswitch.conf /etc/sysctl.conf 
/etc/samba/smb.conf /etc/fstab /etc/multipath.conf /etc/pam.d/system-auth 
/etc/default/nfs /etc/exports /etc/vsftpd/vsftpd.conf"
 fi
 
 # list of config files that may exist and should be checked that they
@@ -95,78 +121,90 @@ EOF
 
 date
 
-error() {
-    msg="$1"
-    echo "ERROR: $msg"
-    NUM_ERRORS=$((NUM_ERRORS + 1))
-    echo " ERROR[$NUM_ERRORS]: $msg" >> "$ERRORS"
+error()
+{
+       msg="$1"
+       echo "ERROR: $msg"
+       NUM_ERRORS=$((NUM_ERRORS + 1))
+       echo " ERROR[$NUM_ERRORS]: $msg" >>"$ERRORS"
 }
 
-show_file() {
-    fname="$1"
-    _fdetails=$(ls -l "$fname" 2>&1)
-    echo "  ================================"
-    echo "  File: $fname"
-    echo "  $_fdetails"
-    sed 's/^/  /' "$fname" 2>&1
-    echo "  ================================"
+show_file()
+{
+       fname="$1"
+       _fdetails=$(ls -l "$fname" 2>&1)
+       echo "  ================================"
+       echo "  File: $fname"
+       echo "  $_fdetails"
+       sed 's/^/  /' "$fname" 2>&1
+       echo "  ================================"
 }
 
-show_all() {
-    echo "running $1 on nodes $nodes_comma"
-    onnode "$nodes_comma" "hostname; date; $1 2>&1 | sed 's/^/  /'" 2>&1
+show_all()
+{
+       if $local_mode; then
+               echo "running on local node"
+               hostname
+               date
+               $1 2>&1 | sed 's/^/  /' 2>&1
+       else
+               echo "running $1 on nodes $nodes_comma"
+               onnode "$nodes_comma" "hostname; date; $1 2>&1 | sed 's/^/  /'" 
2>&1
+       fi
 }
 
-show_and_compare_files () {
-
-    fmt="$1" ; shift
-
-    for f ; do
-       _bf=$(basename "$f")
-       first=true
-
-       for n in $nodes ; do
-
-           if $first ; then
-               onnode "$n" [ -r "$f" ] || {
-                   # This function takes a format string
-                   # shellcheck disable=SC2059
-                   msg=$(printf "$fmt" "$f" "$n")
-                   error "$msg"
-                   continue 2;
-               }
-
-               fstf="${tmpdir}/${_bf}.node${n}"
-               onnode "$n" cat "$f" >"$fstf" 2>&1
-
-               _fdetails=$(onnode "$n" ls -l "$f" 2>&1)
-               echo "  ================================"
-               echo "  File (on node $n): $f"
-               echo "  $_fdetails"
-               sed 's/^/  /' "$fstf"
-               echo "  ================================"
-               first=false
-           else
-               echo "Testing for same config file $f on node $n"
-               tmpf="${tmpdir}/${_bf}.node${n}"
-               onnode "$n" cat "$f" >"$tmpf" 2>&1
-               # Intentional multi-word splitting on diff_opts
-               # shellcheck disable=SC2086
-               diff $diff_opts "$fstf" "$tmpf" >/dev/null 2>&1 || {
-                   error "File $f is different on node $n"
-                   diff -u $diff_opts "$fstf" "$tmpf"
-               }
-               rm -f "$tmpf"
-           fi
-       done
+show_and_compare_files()
+{
 
-       rm -f "$fstf"
-    done
+       fmt="$1"
+       shift
+
+       for f; do
+               _bf=$(basename "$f")
+               first=true
+
+               for n in $nodes; do
+
+                       if $first; then
+                               onnode "$n" [ -r "$f" ] || {
+                                       # This function takes a format string
+                                       # shellcheck disable=SC2059
+                                       msg=$(printf "$fmt" "$f" "$n")
+                                       error "$msg"
+                                       continue 2
+                               }
+
+                               fstf="${tmpdir}/${_bf}.node${n}"
+                               onnode "$n" cat "$f" >"$fstf" 2>&1
+
+                               _fdetails=$(onnode "$n" ls -l "$f" 2>&1)
+                               echo "  ================================"
+                               echo "  File (on node $n): $f"
+                               echo "  $_fdetails"
+                               sed 's/^/  /' "$fstf"
+                               echo "  ================================"
+                               first=false
+                       else
+                               echo "Testing for same config file $f on node 
$n"
+                               tmpf="${tmpdir}/${_bf}.node${n}"
+                               onnode "$n" cat "$f" >"$tmpf" 2>&1
+                               # Intentional multi-word splitting on diff_opts
+                               # shellcheck disable=SC2086
+                               diff $diff_opts "$fstf" "$tmpf" >/dev/null 2>&1 
|| {
+                                       error "File $f is different on node $n"
+                                       diff -u $diff_opts "$fstf" "$tmpf"
+                               }
+                               rm -f "$tmpf"
+                       fi
+               done
+
+               rm -f "$fstf"
+       done
 }
 
-if ! tmpdir=$(mktemp -d) ; then
-    echo "Unable to create a temporary directory"
-    exit 1
+if ! tmpdir=$(mktemp -d); then
+       echo "Unable to create a temporary directory"
+       exit 1
 fi
 ERRORS="${tmpdir}/diag_err"
 NUM_ERRORS=0
@@ -176,8 +214,8 @@ Diagnosis started on these nodes:
 $nodes_comma
 EOF
 
-if [ -n "$bad_nodes" ] ; then
-    cat <<EOF
+if [ -n "$bad_nodes" ]; then
+       cat <<EOF
 
 NOT RUNNING DIAGNOSTICS on these uncontactable nodes:
 $bad_nodes
@@ -199,15 +237,28 @@ EOF
 
 # Intentional multi-word splitting on CONFIG_FILES_MUST
 # shellcheck disable=SC2086
-show_and_compare_files \
-    "%s is missing on node %d" \
-    $CONFIG_FILES_MUST
+
+if ! $local_mode; then
+       show_and_compare_files \
+               "%s is missing on node %d" \
+               $CONFIG_FILES_MUST
+else
+       for f in $CONFIG_FILES_MUST; do
+               show_file $f
+       done
+fi
 
 # Intentional multi-word splitting on CONFIG_FILES_MAY
 # shellcheck disable=SC2086
-show_and_compare_files \
-    "Optional file %s is not present on node %d" \
-    $CONFIG_FILES_MAY
+if ! $local_mode; then
+       show_and_compare_files \
+               "Optional file %s is not present on node %d" \
+               $CONFIG_FILES_MAY
+else
+       for f in $CONFIG_FILES_MAY; do
+               show_file $f
+       done
+fi
 
 cat <<EOF
 --------------------------------------------------------------------
@@ -215,11 +266,11 @@ Checking for clock drift
 EOF
 t=$(date +%s)
 for i in $nodes; do
-    t2=$(onnode "$i" date +%s)
-    d=$((t2 - t))
-    if [ "$d" -gt 30 ] || [ "$d" -lt -30 ]; then
-       error "time on node $i differs by $d seconds"
-    fi
+       t2=$(onnode "$i" date +%s)
+       d=$((t2 - t))
+       if [ "$d" -gt 30 ] || [ "$d" -lt -30 ]; then
+               error "time on node $i differs by $d seconds"
+       fi
 done
 
 cat <<EOF
@@ -228,15 +279,14 @@ Showing software versions
 EOF
 show_all "uname -a"
 [ -x /bin/rpm ] && {
-    show_all "rpm -qa | grep -E 'samba|ctdb|gpfs'"
+       show_all "rpm -qa | grep -E 'samba|ctdb|gpfs'"
 }
 [ -x /usr/bin/dpkg-query ] && {
-    show_all "/usr/bin/dpkg-query --show 'ctdb'"
-    show_all "/usr/bin/dpkg-query --show 'samba'"
-    #show_all "/usr/bin/dpkg-query --show 'gpfs'"
+       show_all "/usr/bin/dpkg-query --show 'ctdb'"
+       show_all "/usr/bin/dpkg-query --show 'samba'"
+       #show_all "/usr/bin/dpkg-query --show 'gpfs'"
 }
 
-
 cat <<EOF
 --------------------------------------------------------------------
 Showing ctdb status and recent log entries
@@ -255,7 +305,6 @@ show_all "tail -200 /var/log/messages"
 show_all "ls -lRs /usr/local/var/lib/ctdb"
 show_all "ls -lRs /usr/local/etc/ctdb"
 
-
 cat <<EOF
 --------------------------------------------------------------------
 Showing system and process status
@@ -287,18 +336,18 @@ show_all "/usr/sbin/showmount -a"


-- 
Samba Shared Repository

Reply via email to