[SCM] Samba Shared Repository - branch master updated

Karolin Seeger kseeger at samba.org
Tue Aug 14 15:03:02 UTC 2018


The branch, master has been updated
       via  a45de51 cracknames: Fix DoS (NULL pointer de-ref) when not servicePrincipalName is set on a user
       via  be3d4b2 libsmb: Harden smbc_readdir_internal() against returns from malicious servers.
       via  860f575 libsmb: Ensure smbc_urlencode() can't overwrite passed in buffer.
       via  7070aa3 CVE-2018-10919 tests: Add extra test for dirsync deleted object corner-case
       via  fc45da5 CVE-2018-10919 acl_read: Fix unauthorized attribute access via searches
       via  98c2e6a CVE-2018-10919 acl_read: Flip the logic in the dirsync check
       via  4234579 CVE-2018-10919 acl_read: Small refactor to aclread_callback()
       via  80c4e17 CVE-2018-10919 acl_read: Split access_mask logic out into helper function
       via  ba46578 CVE-2018-10919 security: Fix checking of object-specific CONTROL_ACCESS rights
       via  563e454 CVE-2018-10919 tests: test ldap searches for non-existent attributes.
       via  9eb8340 CVE-2018-10919 tests: Add test case for object visibility with limited rights
       via  375f48f CVE-2018-10919 tests: Add tests for guessing confidential attributes
       via  c107e2d CVE-2018-10919 security: Add more comments to the object-specific access checks
       via  21d628e CVE-2018-10919 security: Move object-specific access checks into separate function
       via  be4c093 CVE-2018-1140 dns: Add a test to trigger the LDB casefolding issue on invalid chars
       via  b7f0ee9 Release LDB 1.5.0 for CVE-2018-1140
       via  b6b72d0 CVE-2018-1140 ldb: Add tests for search add and rename with a bad dn= DN
       via  3c1fbb1 CVE-2018-1140 ldb_tdb: Check for DN validity in add, rename and search
       via  b27d973 CVE-2018-1140 ldb_tdb: Ensure the dn in distinguishedName= is valid before use
       via  3f95957 CVE-2018-1140 ldb: Check for ldb_dn_get_casefold() failure in ldb_sqlite
       via  0998f2f CVE-2018-1140 Add NULL check for ldb_dn_get_casefold() in ltdb_index_dn_attr()
       via  c25460e CVE-2018-1139 libcli/auth: Do not allow ntlmv1 over SMB1 when it is disabled via "ntlm auth".
       via  c88f779 CVE-2018-1139 selftest: verify whether ntlmv1 can be used via SMB1 when it is disabled.
       via  947cf38 CVE-2018-1139 s3-utils: use enum ntlm_auth_level in ntlm_password_check().
       via  1d89fe9 CVE-2018-1139 libcli/auth: fix debug messages in hash_password_check()
       via  5edcaec CVE-2018-1139 libcli/auth: Add initial tests for ntlm_password_check()
      from  00513da g_lock: Simplify g_lock_trylock

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


- Log -----------------------------------------------------------------
commit a45de51c9d2e30055b3653936fcd387b28b72a34
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Mon Jul 30 14:00:18 2018 +1200

    cracknames: Fix DoS (NULL pointer de-ref) when not servicePrincipalName is set on a user
    
    This regression was introduced in Samba 4.7 by bug 12842 and in
    master git commit eb2e77970e41c1cb62c041877565e939c78ff52d.
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=13552
    
    Signed-off-by: Andrew Bartlett <abartlet at samba.org>
    Reviewed-by: Gary Lockyer <gary at catalyst.net.nz>
    
    Autobuild-User(master): Karolin Seeger <kseeger at samba.org>
    Autobuild-Date(master): Tue Aug 14 17:02:38 CEST 2018 on sn-devel-144

commit be3d4b2d8526add6a487c9977de5a42704895833
Author: Jeremy Allison <jra at samba.org>
Date:   Fri Jun 15 15:08:17 2018 -0700

    libsmb: Harden smbc_readdir_internal() against returns from malicious servers.
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=13453
    
    CVE-2018-10858: Insufficient input validation on client directory
    		listing in libsmbclient.
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Ralph Boehme <slow at samba.org>

commit 860f575fa5987413b5d5efa9a218a4cc3bf2edb9
Author: Jeremy Allison <jra at samba.org>
Date:   Fri Jun 15 15:07:17 2018 -0700

    libsmb: Ensure smbc_urlencode() can't overwrite passed in buffer.
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=13453
    
    CVE-2018-10858: Insufficient input validation on client directory
    		listing in libsmbclient.
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Ralph Boehme <slow at samba.org>

commit 7070aa384bc0f8c9979d01d64dee097dc3ad2878
Author: Tim Beale <timbeale at catalyst.net.nz>
Date:   Wed Aug 1 13:51:42 2018 +1200

    CVE-2018-10919 tests: Add extra test for dirsync deleted object corner-case
    
    The acl_read.c code contains a special case to allow dirsync to
    work-around having insufficient access rights. We had a concern that
    the dirsync module could leak sensitive information for deleted objects.
    This patch adds a test-case to prove whether or not this is happening.
    
    The new test case is similar to the existing dirsync test except:
    - We make the confidential attribute also preserve-on-delete, so it
      hangs around for deleted objcts. Because the attributes now persist
      across test case runs, I've used a different attribute to normal.
      (Technically, the dirsync search expressions are now specific enough
      that the regular attribute could be used, but it would make things
      quite fragile if someone tried to add a new test case).
    - To handle searching for deleted objects, the search expressions are
      now more complicated. Currently dirsync adds an extra-filter to the
      '!' searches to exclude deleted objects, i.e. samaccountname matches
      the test-objects AND the object is not deleted. We now extend this to
      include deleted objects with lastKnownParent equal to the test OU.
      The search expression matches either case so that we can use the same
      expression throughout the test (regardless of whether the object is
      deleted yet or not).
    
    This test proves that the dirsync corner-case does not actually leak
    sensitive information on Samba. This is due to a bug in the dirsync
    code - when the buggy line is removed, this new test promptly fails.
    Test also passes against Windows.
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=13434
    
    Signed-off-by: Tim Beale <timbeale at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>
    Reviewed-by: Gary Lockyer <gary at catalyst.net.nz>

