[SCM] Samba Shared Repository - branch master updated
Stefan Metzmacher
metze at samba.org
Thu May 16 14:52:02 MDT 2013
The branch, master has been updated
via 2ed6b08 auth: Ensure auth_sam is not used on the AD DC
via 9b24f65 dsdb: Expand on what the error finding the ntSecurityDescriptor was in acl_read
via 60d1c2d autobuild.py add ntdb to the samba-libs task, to ensure it works as an external library
via 73628e9 rpc_server-drsuapi: Include the failing DN when unable to convert DB objects to DRS
via 11e716a dsdb-schema: Print clear debug message when we find a OID in our local DB we cannot convert
via 25402e0 dsdb-repl: Allow the name attribute (and name-based schema lookups) to be skipped in dsdb_repl_make_working_schema()
via 3482060 python-samba-tool domain classicupgrade: Use transactions when adding users/groups/members
via ef895fe samba-tool dbcheck: Use dsdb.DS_GUID_DELETED_OBJECTS_CONTAINER rather than the literal value
via 9c5756c python-samba-tool domain classicupgrade: Correct message about re-promoting BDCs
via 1165776 pdb_ldap: Do not skip accounts without a sambaAcctFlags value
via 2c04719 python-samba-tool domain classicupgrade: Actually Skip domain trust accounts
via 2e1f143 python-samba-tool domain classicupgrade: Skip machine accounts that do not end in $
via 2044541 build: Do not set PATH in install_with_python now we set $PYTHON
via 10f6926 s3-rpc_server: Ensure we are root when starting and usiing gensec
via 9430310 gensec: Make the no-hostname status message much less scary
via 768c3bb build: Blacklist the release-4-0-0 provision as well
from 46e98cf dns: Fix allocation of txt_record in txt record tests
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 2ed6b0818a68ac07bd9c4270522aa8e2098ec140
Author: Andrew Bartlett <abartlet at samba.org>
Date: Thu May 16 10:32:50 2013 +1000
auth: Ensure auth_sam is not used on the AD DC
Reviewed-by: Stefan Metzmacher <metze at samba.org>
Autobuild-User(master): Stefan Metzmacher <metze at samba.org>
Autobuild-Date(master): Thu May 16 22:51:26 CEST 2013 on sn-devel-104
commit 9b24f6523e8c78879ada3e6d2927ebbb21dabfdc
Author: Andrew Bartlett <abartlet at samba.org>
Date: Mon May 13 14:06:14 2013 +1200
dsdb: Expand on what the error finding the ntSecurityDescriptor was in acl_read
Reviewed-by: Stefan Metzmacher <metze at samba.org>
commit 60d1c2d5288b01bd9a99f90bb0a9d0ff3c873412
Author: Andrew Bartlett <abartlet at samba.org>
Date: Mon May 13 14:05:28 2013 +1200
autobuild.py add ntdb to the samba-libs task, to ensure it works as an external library
Reviewed-by: Stefan Metzmacher <metze at samba.org>
commit 73628e9cd9005478cdb225f01917eb54270a3c05
Author: Andrew Bartlett <abartlet at samba.org>
Date: Tue Apr 2 16:10:03 2013 +1100
rpc_server-drsuapi: Include the failing DN when unable to convert DB objects to DRS
This is a very serious situation (it should not happen) so getting information on the
objects that this happens for would be very helpful.
Andrew Bartlett
Reviewed-by: Stefan Metzmacher <metze at samba.org>
commit 11e716ae0736067272868b997367e94ebf1cdf3b
Author: Andrew Bartlett <abartlet at samba.org>
Date: Tue Apr 2 15:36:47 2013 +1100
dsdb-schema: Print clear debug message when we find a OID in our local DB we cannot convert
We need to work out why we are unable to make a mapping for an OID in our database, because
we should not have been able to add it without such a mapping.
Andrew Bartlett
Reviewed-by: Stefan Metzmacher <metze at samba.org>
commit 25402e06bcdf98e346fdbbfa7e8740504329b42f
Author: Andrew Bartlett <abartlet at samba.org>
Date: Tue Mar 26 11:51:38 2013 +1100
dsdb-repl: Allow the name attribute (and name-based schema lookups) to be skipped in dsdb_repl_make_working_schema()
This allows us to use a schema that may only be valid for attributeID based lookups, during the schema load.
Andrew Bartlett
Reviewed-by: Stefan Metzmacher <metze at samba.org>
commit 34820602715cc8936179091e188993f7a42808ac
Author: Andrew Bartlett <abartlet at samba.org>
Date: Sun Apr 14 14:36:08 2013 +1000
python-samba-tool domain classicupgrade: Use transactions when adding users/groups/members
This should make things a bit faster when importing very large numbers of users
as we will not constantly rewrite the indicies on disk.
Andrew Bartlett
Reviewed-by: Stefan Metzmacher <metze at samba.org>
commit ef895fe9e4e4043bd4ce1db5007fd2016f0b8673
Author: Andrew Bartlett <abartlet at samba.org>
Date: Sun Apr 14 13:32:05 2013 +1000
samba-tool dbcheck: Use dsdb.DS_GUID_DELETED_OBJECTS_CONTAINER rather than the literal value
This is better practice.
Andrew Bartlett
Reviewed-by: Stefan Metzmacher <metze at samba.org>
commit 9c5756c077896e6a3ff8e610acf706f203e4dede
Author: Andrew Bartlett <abartlet at samba.org>
Date: Thu Apr 11 18:13:16 2013 +1000
python-samba-tool domain classicupgrade: Correct message about re-promoting BDCs
Reviewed-by: Stefan Metzmacher <metze at samba.org>
commit 1165776d861e8e4f2fe26dcaf1e9dabdcc0a4179
Author: Andrew Bartlett <abartlet at samba.org>
Date: Thu Apr 11 17:21:33 2013 +1000
pdb_ldap: Do not skip accounts without a sambaAcctFlags value
We allow this to mean a sambaAcctFlags value of zero in other parts of the code
and by allowing these users to show up in a search, we can read and correct them
during the classicupgrade, rather than not know they exist at all.
Most parts of the code do not look for ACB_NORMAL, which is why
these users appear to work.
Andrew Bartlett
Reviewed-by: Stefan Metzmacher <metze at samba.org>
commit 2c047198caccea30e8583dda869d513913fe1702
Author: Andrew Bartlett <abartlet at samba.org>
Date: Thu Apr 11 09:33:16 2013 +1000
python-samba-tool domain classicupgrade: Actually Skip domain trust accounts
Reviewed-by: Stefan Metzmacher <metze at samba.org>
commit 2e1f14355c162dde0190ac2cb105a34607134e02
Author: Andrew Bartlett <abartlet at samba.org>
Date: Thu Apr 11 09:32:13 2013 +1000
python-samba-tool domain classicupgrade: Skip machine accounts that do not end in $
These accounts will not work anyway, as all the domain member lookup code in netlogon expects the $.
Andrew Bartlett
Reviewed-by: Stefan Metzmacher <metze at samba.org>
commit 20445415307ae3d6524995d0128862dcbc119684
Author: Andrew Bartlett <abartlet at samba.org>
Date: Wed May 8 12:59:05 2013 +1200
build: Do not set PATH in install_with_python now we set $PYTHON
This will ensure that the scripts get rewritten to use this specific python, as it
will not be found in the path by the waf scripts.
Andrew Bartlett
Reviewed-by: Stefan Metzmacher <metze at samba.org>
commit 10f6926aaa6a8c49b29e183d12f6f767072ecff7
Author: Andrew Bartlett <abartlet at samba.org>
Date: Thu May 2 16:29:21 2013 +1200
s3-rpc_server: Ensure we are root when starting and usiing gensec
This fixes bug 9465.
Andrew Bartlett
Reviewed-by: Stefan Metzmacher <metze at samba.org>
commit 9430310dc3adaf98dbff494a1056e02f8750c41d
Author: Andrew Bartlett <abartlet at samba.org>
Date: Mon Apr 29 10:00:04 2013 +1000
gensec: Make the no-hostname status message much less scary
Reviewed-by: Stefan Metzmacher <metze at samba.org>
commit 768c3bb16ae8aac2d96d4fa0d8a7593fc9be6ca8
Author: Andrew Bartlett <abartlet at samba.org>
Date: Fri Apr 26 16:44:00 2013 +1000
build: Blacklist the release-4-0-0 provision as well
This reduces the size of the published tarball while ensuring we test with it
during autobuild.
Andrew Bartlett
Reviewed-by: Stefan Metzmacher <metze at samba.org>
-----------------------------------------------------------------------
Summary of changes:
install_with_python.sh | 2 -
python/samba/dbchecker.py | 2 +-
python/samba/upgrade.py | 118 ++++++++++++++++++++---------
script/autobuild.py | 6 +-
source3/auth/auth_sam.c | 7 ++
source3/passdb/pdb_ldap.c | 8 +-
source3/rpc_server/dcesrv_auth_generic.c | 38 ++++++++--
source4/auth/gensec/gensec_gssapi.c | 2 +-
source4/auth/gensec/gensec_krb5.c | 2 +-
source4/dsdb/repl/replicated_objects.c | 31 +++++---
source4/dsdb/samdb/ldb_modules/acl_read.c | 10 ++-
source4/dsdb/schema/schema_prefixmap.c | 1 +
source4/rpc_server/drsuapi/getncchanges.c | 10 ++-
wscript | 2 +-
14 files changed, 168 insertions(+), 71 deletions(-)
Changeset truncated at 500 lines:
diff --git a/install_with_python.sh b/install_with_python.sh
index 7b51e5c..e545ecc 100755
--- a/install_with_python.sh
+++ b/install_with_python.sh
@@ -12,8 +12,6 @@ fi
PREFIX="$1"
shift
-PATH=$PREFIX/python/bin:$PATH
-export PATH
LD_LIBRARY_PATH=$PREFIX/python/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
diff --git a/python/samba/dbchecker.py b/python/samba/dbchecker.py
index d0d0ab3..e88f876 100644
--- a/python/samba/dbchecker.py
+++ b/python/samba/dbchecker.py
@@ -251,7 +251,7 @@ newSuperior: %s""" % (str(from_dn), str(to_rdn), str(to_base)))
def is_deleted_objects_dn(self, dsdb_dn):
'''see if a dsdb_Dn is the special Deleted Objects DN'''
- return dsdb_dn.prefix == "B:32:18E2EA80684F11D2B9AA00C04F79F805:"
+ return dsdb_dn.prefix == "B:32:%s:" % dsdb.DS_GUID_DELETED_OBJECTS_CONTAINER
def err_deleted_dn(self, dn, attrname, val, dsdb_dn, correct_dn):
"""handle a DN pointing to a deleted object"""
diff --git a/python/samba/upgrade.py b/python/samba/upgrade.py
index af854ef..817981e 100644
--- a/python/samba/upgrade.py
+++ b/python/samba/upgrade.py
@@ -698,15 +698,17 @@ def upgrade_from_samba3(samba3, logger, targetdir, session_info=None,
user = s3db.getsampwnam(username)
acct_type = (user.acct_ctrl & (samr.ACB_NORMAL|samr.ACB_WSTRUST|samr.ACB_SVRTRUST|samr.ACB_DOMTRUST))
- if (acct_type == samr.ACB_NORMAL or acct_type == samr.ACB_WSTRUST):
- pass
-
- elif acct_type == samr.ACB_SVRTRUST:
- logger.warn(" Demoting BDC account trust for %s, this DC must be elevated to an AD DC using 'samba-tool domain promote'" % username[:-1])
+ if acct_type == samr.ACB_SVRTRUST:
+ logger.warn(" Demoting BDC account trust for %s, this DC must be elevated to an AD DC using 'samba-tool domain dcpromo'" % username[:-1])
user.acct_ctrl = (user.acct_ctrl & ~samr.ACB_SVRTRUST) | samr.ACB_WSTRUST
elif acct_type == samr.ACB_DOMTRUST:
logger.warn(" Skipping inter-domain trust from domain %s, this trust must be re-created as an AD trust" % username[:-1])
+ continue
+
+ elif acct_type == (samr.ACB_WSTRUST) and username[-1] != '$':
+ logger.warn(" Skipping account %s that has ACB_WSTRUST (W) set but does not end in $. This account can not have worked, and is probably left over from a misconfiguration." % username)
+ continue
elif acct_type == (samr.ACB_NORMAL|samr.ACB_WSTRUST) and username[-1] == '$':
logger.warn(" Fixing account %s which had both ACB_NORMAL (U) and ACB_WSTRUST (W) set. Account will be marked as ACB_WSTRUST (W), i.e. as a domain member" % username)
@@ -716,6 +718,12 @@ def upgrade_from_samba3(samba3, logger, targetdir, session_info=None,
logger.warn(" Fixing account %s which had both ACB_NORMAL (U) and ACB_SVRTRUST (S) set. Account will be marked as ACB_WSTRUST (S), i.e. as a domain member" % username)
user.acct_ctrl = (user.acct_ctrl & ~samr.ACB_NORMAL)
+ elif acct_type == 0 and username[-1] != '$':
+ user.acct_ctrl = (user.acct_ctrl | samr.ACB_NORMAL)
+
+ elif (acct_type == samr.ACB_NORMAL or acct_type == samr.ACB_WSTRUST):
+ pass
+
else:
raise ProvisioningError("""Failed to upgrade due to invalid account %s, account control flags 0x%08X must have exactly one of
ACB_NORMAL (N, 0x%08X), ACB_WSTRUST (W 0x%08X), ACB_SVRTRUST (S 0x%08X) or ACB_DOMTRUST (D 0x%08X).
@@ -883,40 +891,78 @@ Please fix this account before attempting to upgrade again
# Connect to samba4 backend
s4_passdb = passdb.PDB(new_lp_ctx.get("passdb backend"))
- # Export groups to samba4 backend
- logger.info("Importing groups")
- for g in grouplist:
- # Ignore uninitialized groups (gid = -1)
- if g.gid != -1:
- add_group_from_mapping_entry(result.samdb, g, logger)
- add_ad_posix_idmap_entry(result.samdb, g.sid, g.gid, "ID_TYPE_GID", logger)
- add_posix_attrs(samdb=result.samdb, sid=g.sid, name=g.nt_name, nisdomain=domainname.lower(), xid_type="ID_TYPE_GID", logger=logger)
-
- # Export users to samba4 backend
- logger.info("Importing users")
- for username in userdata:
- if username.lower() == 'administrator':
- if userdata[username].user_sid != dom_sid(str(domainsid) + "-500"):
- logger.error("User 'Administrator' in your existing directory has SID %s, expected it to be %s" % (userdata[username].user_sid, dom_sid(str(domainsid) + "-500")))
- raise ProvisioningError("User 'Administrator' in your existing directory does not have SID ending in -500")
- if username.lower() == 'root':
- if userdata[username].user_sid == dom_sid(str(domainsid) + "-500"):
- logger.warn('User root has been replaced by Administrator')
- else:
- logger.warn('User root has been kept in the directory, it should be removed in favour of the Administrator user')
+ # Start a new transaction (should speed this up a little, due to index churn)
+ result.samdb.transaction_start()
- s4_passdb.add_sam_account(userdata[username])
- if username in uids:
- add_ad_posix_idmap_entry(result.samdb, userdata[username].user_sid, uids[username], "ID_TYPE_UID", logger)
- if (username in homes) and (homes[username] is not None) and \
- (username in shells) and (shells[username] is not None) and \
- (username in pgids) and (pgids[username] is not None):
- add_posix_attrs(samdb=result.samdb, sid=userdata[username].user_sid, name=username, nisdomain=domainname.lower(), xid_type="ID_TYPE_UID", home=homes[username], shell=shells[username], pgid=pgids[username], logger=logger)
+ logger.info("Adding groups")
+ try:
+ # Export groups to samba4 backend
+ logger.info("Importing groups")
+ for g in grouplist:
+ # Ignore uninitialized groups (gid = -1)
+ if g.gid != -1:
+ add_group_from_mapping_entry(result.samdb, g, logger)
+ add_ad_posix_idmap_entry(result.samdb, g.sid, g.gid, "ID_TYPE_GID", logger)
+ add_posix_attrs(samdb=result.samdb, sid=g.sid, name=g.nt_name, nisdomain=domainname.lower(), xid_type="ID_TYPE_GID", logger=logger)
+
+ except:
+ # We need this, so that we do not give even more errors due to not cancelling the transaction
+ result.samdb.transaction_cancel()
+ raise
+
+ logger.info("Commiting 'add groups' transaction to disk")
+ result.samdb.transaction_commit()
+
+ logger.info("Adding users")
+ # Start a new transaction (should speed this up a little, due to index churn)
+ result.samdb.transaction_start()
+
+ try:
+ # Export users to samba4 backend
+ logger.info("Importing users")
+ for username in userdata:
+ if username.lower() == 'administrator':
+ if userdata[username].user_sid != dom_sid(str(domainsid) + "-500"):
+ logger.error("User 'Administrator' in your existing directory has SID %s, expected it to be %s" % (userdata[username].user_sid, dom_sid(str(domainsid) + "-500")))
+ raise ProvisioningError("User 'Administrator' in your existing directory does not have SID ending in -500")
+ if username.lower() == 'root':
+ if userdata[username].user_sid == dom_sid(str(domainsid) + "-500"):
+ logger.warn('User root has been replaced by Administrator')
+ else:
+ logger.warn('User root has been kept in the directory, it should be removed in favour of the Administrator user')
+
+ s4_passdb.add_sam_account(userdata[username])
+ if username in uids:
+ add_ad_posix_idmap_entry(result.samdb, userdata[username].user_sid, uids[username], "ID_TYPE_UID", logger)
+ if (username in homes) and (homes[username] is not None) and \
+ (username in shells) and (shells[username] is not None) and \
+ (username in pgids) and (pgids[username] is not None):
+ add_posix_attrs(samdb=result.samdb, sid=userdata[username].user_sid, name=username, nisdomain=domainname.lower(), xid_type="ID_TYPE_UID", home=homes[username], shell=shells[username], pgid=pgids[username], logger=logger)
+
+ except:
+ # We need this, so that we do not give even more errors due to not cancelling the transaction
+ result.samdb.transaction_cancel()
+ raise
+
+ logger.info("Commiting 'add users' transaction to disk")
+ result.samdb.transaction_commit()
logger.info("Adding users to groups")
- for g in grouplist:
- if str(g.sid) in groupmembers:
- add_users_to_group(result.samdb, g, groupmembers[str(g.sid)], logger)
+ # Start a new transaction (should speed this up a little, due to index churn)
+ result.samdb.transaction_start()
+
+ try:
+ for g in grouplist:
+ if str(g.sid) in groupmembers:
+ add_users_to_group(result.samdb, g, groupmembers[str(g.sid)], logger)
+
+ except:
+ # We need this, so that we do not give even more errors due to not cancelling the transaction
+ result.samdb.transaction_cancel()
+ raise
+
+ logger.info("Commiting 'add users to groups' transaction to disk")
+ result.samdb.transaction_commit()
# Set password for administrator
if admin_user:
diff --git a/script/autobuild.py b/script/autobuild.py
index 1182d7f..8c88dc9 100755
--- a/script/autobuild.py
+++ b/script/autobuild.py
@@ -94,6 +94,10 @@ tasks = {
("tdb-make", "cd lib/tdb && make", "text/plain"),
("tdb-install", "cd lib/tdb && make install", "text/plain"),
+ ("ntdb-configure", "cd lib/ntdb && PYTHONPATH=${PYTHON_PREFIX}/site-packages:$PYTHONPATH PKG_CONFIG_PATH=$PKG_CONFIG_PATH:${PREFIX_DIR}/lib/pkgconfig ./configure --bundled-libraries=NONE --abi-check --enable-debug -C ${PREFIX}", "text/plain"),
+ ("ntdb-make", "cd lib/ntdb && make", "text/plain"),
+ ("ntdb-install", "cd lib/ntdb && make install", "text/plain"),
+
("tevent-configure", "cd lib/tevent && PYTHONPATH=${PYTHON_PREFIX}/site-packages:$PYTHONPATH PKG_CONFIG_PATH=$PKG_CONFIG_PATH:${PREFIX_DIR}/lib/pkgconfig ./configure --bundled-libraries=NONE --abi-check --enable-debug -C ${PREFIX}", "text/plain"),
("tevent-make", "cd lib/tevent && make", "text/plain"),
("tevent-install", "cd lib/tevent && make install", "text/plain"),
@@ -102,7 +106,7 @@ tasks = {
("ldb-make", "cd lib/ldb && make", "text/plain"),
("ldb-install", "cd lib/ldb && make install", "text/plain"),
- ("configure", "PYTHONPATH=${PYTHON_PREFIX}/site-packages:$PYTHONPATH PKG_CONFIG_PATH=$PKG_CONFIG_PATH:${PREFIX_DIR}/lib/pkgconfig ./configure --bundled-libraries=!talloc,!tdb,!pytdb,!ldb,!pyldb,!tevent,!pytevent --abi-check --enable-debug -C ${PREFIX}", "text/plain"),
+ ("configure", "PYTHONPATH=${PYTHON_PREFIX}/site-packages:$PYTHONPATH PKG_CONFIG_PATH=$PKG_CONFIG_PATH:${PREFIX_DIR}/lib/pkgconfig ./configure --bundled-libraries=!talloc,!tdb,!pytdb,!ntdb,!pyntdb,!ldb,!pyldb,!tevent,!pytevent --abi-check --enable-debug -C ${PREFIX}", "text/plain"),
("make", "make", "text/plain"),
("install", "make install", "text/plain")],
diff --git a/source3/auth/auth_sam.c b/source3/auth/auth_sam.c
index 7faa8de..a34f9a5 100644
--- a/source3/auth/auth_sam.c
+++ b/source3/auth/auth_sam.c
@@ -108,6 +108,13 @@ static NTSTATUS auth_init_sam(struct auth_context *auth_context, const char *par
{
struct auth_methods *result;
+ if (lp_server_role() == ROLE_ACTIVE_DIRECTORY_DC
+ && !lp_parm_bool(-1, "server role check", "inhibit", false)) {
+ DEBUG(0, ("server role = 'active directory domain controller' not compatible with running the auth_sam module. \n"));
+ DEBUGADD(0, ("You should not set 'auth methods' when running the AD DC.\n"));
+ exit(1);
+ }
+
result = talloc_zero(auth_context, struct auth_methods);
if (result == NULL) {
return NT_STATUS_NO_MEMORY;
diff --git a/source3/passdb/pdb_ldap.c b/source3/passdb/pdb_ldap.c
index dc6a9c3..0905ab4 100644
--- a/source3/passdb/pdb_ldap.c
+++ b/source3/passdb/pdb_ldap.c
@@ -4452,11 +4452,11 @@ static bool ldapuser2displayentry(struct ldap_search_state *state,
vals = ldap_get_values(ld, entry, "sambaAcctFlags");
if ((vals == NULL) || (vals[0] == NULL)) {
- DEBUG(5, ("\"sambaAcctFlags\" not found\n"));
- return False;
+ acct_flags = ACB_NORMAL;
+ } else {
+ acct_flags = pdb_decode_acct_ctrl(vals[0]);
+ ldap_value_free(vals);
}
- acct_flags = pdb_decode_acct_ctrl(vals[0]);
- ldap_value_free(vals);
if ((state->acct_flags != 0) &&
((state->acct_flags & acct_flags) == 0))
diff --git a/source3/rpc_server/dcesrv_auth_generic.c b/source3/rpc_server/dcesrv_auth_generic.c
index c4c08b2..77d76fc 100644
--- a/source3/rpc_server/dcesrv_auth_generic.c
+++ b/source3/rpc_server/dcesrv_auth_generic.c
@@ -24,12 +24,12 @@
#include "auth.h"
#include "auth/gensec/gensec.h"
-NTSTATUS auth_generic_server_authtype_start(TALLOC_CTX *mem_ctx,
- uint8_t auth_type, uint8_t auth_level,
- DATA_BLOB *token_in,
- DATA_BLOB *token_out,
- const struct tsocket_address *remote_address,
- struct gensec_security **ctx)
+static NTSTATUS auth_generic_server_authtype_start_as_root(TALLOC_CTX *mem_ctx,
+ uint8_t auth_type, uint8_t auth_level,
+ DATA_BLOB *token_in,
+ DATA_BLOB *token_out,
+ const struct tsocket_address *remote_address,
+ struct gensec_security **ctx)
{
struct gensec_security *gensec_security = NULL;
NTSTATUS status;
@@ -62,6 +62,27 @@ NTSTATUS auth_generic_server_authtype_start(TALLOC_CTX *mem_ctx,
return NT_STATUS_OK;
}
+NTSTATUS auth_generic_server_authtype_start(TALLOC_CTX *mem_ctx,
+ uint8_t auth_type, uint8_t auth_level,
+ DATA_BLOB *token_in,
+ DATA_BLOB *token_out,
+ const struct tsocket_address *remote_address,
+ struct gensec_security **ctx)
+{
+ NTSTATUS status;
+ become_root();
+
+ /* this has to be done as root in order to create the messaging socket */
+ status = auth_generic_server_authtype_start_as_root(mem_ctx,
+ auth_type, auth_level,
+ token_in,
+ token_out,
+ remote_address,
+ ctx);
+ unbecome_root();
+ return status;
+}
+
NTSTATUS auth_generic_server_step(struct gensec_security *gensec_security,
TALLOC_CTX *mem_ctx,
DATA_BLOB *token_in,
@@ -101,7 +122,12 @@ NTSTATUS auth_generic_server_get_user_info(struct gensec_security *gensec_securi
{
NTSTATUS status;
+ /* this has to be done as root in order to get to the
+ * messaging sockets for IDMAP and privilege.ldb in the AD
+ * DC */
+ become_root();
status = gensec_session_info(gensec_security, mem_ctx, session_info);
+ unbecome_root();
if (!NT_STATUS_IS_OK(status)) {
DEBUG(1, (__location__ ": Failed to get authenticated user "
"info: %s\n", nt_errstr(status)));
diff --git a/source4/auth/gensec/gensec_gssapi.c b/source4/auth/gensec/gensec_gssapi.c
index e3bafe2..3e35cae 100644
--- a/source4/auth/gensec/gensec_gssapi.c
+++ b/source4/auth/gensec/gensec_gssapi.c
@@ -336,7 +336,7 @@ static NTSTATUS gensec_gssapi_client_start(struct gensec_security *gensec_securi
const char *hostname = gensec_get_target_hostname(gensec_security);
if (!hostname) {
- DEBUG(1, ("Could not determine hostname for target computer, cannot use kerberos\n"));
+ DEBUG(3, ("No hostname for target computer passed in, cannot use kerberos for this connection\n"));
return NT_STATUS_INVALID_PARAMETER;
}
if (is_ipaddress(hostname)) {
diff --git a/source4/auth/gensec/gensec_krb5.c b/source4/auth/gensec/gensec_krb5.c
index 140a165..fbec64c 100644
--- a/source4/auth/gensec/gensec_krb5.c
+++ b/source4/auth/gensec/gensec_krb5.c
@@ -240,7 +240,7 @@ static NTSTATUS gensec_krb5_common_client_start(struct gensec_security *gensec_s
NTSTATUS nt_status;
hostname = gensec_get_target_hostname(gensec_security);
if (!hostname) {
- DEBUG(1, ("Could not determine hostname for target computer, cannot use kerberos\n"));
+ DEBUG(3, ("No hostname for target computer passed in, cannot use kerberos for this connection\n"));
return NT_STATUS_INVALID_PARAMETER;
}
if (is_ipaddress(hostname)) {
diff --git a/source4/dsdb/repl/replicated_objects.c b/source4/dsdb/repl/replicated_objects.c
index 44c5de8..29b494b 100644
--- a/source4/dsdb/repl/replicated_objects.c
+++ b/source4/dsdb/repl/replicated_objects.c
@@ -209,10 +209,6 @@ WERROR dsdb_convert_object_ex(struct ldb_context *ldb,
NTTIME whenChanged = 0;
time_t whenChanged_t;
const char *whenChanged_s;
- const char *rdn_name = NULL;
- const struct ldb_val *rdn_value = NULL;
- const struct dsdb_attribute *rdn_attr = NULL;
- uint32_t rdn_attid;
struct drsuapi_DsReplicaAttribute *name_a = NULL;
struct drsuapi_DsReplicaMetaData *name_d = NULL;
struct replPropertyMetaData1 *rdn_m = NULL;
@@ -248,14 +244,6 @@ WERROR dsdb_convert_object_ex(struct ldb_context *ldb,
msg->dn = ldb_dn_new(msg, ldb, in->object.identifier->dn);
W_ERROR_HAVE_NO_MEMORY(msg->dn);
- rdn_name = ldb_dn_get_rdn_name(msg->dn);
- rdn_attr = dsdb_attribute_by_lDAPDisplayName(schema, rdn_name);
- if (!rdn_attr) {
- return WERR_FOOBAR;
- }
- rdn_attid = rdn_attr->attributeID_id;
- rdn_value = ldb_dn_get_rdn_val(msg->dn);
-
msg->num_elements = in->object.attribute_ctr.num_attributes;
msg->elements = talloc_array(msg, struct ldb_message_element,
msg->num_elements + 1); /* +1 because of the RDN attribute */
@@ -331,6 +319,25 @@ WERROR dsdb_convert_object_ex(struct ldb_context *ldb,
if (rdn_m) {
struct ldb_message_element *el;
+ const char *rdn_name = NULL;
+ const struct ldb_val *rdn_value = NULL;
+ const struct dsdb_attribute *rdn_attr = NULL;
+ uint32_t rdn_attid;
+
+ /*
+ * We only need the schema calls for the RDN in this
+ * codepath, and by doing this we avoid needing to
+ * have the dsdb_attribute_by_lDAPDisplayName accessor
+ * working during the schema load.
+ */
+ rdn_name = ldb_dn_get_rdn_name(msg->dn);
+ rdn_attr = dsdb_attribute_by_lDAPDisplayName(schema, rdn_name);
+ if (!rdn_attr) {
+ return WERR_FOOBAR;
+ }
+ rdn_attid = rdn_attr->attributeID_id;
+ rdn_value = ldb_dn_get_rdn_val(msg->dn);
+
el = ldb_msg_find_element(msg, rdn_attr->lDAPDisplayName);
if (!el) {
ret = ldb_msg_add_value(msg, rdn_attr->lDAPDisplayName, rdn_value, NULL);
diff --git a/source4/dsdb/samdb/ldb_modules/acl_read.c b/source4/dsdb/samdb/ldb_modules/acl_read.c
index 07b1bc4..f15633f 100644
--- a/source4/dsdb/samdb/ldb_modules/acl_read.c
+++ b/source4/dsdb/samdb/ldb_modules/acl_read.c
@@ -92,9 +92,15 @@ static int aclread_callback(struct ldb_request *req, struct ldb_reply *ares)
case LDB_REPLY_ENTRY:
msg = ares->message;
ret = dsdb_get_sd_from_ldb_message(ldb, tmp_ctx, msg, &sd);
- if (ret != LDB_SUCCESS || sd == NULL ) {
+ if (ret != LDB_SUCCESS) {
+ ldb_debug_set(ldb, LDB_DEBUG_FATAL,
+ "acl_read: cannot get descriptor of %s: %s\n",
+ ldb_dn_get_linearized(msg->dn), ldb_strerror(ret));
+ ret = LDB_ERR_OPERATIONS_ERROR;
+ goto fail;
+ } else if (sd == NULL) {
ldb_debug_set(ldb, LDB_DEBUG_FATAL,
- "acl_read: cannot get descriptor of %s\n",
+ "acl_read: cannot get descriptor of %s (attribute not found)\n",
ldb_dn_get_linearized(msg->dn));
ret = LDB_ERR_OPERATIONS_ERROR;
goto fail;
diff --git a/source4/dsdb/schema/schema_prefixmap.c b/source4/dsdb/schema/schema_prefixmap.c
index 4a895d9..270e6be 100644
--- a/source4/dsdb/schema/schema_prefixmap.c
+++ b/source4/dsdb/schema/schema_prefixmap.c
@@ -311,6 +311,7 @@ static WERROR dsdb_schema_pfm_make_attid_impl(struct dsdb_schema_prefixmap *pfm,
} else {
/* return error in read-only mode */
if (!can_change_pfm) {
+ DEBUG(0, ("Unable to convert %s to an attid, and can_change_pfm=false!\n", oid));
return werr;
}
diff --git a/source4/rpc_server/drsuapi/getncchanges.c b/source4/rpc_server/drsuapi/getncchanges.c
index 575d037..219ddbc 100644
--- a/source4/rpc_server/drsuapi/getncchanges.c
+++ b/source4/rpc_server/drsuapi/getncchanges.c
@@ -353,8 +353,9 @@ static WERROR get_nc_changes_build_object(struct drsuapi_DsReplicaObjectListItem
werr = sa->syntax->ldb_to_drsuapi(&syntax_ctx, sa, el, obj,
&obj->object.attribute_ctr.attributes[i]);
if (!W_ERROR_IS_OK(werr)) {
- DEBUG(0,("Unable to convert %s to DRS object - %s\n",
- sa->lDAPDisplayName, win_errstr(werr)));
+ DEBUG(0,("Unable to convert %s on %s to DRS object - %s\n",
+ sa->lDAPDisplayName, ldb_dn_get_linearized(msg->dn),
+ win_errstr(werr)));
return werr;
}
/* if DRSUAPI_DRS_SPECIAL_SECRET_PROCESSING is set
@@ -369,8 +370,9 @@ static WERROR get_nc_changes_build_object(struct drsuapi_DsReplicaObjectListItem
werr = drsuapi_encrypt_attribute(obj, session_key, rid,
&obj->object.attribute_ctr.attributes[i]);
if (!W_ERROR_IS_OK(werr)) {
- DEBUG(0,("Unable to encrypt %s in DRS object - %s\n",
- sa->lDAPDisplayName, win_errstr(werr)));
+ DEBUG(0,("Unable to encrypt %s on %s in DRS object - %s\n",
+ sa->lDAPDisplayName, ldb_dn_get_linearized(msg->dn),
+ win_errstr(werr)));
return werr;
}
}
diff --git a/wscript b/wscript
index dad54d1..a743228 100644
--- a/wscript
+++ b/wscript
@@ -12,7 +12,7 @@ import wafsamba, Options, samba_dist, Scripting, Utils, samba_version
samba_dist.DIST_DIRS('.')
-samba_dist.DIST_BLACKLIST('.gitignore .bzrignore source4/selftest/provisions/alpha13')
+samba_dist.DIST_BLACKLIST('.gitignore .bzrignore source4/selftest/provisions/alpha13 source4/selftest/provisions/release-4-0-0/')
# install in /usr/local/samba by default
Options.default_prefix = '/usr/local/samba'
--
Samba Shared Repository
More information about the samba-cvs
mailing list