commit fc45da529dc6794d27007a92df30f475fcea9849
Author: Tim Beale <timbeale at catalyst.net.nz>
Date:   Fri Jul 20 15:42:36 2018 +1200

    CVE-2018-10919 acl_read: Fix unauthorized attribute access via searches
    
    A user that doesn't have access to view an attribute can still guess the
    attribute's value via repeated LDAP searches. This affects confidential
    attributes, as well as ACLs applied to an object/attribute to deny
    access.
    
    Currently the code will hide objects if the attribute filter contains an
    attribute they are not authorized to see. However, the code still
    returns objects as results if confidential attribute is in the search
    expression itself, but not in the attribute filter.
    
    To fix this problem we have to check the access rights on the attributes
    in the search-tree, as well as the attributes returned in the message.
    
    Points of note:
    - I've preserved the existing dirsync logic (the dirsync module code
      suppresses the result as long as the replPropertyMetaData attribute is
      removed). However, there doesn't appear to be any test that highlights
      that this functionality is required for dirsync.
    - To avoid this fix breaking the acl.py tests, we need to still permit
      searches like 'objectClass=*', even though we don't have Read Property
      access rights for the objectClass attribute. The logic that Windows
      uses does not appear to be clearly documented, so I've made a best
      guess that seems to mirror Windows behaviour.
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=13434
    
    Signed-off-by: Tim Beale <timbeale at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>
    Reviewed-by: Gary Lockyer <gary at catalyst.net.nz>

commit 98c2e6a14fa28d0fe64641227065cd44beb55f96
Author: Tim Beale <timbeale at catalyst.net.nz>
Date:   Mon Jul 30 16:00:15 2018 +1200

    CVE-2018-10919 acl_read: Flip the logic in the dirsync check
    
    This better reflects the special case we're making for dirsync, and gets
    rid of a 'if-else' clause.
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=13434
    
    Signed-off-by: Tim Beale <timbeale at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>
    Reviewed-by: Gary Lockyer <gary at catalyst.net.nz>

commit 4234579a5d9d3e27e90cd019f85a78a214b96314
Author: Tim Beale <timbeale at catalyst.net.nz>
Date:   Thu Jul 26 12:20:49 2018 +1200

    CVE-2018-10919 acl_read: Small refactor to aclread_callback()
    
    Flip the dirsync check (to avoid a double negative), and use a helper
    boolean variable.
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=13434
    
    Signed-off-by: Tim Beale <timbeale at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>
    Reviewed-by: Gary Lockyer <gary at catalyst.net.nz>

commit 80c4e17f0f28fd13c92938216bca0543c361bd9e
Author: Tim Beale <timbeale at catalyst.net.nz>
Date:   Fri Jul 20 13:52:24 2018 +1200

    CVE-2018-10919 acl_read: Split access_mask logic out into helper function
    
    So we can re-use the same logic laster for checking the search-ops.
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=13434
    
    Signed-off-by: Tim Beale <timbeale at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>
    Reviewed-by: Gary Lockyer <gary at catalyst.net.nz>

commit ba46578f97ab35ac12ea0bd298c4180363224675
Author: Tim Beale <timbeale at catalyst.net.nz>
Date:   Fri Jul 20 13:01:00 2018 +1200

    CVE-2018-10919 security: Fix checking of object-specific CONTROL_ACCESS rights
    
    An 'Object Access Allowed' ACE that assigned 'Control Access' (CR)
    rights to a specific attribute would not actually grant access.
    
    What was happening was the remaining_access mask for the object_tree
    nodes would be Read Property (RP) + Control Access (CR). The ACE mapped
    to the schemaIDGUID for a given attribute, which would end up being a
    child node in the tree. So the CR bit was cleared for a child node, but
    not the rest of the tree. We would then check the user had the RP access
    right, which it did. However, the RP right was cleared for another node
    in the tree, which still had the CR bit set in its remaining_access
    bitmap, so Samba would not grant access.
    
    Generally, the remaining_access only ever has one bit set, which means
    this isn't a problem normally. However, in the Control Access case there
    are 2 separate bits being checked, i.e. RP + CR.
    
    One option to fix this problem would be to clear the remaining_access
    for the tree instead of just the node. However, the Windows spec is
    actually pretty clear on this: if the ACE has a CR right present, then
    you can stop any further access checks.
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=13434
    
    Signed-off-by: Tim Beale <timbeale at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>
    Reviewed-by: Gary Lockyer <gary at catalyst.net.nz>

commit 563e454e8c55e94a9509c935468b636fe0d8eb97
Author: Gary Lockyer <gary at catalyst.net.nz>
Date:   Fri Aug 3 15:51:28 2018 +1200

    CVE-2018-10919 tests: test ldap searches for non-existent attributes.
    
    It is perfectly legal to search LDAP for an attribute that is not part
    of the schema.  That part of the query should simply not match.
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=13434
    
    Signed-off-by: Gary Lockyer <gary at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>

commit 9eb8340e328757b1a1c6238f47d2a2404f7fbe38
Author: Tim Beale <timbeale at catalyst.net.nz>
Date:   Wed Jul 25 10:08:34 2018 +1200

    CVE-2018-10919 tests: Add test case for object visibility with limited rights
    
    Currently Samba is a bit disclosive with LDB_OP_PRESENT (i.e.
    attribute=*) searches compared to Windows.
    
    All the acl.py tests are based on objectClass=* searches, where Windows
    will happily tell a user about objects they have List Contents rights,
    but not Read Property rights for. However, if you change the attribute
    being searched for, suddenly the objects are no longer visible on
    Windows (whereas they are on Samba).
    
    This is a problem, because Samba can tell you about which objects have
    confidential attributes, which in itself could be disclosive.
    
    This patch adds a acl.py test-case that highlights this behaviour. The
    test passes against Windows but fails against Samba.
    
    Signed-off-by: Tim Beale <timbeale at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>
    Reviewed-by: Gary Lockyer <gary at catalyst.net.nz>

commit 375f48f779fd6c62080efb03949cc25fa9515c3b
Author: Tim Beale <timbeale at catalyst.net.nz>
Date:   Mon Jul 9 15:57:59 2018 +1200

    CVE-2018-10919 tests: Add tests for guessing confidential attributes
    
    Adds tests that assert that a confidential attribute cannot be guessed
    by an unprivileged user through wildcard DB searches.
    
    The tests basically consist of a set of DB searches/assertions that
    get run for:
    - basic searches against a confidential attribute
    - confidential attributes that get overridden by giving access to the
      user via an ACE (run against a variety of ACEs)
    - protecting a non-confidential attribute via an ACL that denies read-
      access (run against a variety of ACEs)
    - querying confidential attributes via the dirsync controls
    
    These tests all pass when run against a Windows Dc and all fail against
    a Samba DC.
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=13434
    
    Signed-off-by: Tim Beale <timbeale at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>
    Reviewed-by: Gary Lockyer <gary at catalyst.net.nz>

commit c107e2d6751b8e6b40f23c50ca4f0e28a0ac9196
Author: Tim Beale <timbeale at catalyst.net.nz>
Date:   Fri Jul 20 13:13:50 2018 +1200

    CVE-2018-10919 security: Add more comments to the object-specific access checks
    
    Reading the spec and then reading the code makes sense, but we could
    comment the code more so it makes sense on its own.
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=13434
    
    Signed-off-by: Tim Beale <timbeale at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>
    Reviewed-by: Gary Lockyer <gary at catalyst.net.nz>

commit 21d628e045712405663e77e6e01084234df6a99c
Author: Tim Beale <timbeale at catalyst.net.nz>
Date:   Thu Jul 19 16:03:36 2018 +1200

    CVE-2018-10919 security: Move object-specific access checks into separate function
    
    Object-specific access checks refer to a specific section of the
    MS-ADTS, and the code closely matches the spec. We need to extend this
    logic to properly handle the Control-Access Right (CR), so it makes
    sense to split the logic out into its own function.
    
    This patch just moves the code, and should not alter the logic (apart
    from ading in the boolean grant_access return variable.
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=13434
    
    Signed-off-by: Tim Beale <timbeale at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>
    Reviewed-by: Gary Lockyer <gary at catalyst.net.nz>

commit be4c0938b0f47d246d3aaacdc6c9a3fedf8ab6e0
Author: Kai Blin <kai at samba.org>
Date:   Fri Jun 8 18:20:16 2018 +0200

    CVE-2018-1140 dns: Add a test to trigger the LDB casefolding issue on invalid chars
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=13466
    
    Signed-off-by: Kai Blin <kai at samba.org>
    Reviewed-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>

commit b7f0ee93f58e663bb8fc0b39985aa49b254582d9
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Tue Aug 14 14:38:22 2018 +1200

    Release LDB 1.5.0 for CVE-2018-1140
    
    * Security fix for CVE-2018-1140 (NULL pointer de-reference, bug 13374)
    * Fix memory leaks and missing error checks (bug 13459, 13471, 13475)
    
    Signed-off-by: Andrew Bartlett <abartlet at samba.org>
    Reviewed-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>

commit b6b72d0063107bf9008203d8c2843033a5edb6da
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Mon May 21 15:25:58 2018 +1200

    CVE-2018-1140 ldb: Add tests for search add and rename with a bad dn= DN
    
    Signed-off-by: Andrew Bartlett <abartlet at samba.org>
    Reviewed-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=13374

commit 3c1fbb18321f61df44d7b0f0c7452ae230960293
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Mon May 21 15:23:53 2018 +1200

    CVE-2018-1140 ldb_tdb: Check for DN validity in add, rename and search
    
    This ensures we fail with a good error code before an eventual ldb_dn_get_casefold() which
    would otherwise fail.
    
    Signed-off-by: Andrew Bartlett <abartlet at samba.org>
    Reviewed-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=13374

commit b27d973341144a03db8dc824bfb3e5c65868fe7e
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Mon May 21 15:20:26 2018 +1200

    CVE-2018-1140 ldb_tdb: Ensure the dn in distinguishedName= is valid before use
    
    ldb_dn_from_ldb_val() does not validate this untrusted input, so a later
    call to ldb_dn_get_casefold() can fail if the input is not valid.
    
    Signed-off-by: Andrew Bartlett <abartlet at samba.org>
    Reviewed-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=13374

commit 3f95957d6de321c803a66f3ec67a8ff09befd16d
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Mon May 21 14:50:50 2018 +1200

    CVE-2018-1140 ldb: Check for ldb_dn_get_casefold() failure in ldb_sqlite
    
    Signed-off-by: Andrew Bartlett <abartlet at samba.org>
    Reviewed-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=13374

commit 0998f2f1bced019db4000ef4b55887abcb65f6d2
Author: Andrej Gessel <Andrej.Gessel at janztec.com>
Date:   Fri Apr 6 18:18:33 2018 +0200

    CVE-2018-1140 Add NULL check for ldb_dn_get_casefold() in ltdb_index_dn_attr()
    
    Signed-off-by: Andrej Gessel <Andrej.Gessel at janztec.com>
    Reviewed-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abartlet at samba.org>
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=13374

commit c25460ee1f1b10bf69eaaf1ac937da225854d1d1
Author: Günther Deschner <gd at samba.org>
Date:   Tue Mar 13 16:56:20 2018 +0100

    CVE-2018-1139 libcli/auth: Do not allow ntlmv1 over SMB1 when it is disabled via "ntlm auth".
    
    This fixes a regression that came in via 00db3aba6cf9ebaafdf39ee2f9c7ba5ec2281ea0.
    
    Found by Vivek Das <vdas at redhat.com> (Red Hat QE).
    
    In order to demonstrate simply run:
    
    smbclient //server/share -U user%password -mNT1 -c quit \
    --option="client ntlmv2 auth"=no \
    --option="client use spnego"=no
    
    against a server that uses "ntlm auth = ntlmv2-only" (our default
    setting).
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=13360
    
    CVE-2018-1139: Weak authentication protocol allowed.
    
    Guenther
    
    Pair-Programmed-With: Stefan Metzmacher <metze at samba.org>
    Signed-off-by: Guenther Deschner <gd at samba.org>
    Reviewed-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Gary Lockyer <gary at catalyst.net.nz>

commit c88f7795b34eef6d2432f8e9c2fffc14f419dfcd
Author: Günther Deschner <gd at samba.org>
Date:   Fri Mar 16 17:25:12 2018 +0100

    CVE-2018-1139 selftest: verify whether ntlmv1 can be used via SMB1 when it is disabled.
    
    Right now, this test will succeed.
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=13360
    
    CVE-2018-1139: Weak authentication protocol allowed.
    
    Guenther
    
    Signed-off-by: Guenther Deschner <gd at samba.org>
    Reviewed-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Gary Lockyer <gary at catalyst.net.nz>

commit 947cf385978d9cae43fe7f59a6dcf3b28dc036f1
Author: Günther Deschner <gd at samba.org>
Date:   Wed Mar 14 15:35:01 2018 +0100

    CVE-2018-1139 s3-utils: use enum ntlm_auth_level in ntlm_password_check().
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=13360
    
    CVE-2018-1139: Weak authentication protocol allowed.
    
    Guenther
    
    Signed-off-by: Guenther Deschner <gd at samba.org>
    Reviewed-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Gary Lockyer <gary at catalyst.net.nz>

commit 1d89fe91a7336950b1ba84b8680f015e228047f5
Author: Günther Deschner <gd at samba.org>
Date:   Wed Mar 14 15:36:05 2018 +0100

    CVE-2018-1139 libcli/auth: fix debug messages in hash_password_check()
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=13360
    
    CVE-2018-1139: Weak authentication protocol allowed.
    
    Guenther
    
    Signed-off-by: Guenther Deschner <gd at samba.org>
    Reviewed-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Gary Lockyer <gary at catalyst.net.nz>

commit 5edcaece4130a00d8cdd8e8b10c2c2d86a74afe0
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Fri Jul 27 08:44:24 2018 +1200

    CVE-2018-1139 libcli/auth: Add initial tests for ntlm_password_check()
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=13360
    
    Signed-off-by: Andrew Bartlett <abartlet at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Gary Lockyer <gary at catalyst.net.nz>

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

Summary of changes:
 lib/ldb/ABI/{ldb-1.4.1.sigs => ldb-1.5.0.sigs}     |    0
 ...b-util.py3-1.4.1.sigs => pyldb-util-1.5.0.sigs} |    0
 ...il.py3-1.4.1.sigs => pyldb-util.py3-1.5.0.sigs} |    0
 lib/ldb/ldb_key_value/ldb_kv.c                     |   27 +-
 lib/ldb/ldb_key_value/ldb_kv_index.c               |   18 +
 lib/ldb/ldb_key_value/ldb_kv_search.c              |   16 +
 lib/ldb/ldb_sqlite3/ldb_sqlite3.c                  |    3 +
 lib/ldb/tests/python/api.py                        |  156 +++
 lib/ldb/wscript                                    |    2 +-
 libcli/auth/ntlm_check.c                           |   10 +-
 libcli/auth/tests/ntlm_check.c                     |  413 ++++++++
 libcli/auth/wscript_build                          |   13 +
 libcli/security/access_check.c                     |  110 ++-
 python/samba/tests/dns_invalid.py                  |   87 ++
 selftest/knownfail                                 |    3 +-
 selftest/tests.py                                  |    2 +
 source3/libsmb/libsmb_dir.c                        |   57 +-
 source3/libsmb/libsmb_path.c                       |    9 +-
 source3/selftest/tests.py                          |    2 +-
 source3/utils/ntlm_auth.c                          |    6 +-
 source4/dsdb/samdb/cracknames.c                    |    8 +-
 source4/dsdb/samdb/ldb_modules/acl_read.c          |  331 ++++++-
 source4/dsdb/tests/python/acl.py                   |   68 ++
 source4/dsdb/tests/python/confidential_attr.py     | 1016 ++++++++++++++++++++
 source4/dsdb/tests/python/ldap.py                  |    9 +
 source4/selftest/tests.py                          |    6 +
 source4/torture/drs/python/cracknames.py           |   38 +
 27 files changed, 2328 insertions(+), 82 deletions(-)
 copy lib/ldb/ABI/{ldb-1.4.1.sigs => ldb-1.5.0.sigs} (100%)
 copy lib/ldb/ABI/{pyldb-util.py3-1.4.1.sigs => pyldb-util-1.5.0.sigs} (100%)
 copy lib/ldb/ABI/{pyldb-util.py3-1.4.1.sigs => pyldb-util.py3-1.5.0.sigs} (100%)
 create mode 100644 libcli/auth/tests/ntlm_check.c
 create mode 100644 python/samba/tests/dns_invalid.py
 create mode 100755 source4/dsdb/tests/python/confidential_attr.py


Changeset truncated at 500 lines:

diff --git a/lib/ldb/ABI/ldb-1.4.1.sigs b/lib/ldb/ABI/ldb-1.5.0.sigs
similarity index 100%
copy from lib/ldb/ABI/ldb-1.4.1.sigs
copy to lib/ldb/ABI/ldb-1.5.0.sigs
diff --git a/lib/ldb/ABI/pyldb-util.py3-1.4.1.sigs b/lib/ldb/ABI/pyldb-util-1.5.0.sigs
similarity index 100%
copy from lib/ldb/ABI/pyldb-util.py3-1.4.1.sigs
copy to lib/ldb/ABI/pyldb-util-1.5.0.sigs
diff --git a/lib/ldb/ABI/pyldb-util.py3-1.4.1.sigs b/lib/ldb/ABI/pyldb-util.py3-1.5.0.sigs
similarity index 100%
copy from lib/ldb/ABI/pyldb-util.py3-1.4.1.sigs
copy to lib/ldb/ABI/pyldb-util.py3-1.5.0.sigs
diff --git a/lib/ldb/ldb_key_value/ldb_kv.c b/lib/ldb/ldb_key_value/ldb_kv.c
index 3ea8d5e..d4f8967 100644
--- a/lib/ldb/ldb_key_value/ldb_kv.c
+++ b/lib/ldb/ldb_key_value/ldb_kv.c
@@ -440,6 +440,16 @@ static int ldb_kv_add_internal(struct ldb_module *module,
 	struct ldb_context *ldb = ldb_module_get_ctx(module);
 	int ret = LDB_SUCCESS;
 	unsigned int i;
+	bool valid_dn = false;
+
+	/* Check the new DN is reasonable */
+	valid_dn = ldb_dn_validate(msg->dn);
+	if (valid_dn == false) {
+		ldb_asprintf_errstring(ldb_module_get_ctx(module),
+				       "Invalid DN in ADD: %s",
+				       ldb_dn_get_linearized(msg->dn));
+		return LDB_ERR_INVALID_DN_SYNTAX;
+	}
 
 	for (i=0;i<msg->num_elements;i++) {
 		struct ldb_message_element *el = &msg->elements[i];
@@ -1229,6 +1239,7 @@ static int ldb_kv_rename(struct ldb_kv_context *ctx)
 	int ret = LDB_SUCCESS;
 	struct ldb_val  key, key_old;
 	struct ldb_dn *db_dn;
+	bool valid_dn = false;
 
 	ldb_request_set_state(req, LDB_ASYNC_PENDING);
 
@@ -1241,12 +1252,26 @@ static int ldb_kv_rename(struct ldb_kv_context *ctx)
 		return LDB_ERR_OPERATIONS_ERROR;
 	}
 
+	/* Check the new DN is reasonable */
+	valid_dn = ldb_dn_validate(req->op.rename.newdn);
+	if (valid_dn == false) {
+		ldb_asprintf_errstring(ldb_module_get_ctx(module),
+				       "Invalid New DN: %s",
+				       ldb_dn_get_linearized(req->op.rename.newdn));
+		return LDB_ERR_INVALID_DN_SYNTAX;
+	}
+
 	/* we need to fetch the old record to re-add under the new name */
 	ret = ldb_kv_search_dn1(module,
 				req->op.rename.olddn,
 				msg,
 				LDB_UNPACK_DATA_FLAG_NO_DATA_ALLOC);
-	if (ret != LDB_SUCCESS) {
+	if (ret == LDB_ERR_INVALID_DN_SYNTAX) {
+		ldb_asprintf_errstring(ldb_module_get_ctx(module),
+				       "Invalid Old DN: %s",
+				       ldb_dn_get_linearized(req->op.rename.newdn));
+		return ret;
+	} else if (ret != LDB_SUCCESS) {
 		/* not finding the old record is an error */
 		return ret;
 	}
diff --git a/lib/ldb/ldb_key_value/ldb_kv_index.c b/lib/ldb/ldb_key_value/ldb_kv_index.c
index 550f4b6..4e9d904 100644
--- a/lib/ldb/ldb_key_value/ldb_kv_index.c
+++ b/lib/ldb/ldb_key_value/ldb_kv_index.c
@@ -1172,6 +1172,7 @@ static int ldb_kv_index_dn_leaf(struct ldb_module *module,
 	}
 	if (ldb_attr_dn(tree->u.equality.attr) == 0) {
 		enum key_truncation truncation = KEY_NOT_TRUNCATED;
+		bool valid_dn = false;
 		struct ldb_dn *dn
 			= ldb_dn_from_ldb_val(list,
 					      ldb_module_get_ctx(module),
@@ -1183,6 +1184,14 @@ static int ldb_kv_index_dn_leaf(struct ldb_module *module,
 			return LDB_SUCCESS;
 		}
 
+		valid_dn = ldb_dn_validate(dn);
+		if (valid_dn == false) {
+			/* If we can't parse it, no match */
+			list->dn = NULL;
+			list->count = 0;
+			return LDB_SUCCESS;
+		}
+
 		/*
 		 * Re-use the same code we use for a SCOPE_BASE
 		 * search
@@ -1613,6 +1622,15 @@ static int ldb_kv_index_dn_attr(struct ldb_module *module,
 
 	/* work out the index key from the parent DN */
 	val.data = (uint8_t *)((uintptr_t)ldb_dn_get_casefold(dn));
+	if (val.data == NULL) {
+		const char *dn_str = ldb_dn_get_linearized(dn);
+		ldb_asprintf_errstring(ldb_module_get_ctx(module),
+				       __location__
+				       ": Failed to get casefold DN "
+				       "from: %s",
+				       dn_str);
+		return LDB_ERR_OPERATIONS_ERROR;
+	}
 	val.length = strlen((char *)val.data);
 	key = ldb_kv_index_key(ldb, ldb_kv, attr, &val, NULL, truncation);
 	if (!key) {
diff --git a/lib/ldb/ldb_key_value/ldb_kv_search.c b/lib/ldb/ldb_key_value/ldb_kv_search.c
index cd7ff52..e9964c2 100644
--- a/lib/ldb/ldb_key_value/ldb_kv_search.c
+++ b/lib/ldb/ldb_key_value/ldb_kv_search.c
@@ -294,6 +294,14 @@ int ldb_kv_search_dn1(struct ldb_module *module,
 	};
 	TALLOC_CTX *tdb_key_ctx = NULL;
 
+	bool valid_dn = ldb_dn_validate(dn);
+	if (valid_dn == false) {
+		ldb_asprintf_errstring(ldb_module_get_ctx(module),
+				       "Invalid Base DN: %s",
+				       ldb_dn_get_linearized(dn));
+		return LDB_ERR_INVALID_DN_SYNTAX;
+	}
+
 	if (ldb_kv->cache->GUID_index_attribute == NULL ||
 	    ldb_dn_is_special(dn)) {
 
@@ -789,6 +797,14 @@ int ldb_kv_search(struct ldb_kv_context *ctx)
 					       ldb_dn_get_linearized(req->op.search.base));
 		}
 
+	} else if (ldb_dn_validate(req->op.search.base) == false) {
+
+		/* We don't want invalid base DNs here */
+		ldb_asprintf_errstring(ldb,
+				       "Invalid Base DN: %s",
+				       ldb_dn_get_linearized(req->op.search.base));
+		ret = LDB_ERR_INVALID_DN_SYNTAX;
+
 	} else {
 		/* If we are not checking the base DN life is easy */
 		ret = LDB_SUCCESS;
diff --git a/lib/ldb/ldb_sqlite3/ldb_sqlite3.c b/lib/ldb/ldb_sqlite3/ldb_sqlite3.c
index f94dc99..0f5abf8 100644
--- a/lib/ldb/ldb_sqlite3/ldb_sqlite3.c
+++ b/lib/ldb/ldb_sqlite3/ldb_sqlite3.c
@@ -323,6 +323,9 @@ static char *parsetree_to_sql(struct ldb_module *module,
 		 	const char *cdn = ldb_dn_get_casefold(
 						ldb_dn_new(mem_ctx, ldb,
 							      (const char *)value.data));
+			if (cdn == NULL) {
+				return NULL;
+			}
 
 			return lsqlite3_tprintf(mem_ctx,
 						"SELECT eid FROM ldb_entry "
diff --git a/lib/ldb/tests/python/api.py b/lib/ldb/tests/python/api.py
index 9d01535..e401096 100755
--- a/lib/ldb/tests/python/api.py
+++ b/lib/ldb/tests/python/api.py
@@ -423,6 +423,19 @@ class SimpleLdb(LdbBaseTest):
         finally:
             l.delete(ldb.Dn(l, "dc=bar"))
 
+    def test_rename_bad_string_dns(self):
+        l = ldb.Ldb(self.url(), flags=self.flags())
+        m = ldb.Message()
+        m.dn = ldb.Dn(l, "dc=foo8")
+        m["bla"] = b"bla"
+        m["objectUUID"] = b"0123456789abcdef"
+        self.assertEqual(len(l.search()), 0)
+        l.add(m)
+        self.assertEqual(len(l.search()), 1)
+        self.assertRaises(ldb.LdbError,lambda: l.rename("dcXfoo8", "dc=bar"))
+        self.assertRaises(ldb.LdbError,lambda: l.rename("dc=foo8", "dcXbar"))
+        l.delete(ldb.Dn(l, "dc=foo8"))
+
     def test_empty_dn(self):
         l = ldb.Ldb(self.url(), flags=self.flags())
         self.assertEqual(0, len(l.search()))
@@ -1192,6 +1205,110 @@ class SearchTests(LdbBaseTest):
         # At some point we should fix this, but it isn't trivial
         self.assertEqual(len(res11), 1)
 
+    def test_distinguishedName_filter_one(self):
+        """Testing that a distinguishedName= filter succeeds
+        when the scope is SCOPE_ONELEVEL.
+
+        This should be made more consistent, but for now lock in
+        the behaviour
+
+        """
+
+        res11 = self.l.search(base="DC=SAMBA,DC=ORG",
+                              scope=ldb.SCOPE_ONELEVEL,
+                              expression="(distinguishedName=OU=OU1,DC=SAMBA,DC=ORG)")
+        self.assertEqual(len(res11), 1)
+
+    def test_distinguishedName_filter_subtree(self):
+        """Testing that a distinguishedName= filter succeeds
+        when the scope is SCOPE_SUBTREE"""
+
+        res11 = self.l.search(base="DC=SAMBA,DC=ORG",
+                              scope=ldb.SCOPE_SUBTREE,
+                              expression="(distinguishedName=OU=OU1,DC=SAMBA,DC=ORG)")
+        self.assertEqual(len(res11), 1)
+
+    def test_distinguishedName_filter_base(self):
+        """Testing that (incorrectly) a distinguishedName= filter works
+        when the scope is SCOPE_BASE"""
+
+        res11 = self.l.search(base="OU=OU1,DC=SAMBA,DC=ORG",
+                              scope=ldb.SCOPE_BASE,
+                              expression="(distinguishedName=OU=OU1,DC=SAMBA,DC=ORG)")
+
+        # At some point we should fix this, but it isn't trivial
+        self.assertEqual(len(res11), 1)
+
+    def test_bad_dn_filter_base(self):
+        """Testing that a dn= filter on an invalid DN works
+        when the scope is SCOPE_BASE but
+        returns zero results"""
+
+        res11 = self.l.search(base="OU=OU1,DC=SAMBA,DC=ORG",
+                              scope=ldb.SCOPE_BASE,
+                              expression="(dn=OU=OU1,DC=SAMBA,DCXXXX)")
+
+        # At some point we should fix this, but it isn't trivial
+        self.assertEqual(len(res11), 0)
+
+
+    def test_bad_dn_filter_one(self):
+        """Testing that a dn= filter succeeds but returns zero
+        results when the DN is not valid on a SCOPE_ONELEVEL search
+
+        """
+
+        res11 = self.l.search(base="DC=SAMBA,DC=ORG",
+                              scope=ldb.SCOPE_ONELEVEL,
+                              expression="(dn=OU=OU1,DC=SAMBA,DCXXXX)")
+        self.assertEqual(len(res11), 0)
+
+    def test_bad_dn_filter_subtree(self):
+        """Testing that a dn= filter succeeds but returns zero
+        results when the DN is not valid on a SCOPE_SUBTREE search
+
+        """
+
+        res11 = self.l.search(base="DC=SAMBA,DC=ORG",
+                              scope=ldb.SCOPE_SUBTREE,
+                              expression="(dn=OU=OU1,DC=SAMBA,DCXXXX)")
+        self.assertEqual(len(res11), 0)
+
+    def test_bad_distinguishedName_filter_base(self):
+        """Testing that a distinguishedName= filter on an invalid DN works
+        when the scope is SCOPE_BASE but
+        returns zero results"""
+
+        res11 = self.l.search(base="OU=OU1,DC=SAMBA,DC=ORG",
+                              scope=ldb.SCOPE_BASE,
+                              expression="(distinguishedName=OU=OU1,DC=SAMBA,DCXXXX)")
+
+        # At some point we should fix this, but it isn't trivial
+        self.assertEqual(len(res11), 0)
+
+
+    def test_bad_distinguishedName_filter_one(self):
+        """Testing that a distinguishedName= filter succeeds but returns zero
+        results when the DN is not valid on a SCOPE_ONELEVEL search
+
+        """
+
+        res11 = self.l.search(base="DC=SAMBA,DC=ORG",
+                              scope=ldb.SCOPE_ONELEVEL,
+                              expression="(distinguishedName=OU=OU1,DC=SAMBA,DCXXXX)")
+        self.assertEqual(len(res11), 0)
+
+    def test_bad_distinguishedName_filter_subtree(self):
+        """Testing that a distinguishedName= filter succeeds but returns zero
+        results when the DN is not valid on a SCOPE_SUBTREE search
+
+        """
+
+        res11 = self.l.search(base="DC=SAMBA,DC=ORG",
+                              scope=ldb.SCOPE_SUBTREE,
+                              expression="(distinguishedName=OU=OU1,DC=SAMBA,DCXXXX)")
+        self.assertEqual(len(res11), 0)
+
 
 # Run the search tests against an lmdb backend
 class SearchTestsLmdb(SearchTests):
@@ -1383,6 +1500,17 @@ class AddModifyTests(LdbBaseTest):
             enum = err.args[0]
             self.assertEqual(enum, ldb.ERR_ENTRY_ALREADY_EXISTS)
 
+    def test_add_bad(self):
+        try:
+            self.l.add({"dn": "BAD,DC=SAMBA,DC=ORG",
+                        "name": b"Admins",
+                        "x": "z", "y": "a",
+                        "objectUUID": b"0123456789abcde1"})
+            self.fail("Should have failed adding entry with invalid DN")
+        except ldb.LdbError as err:
+            enum = err.args[0]
+            self.assertEqual(enum, ldb.ERR_INVALID_DN_SYNTAX)
+
     def test_add_del_add(self):
         self.l.add({"dn": "OU=DUP,DC=SAMBA,DC=ORG",
                     "name": b"Admins",
@@ -1477,6 +1605,34 @@ class AddModifyTests(LdbBaseTest):
             enum = err.args[0]
             self.assertEqual(enum, ldb.ERR_NO_SUCH_OBJECT)
 
+    def test_move_bad(self):
+        self.l.add({"dn": "OU=DUP2,DC=SAMBA,DC=ORG",
+                    "name": b"Admins",
+                    "x": "z", "y": "a",
+                    "objectUUID": b"0123456789abcde2"})
+
+        try:
+            self.l.rename("OUXDUP,DC=SAMBA,DC=ORG",
+                          "OU=DUP2,DC=SAMBA,DC=ORG")
+            self.fail("Should have failed on invalid DN")
+        except ldb.LdbError as err:
+            enum = err.args[0]
+            self.assertEqual(enum, ldb.ERR_INVALID_DN_SYNTAX)
+
+    def test_move_bad2(self):
+        self.l.add({"dn": "OU=DUP2,DC=SAMBA,DC=ORG",
+                    "name": b"Admins",
+                    "x": "z", "y": "a",
+                    "objectUUID": b"0123456789abcde2"})
+
+        try:
+            self.l.rename("OU=DUP,DC=SAMBA,DC=ORG",
+                          "OUXDUP2,DC=SAMBA,DC=ORG")
+            self.fail("Should have failed on missing")
+        except ldb.LdbError as err:
+            enum = err.args[0]
+            self.assertEqual(enum, ldb.ERR_INVALID_DN_SYNTAX)
+
     def test_move_fail_move_add(self):
         self.l.add({"dn": "OU=DUP,DC=SAMBA,DC=ORG",
                     "name": b"Admins",
diff --git a/lib/ldb/wscript b/lib/ldb/wscript
index 5d14413..ac6aa8b 100644
--- a/lib/ldb/wscript
+++ b/lib/ldb/wscript
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 
 APPNAME = 'ldb'
-VERSION = '1.4.1'
+VERSION = '1.5.0'
 
 blddir = 'bin'
 
diff --git a/libcli/auth/ntlm_check.c b/libcli/auth/ntlm_check.c
index 3b02adc..b68e9c8 100644
--- a/libcli/auth/ntlm_check.c
+++ b/libcli/auth/ntlm_check.c
@@ -224,7 +224,7 @@ NTSTATUS hash_password_check(TALLOC_CTX *mem_ctx,
 			     const struct samr_Password *stored_nt)
 {
 	if (stored_nt == NULL) {
-		DEBUG(3,("ntlm_password_check: NO NT password stored for user %s.\n", 
+		DEBUG(3,("hash_password_check: NO NT password stored for user %s.\n",
 			 username));
 	}
 
@@ -232,14 +232,14 @@ NTSTATUS hash_password_check(TALLOC_CTX *mem_ctx,
 		if (memcmp(client_nt->hash, stored_nt->hash, sizeof(stored_nt->hash)) == 0) {
 			return NT_STATUS_OK;
 		} else {
-			DEBUG(3,("ntlm_password_check: Interactive logon: NT password check failed for user %s\n",
+			DEBUG(3,("hash_password_check: Interactive logon: NT password check failed for user %s\n",
 				 username));
 			return NT_STATUS_WRONG_PASSWORD;
 		}
 
 	} else if (client_lanman && stored_lanman) {
 		if (!lanman_auth) {
-			DEBUG(3,("ntlm_password_check: Interactive logon: only LANMAN password supplied for user %s, and LM passwords are disabled!\n",
+			DEBUG(3,("hash_password_check: Interactive logon: only LANMAN password supplied for user %s, and LM passwords are disabled!\n",
 				 username));
 			return NT_STATUS_WRONG_PASSWORD;
 		}
@@ -250,7 +250,7 @@ NTSTATUS hash_password_check(TALLOC_CTX *mem_ctx,
 		if (memcmp(client_lanman->hash, stored_lanman->hash, sizeof(stored_lanman->hash)) == 0) {
 			return NT_STATUS_OK;
 		} else {
-			DEBUG(3,("ntlm_password_check: Interactive logon: LANMAN password check failed for user %s\n",
+			DEBUG(3,("hash_password_check: Interactive logon: LANMAN password check failed for user %s\n",
 				 username));
 			return NT_STATUS_WRONG_PASSWORD;
 		}
@@ -572,7 +572,7 @@ NTSTATUS ntlm_password_check(TALLOC_CTX *mem_ctx,
 	   - I think this is related to Win9X pass-though authentication
 	*/
 	DEBUG(4,("ntlm_password_check: Checking NT MD4 password in LM field\n"));
-	if (ntlm_auth) {
+	if (ntlm_auth == NTLM_AUTH_ON) {
 		if (smb_pwd_check_ntlmv1(mem_ctx, 
 					 lm_response, 
 					 stored_nt->hash, challenge,
diff --git a/libcli/auth/tests/ntlm_check.c b/libcli/auth/tests/ntlm_check.c
new file mode 100644
index 0000000..e87a0a2
--- /dev/null
+++ b/libcli/auth/tests/ntlm_check.c
@@ -0,0 +1,413 @@
+/*
+ * Unit tests for the ntlm_check password hash check library.
+ *
+ *  Copyright (C) Andrew Bartlett <abartlet at samba.org> 2018
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+/*
+ * from cmocka.c:
+ * These headers or their equivalents should be included prior to
+ * including
+ * this header file.
+ *
+ * #include <stdarg.h>
+ * #include <stddef.h>
+ * #include <setjmp.h>
+ *
+ * This allows test applications to use custom definitions of C standard
+ * library functions and types.
+ *
+ */
+
+/*
+ * Note that the messaging routines (audit_message_send and get_event_server)
+ * are not tested by these unit tests.  Currently they are for integration
+ * test support, and as such are exercised by the integration tests.
+ */
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <cmocka.h>
+
+#include "includes.h"
+#include "../lib/crypto/crypto.h"
+#include "librpc/gen_ndr/netlogon.h"
+#include "libcli/auth/libcli_auth.h"
+#include "auth/credentials/credentials.h"
+
+struct ntlm_state {
+	const char *username;
+	const char *domain;
+	DATA_BLOB challenge;
+	DATA_BLOB ntlm;
+	DATA_BLOB lm;
+	DATA_BLOB ntlm_key;
+	DATA_BLOB lm_key;
+	const struct samr_Password *nt_hash;
+};
+
+static int test_ntlm_setup_with_options(void **state,
+					int flags, bool upn)
+{
+	NTSTATUS status;
+	DATA_BLOB challenge = {
+		.data = discard_const_p(uint8_t, "I am a teapot"),
+		.length = 8
+	};
+	struct ntlm_state *ntlm_state = talloc(NULL, struct ntlm_state);
+	DATA_BLOB target_info = NTLMv2_generate_names_blob(ntlm_state,
+							   NULL,
+							   "serverdom");
+	struct cli_credentials *creds = cli_credentials_init(ntlm_state);
+	cli_credentials_set_username(creds,
+				     "testuser",
+				     CRED_SPECIFIED);
+	cli_credentials_set_domain(creds,
+				   "testdom",
+				   CRED_SPECIFIED);
+	cli_credentials_set_workstation(creds,
+					"testwksta",
+					CRED_SPECIFIED);
+	cli_credentials_set_password(creds,


-- 
Samba Shared Repository



More information about the samba-cvs mailing list