Stefan Metzmacher [Fri, 21 Aug 2009 07:25:57 +0000 (09:25 +0200)]
talloc: add --enable-talloc-compat1 to build a compat library for talloc 1.x.x
metze
Stefan Metzmacher [Fri, 21 Aug 2009 07:53:51 +0000 (09:53 +0200)]
talloc: update talloc.exports and talloc.signatures
metze
Stefan Metzmacher [Thu, 20 Aug 2009 11:43:42 +0000 (13:43 +0200)]
talloc: add defines and functions for TALLOC_MAJOR/MINOR_VERSION
We also use the major and minor versions in the TALLOC_MAGIC,
so that we can detect if two conflicting versions of talloc
are loaded in one process. In this case we use talloc_log() to
output a very useful debug message before we call
talloc_abort().
metze
Stefan Metzmacher [Thu, 20 Aug 2009 11:43:18 +0000 (13:43 +0200)]
talloc: change version to 2.0.0
metze
Stefan Metzmacher [Thu, 20 Aug 2009 11:36:33 +0000 (13:36 +0200)]
talloc: remove ABI compat functions
metze
Stefan Metzmacher [Mon, 3 Aug 2009 09:33:06 +0000 (11:33 +0200)]
talloc: remove unused build dependecies to samba
metze
Stefan Metzmacher [Wed, 29 Jul 2009 20:00:05 +0000 (22:00 +0200)]
talloc/testsuite: use talloc_set_log_fn() and log to stdout
metze
Stefan Metzmacher [Wed, 29 Jul 2009 19:54:28 +0000 (21:54 +0200)]
talloc: add talloc_set_log_fn() and talloc_set_log_stderr()
So that the application can setup a log function to get ERROR
and WARNING messages.
metze
Stefan Metzmacher [Wed, 29 Jul 2009 19:41:34 +0000 (21:41 +0200)]
talloc: let talloc_steal() only generate a warning if it's used with references
We have to many callers, which rely on that talloc_steal() never fails.
metze
Stefan Metzmacher [Mon, 13 Jul 2009 18:34:10 +0000 (20:34 +0200)]
talloc/testsuite: report __location__ of testsuite failures
metze
Stefan Metzmacher [Tue, 14 Jul 2009 09:58:16 +0000 (11:58 +0200)]
talloc/testsuite: add infrastructure to test aborts
metze
Stefan Metzmacher [Mon, 13 Jul 2009 16:52:44 +0000 (18:52 +0200)]
talloc/testsuite: reset the globals after each subtest
metze
Stefan Metzmacher [Tue, 14 Jul 2009 09:56:33 +0000 (11:56 +0200)]
talloc: call return after abort, because an overloaded abort function might not exit
This will be useful in the testsuite,
where we could check if an abort would happen.
metze
Stefan Metzmacher [Mon, 13 Jul 2009 18:32:50 +0000 (20:32 +0200)]
talloc: report the size of reference handles as 0
metze
Stefan Metzmacher [Mon, 13 Jul 2009 16:51:24 +0000 (18:51 +0200)]
talloc: let talloc_total_blocks() and talloc_get_size() operate on the null_context
metze
Volker Lendecke [Sat, 22 Aug 2009 13:29:03 +0000 (15:29 +0200)]
s3:winbind: Fallback to the forest root for lookupname
Thanks to Steven Danneman for watching me closely :-)
Volker Lendecke [Sat, 22 Aug 2009 15:10:16 +0000 (17:10 +0200)]
s3:winbind: Even on a domain controller, "our" domain is internal
It happens to be what we also share out via NETLOGON/SAMR, but winbind has
direct access to it via the passdb domain methods
Volker Lendecke [Sat, 22 Aug 2009 15:12:28 +0000 (17:12 +0200)]
s3:winbind: Do not drop the first user in sam_query_user_list
Volker Lendecke [Sat, 22 Aug 2009 15:13:09 +0000 (17:13 +0200)]
s3:winbind: For internal domains it is pointless to connect to a DC
Volker Lendecke [Sat, 22 Aug 2009 15:14:32 +0000 (17:14 +0200)]
s3:winbind: winbindd_dual_ndrcmd should output what it's doing
Volker Lendecke [Sat, 22 Aug 2009 16:35:52 +0000 (18:35 +0200)]
s3:winbind: Fix the talloc hierarchy in wb_queryuser_done
We need to return state->userinfo beyond the end of wb_queryuser_recv, so the
unmarshalled strings are children of that, not the state that is lost sooner.
Metze, this scheme works fine as long as we only have a single malloc'ed
entity that is returned. I think we need a different scheme in the future
when we might have more than one independent object to be returned.
Jeremy Allison [Sat, 22 Aug 2009 16:40:58 +0000 (09:40 -0700)]
Implement Metze's suggestion of trying getpwuid(0) then getpwnam(root).
Jeremy.
Jeremy Allison [Sat, 22 Aug 2009 04:53:37 +0000 (21:53 -0700)]
Log debug message when hires timestamps are available on the
share.
Jeremy.
Jeremy Allison [Sat, 22 Aug 2009 04:44:21 +0000 (21:44 -0700)]
Fix bug 6529 - Offline files conflict with Vista and Office 2003
On filesystems that can't store less than one second timestamps,
round the incoming timestamp set requests so the client can't discover
that a time set request has been truncated by the filesystem.
Needs backporting to 3.4, 3.3, 3.2 and (even) 3.0.
Jeremy
Jeremy Allison [Sat, 22 Aug 2009 04:08:02 +0000 (21:08 -0700)]
Try and fix the buildfarm by using getpwnam(root) instead
of getpwuid(0) if DEVELOPER is defined. I'm hoping the
build farm defines DEVELOPER...
Jeremy.
Andrew Bartlett [Sat, 22 Aug 2009 01:09:30 +0000 (11:09 +1000)]
s4:ntp_signd Fix bug 6656 - Set protocol version to 0, as used by ntpd
The change to protocol version 1 was not intentional, and broke the
protocol established with the ntp.org project.
Andrew Bartlett
Jeremy Allison [Fri, 21 Aug 2009 23:17:17 +0000 (16:17 -0700)]
Fix coverity CID: 932 - forward null.
Jeremy.
Jeremy Allison [Fri, 21 Aug 2009 22:07:25 +0000 (15:07 -0700)]
Fix for bug 6651 - smbd SIGSEGV when breaking oplocks.
Based on a patch submitted by Petr Vandrovec <petr@vandrovec.name>.
Multiple pending signals with siginfo_t's weren't being handled correctly
leading to smbd abort with kernel oplock signals.
Jeremy
Michael Adam [Fri, 21 Aug 2009 11:59:16 +0000 (13:59 +0200)]
s3: fix bug #6650, authentication at member servers when winbindd is not running
Authentication of domain users on the member server fails when winbindd
is not running. This is because the is_trusted_domain() check behaves
differently when winbindd is running and when it isn't:
Since wb_is_trusted_domain() calls wbcDomainInfo(), and this will also
give a result for our own domain, this succeeds for the member
server's own domain when winbindd is running. When winbindd is not
running, is_trusted_domain() checks (and possibly updates) the trustdom
cache, and this does the lsa_EnumTrustDom() rpc call to the DC which
does not return its own domain.
In case of winbindd not running, before 3.4, the domain part was _silently_
mapped to the workgroup in auth_util.c:make_user_info_map(),
which effectively did nothing in the member case.
But then the parameter "map untrusted to domain" was introduced
and the mapping was made to the workstation name instead of
the workgroup name by default unless "map untrusted to domain = yes".
(Commits
d8c54fddda2dba3cbc5fc13e93431b152813892e,
5cd4b7b7c03df6e896186d985b6858a06aa40b3f, and
fbca26923915a70031f561b198cfe2cc0d9c3aa6)
This was ok as long as winbindd was running, but with winbindd not running,
these changes actually uncovered the above logic bug in the check.
So the correct check is to treat the workgroup as trusted / or known
in the member case. This is most easily achieved by not comparing the
domain name against get_global_sam_name() which is the host name unless
for a DC but against my_sam_name() which is the workgroup for a DC and for
a member, too. (These names are not very intuitive...)
I admit that this is a very long commit message for a one-liner, but this has
needed some tracking down, and I think the change deserves some justification.
Michael
Sam Liddicott [Fri, 21 Aug 2009 14:54:49 +0000 (16:54 +0200)]
s4:client
Put was assuming that the remote name was always absolute, and not relative to
the current remote directory.
Signed-off-by: Sam Liddicott <sam@liddicott.com>
Steve French [Fri, 21 Aug 2009 12:56:32 +0000 (14:56 +0200)]
Add missing CreateFile flags to smb.h
Andrew Bartlett [Fri, 21 Aug 2009 07:50:04 +0000 (17:50 +1000)]
s4:ldb Python requires that a 'compare' handler return -1, 0 or 1
Andrew Bartlett [Wed, 19 Aug 2009 03:26:34 +0000 (13:26 +1000)]
s4:ldb Use length-limited printf to avoid walking off end of strings
This should ensure the debug messages do not have random characters at
their ends.
Andrew Bartlett
Andrew Bartlett [Tue, 18 Aug 2009 02:08:37 +0000 (12:08 +1000)]
s4:kerberos Use MIT compatible names for these enc types
This is a small start on (ie, the only trivial part of) the work shown in:
http://k5wiki.kerberos.org/wiki/Projects/Samba4_Port#Samba.27s_use_of_Heimdal_symbols.2C_with_MIT_differences
(a table of all Kerberos symbols used in Samba4, and notes on where
they differ from those provided with MIT Kerberos)
Andrew Bartlett
Jeremy Allison [Thu, 20 Aug 2009 18:08:21 +0000 (11:08 -0700)]
Fix bug 6638 - ADS Domain Member: Computer Mgr can not set share ACLs
Add good error message for share modification denial.
Jeremy.
Günther Deschner [Thu, 20 Aug 2009 13:28:19 +0000 (15:28 +0200)]
s3-idmap: fix two uninitialized variable warnings in idmap_tdb2.
Guenther
Volker Lendecke [Wed, 19 Aug 2009 12:22:09 +0000 (14:22 +0200)]
s3:dsgetdcname: Fix a crash in dsgetdcname
When returning NT_STATUS_OK we can't leave *info == NULL, this crashes
in is_closest_site called from dsgetdcname().
Signed-off-by: Günther Deschner <gd@samba.org>
Volker Lendecke [Wed, 19 Aug 2009 12:19:22 +0000 (14:19 +0200)]
s3:dsgetdcname: Inline dsgetdcname_cache_refresh
Signed-off-by: Günther Deschner <gd@samba.org>
Günther Deschner [Mon, 10 Aug 2009 15:09:41 +0000 (17:09 +0200)]
s4-spoolss: add stubs for new idl opcodes in spoolss server.
Guenther
Günther Deschner [Mon, 10 Aug 2009 14:45:47 +0000 (16:45 +0200)]
s3-spoolss: add stubs for new idl opcodes in spoolss server.
Guenther
Günther Deschner [Mon, 10 Aug 2009 14:45:13 +0000 (16:45 +0200)]
s3: re-run make samba3-idl.
Guenther
Günther Deschner [Mon, 10 Aug 2009 14:44:19 +0000 (16:44 +0200)]
spoolss: add more spoolss calls to IDL
(spoolss_GetPrinterDriverPackagePath and spoolss_GetCorePrinterDrivers).
Guenther
Jeremy Allison [Wed, 19 Aug 2009 23:55:26 +0000 (16:55 -0700)]
Fix bug #6647 - get_root_nt_token: getpwnam("root") failed!
Not all systems may have a "root" user, but all must have a passwd
entry for a uid of zero.
Jeremy.
Jeremy Allison [Wed, 19 Aug 2009 22:33:08 +0000 (15:33 -0700)]
Fix Red Hat bugzilla bug : https://bugzilla.redhat.com/show_bug.cgi?id=516165
nautilus fails to copy files from an SMB share. This is a show-stopper
for 3.4.1 (I'll open a Samba.org bug). Although gnome-vfs is doing
*incredibly* stupid things by asking for a read size of 65535 - this
translates on the wire to a 65534 byte read followed by a 1 byte
read. Please send this back to the gnome developers that they
will ge horrid on the wire performance for this.
Jeremy.
Stefan Metzmacher [Thu, 6 Aug 2009 10:16:30 +0000 (12:16 +0200)]
s3:smbd: implement SMB2 Find (Query Directory)
metze
Stefan Metzmacher [Thu, 6 Aug 2009 10:53:05 +0000 (12:53 +0200)]
s3:smbd: store a dirptr on the files_struct for SMB2 Query Directory
metze
Stefan Metzmacher [Fri, 14 Aug 2009 11:23:19 +0000 (13:23 +0200)]
s3:smbd: add a generic smbd_dirptr_lanman2_entry() function
This can we used by SMB2, the key difference between
SMB1 and SMB2 is that with SMB2 entries are aligned
to 8 bytes and there's no padding at the end of the last entry.
metze
Stefan Metzmacher [Sat, 15 Aug 2009 09:52:37 +0000 (11:52 +0200)]
s3:smbd: implement all SMB2 Create contexts except "ExtA"
metze
Stefan Metzmacher [Wed, 19 Aug 2009 16:03:43 +0000 (18:03 +0200)]
s3:smbd: make smbd_check_open_rights() function non-static for use in SMB2
metze
Kai Blin [Wed, 19 Aug 2009 10:38:58 +0000 (12:38 +0200)]
s3 merged build: Don't build wbinfo twice.
Many, many thanks to Metze for telling me which chicken to sacrifice.
Michael Adam [Tue, 18 Aug 2009 09:53:42 +0000 (11:53 +0200)]
tevent: fix a comment
Michael
Volker Lendecke [Thu, 13 Aug 2009 04:33:16 +0000 (06:33 +0200)]
Make refusal of SEC_DESC_DACL_PROTECTED configurable
This adds a parameter "gpfs:refuse_dacl_protected" that defaults to false.
GPFS has no place to store the SEC_DESC_DACL_PROTECTED ACL bit. With this
parameter we give customers an option to either ignore this bit or refuse
setting an ACL with it.
Stefan Metzmacher [Wed, 12 Aug 2009 18:39:58 +0000 (20:39 +0200)]
s3:smbd: parse context blobs in SMB2 Create
metze
Andrew Tridgell [Wed, 19 Aug 2009 05:53:19 +0000 (15:53 +1000)]
added basic support for rename in DRS replication
Added simple DRS rename support in replication. This should be done
async, and I'm not sure if we should also do any repl data updates to
indicate the rename. I'm still learning how this stuff works, but at
least this allows a rename on a DC to propogate correctly
Andrew Tridgell [Wed, 19 Aug 2009 05:51:07 +0000 (15:51 +1000)]
we need the Deleted Objects container for replication
When objects are deleted they get renamed to this container. The
container needs to exist when we provision
Kai Blin [Tue, 18 Aug 2009 20:10:04 +0000 (22:10 +0200)]
wbinfo: Fix up s3 blackbox test. wbinfo no longer needs a config file.
Kai Blin [Tue, 18 Aug 2009 19:48:41 +0000 (21:48 +0200)]
s4 winbind: Quiet down the WINBINDD_DOMAIN_INFO handler stub warning
Kai Blin [Tue, 18 Aug 2009 19:42:37 +0000 (21:42 +0200)]
wbinfo: Reduce test noise in the wbinfo blackbox test
With the switch to libwbclient the previously stubbed out
--trusted-domains and --all-domains calls now fail. Set them to knownfail.
The previously knownfail -D test is now stubbed out, test it now.
This does not fix the issues with wbinfo -a and wbinfo -K not working on the
build farm. I have no idea whatsoever what is causing this, as those are broken
on my local machine even without my changes.
Kai Blin [Thu, 13 Aug 2009 07:43:40 +0000 (09:43 +0200)]
s4 winbind: Silence compile warning by adding new commands to the list
Kai Blin [Thu, 13 Aug 2009 07:42:14 +0000 (09:42 +0200)]
s4 winbind: Implement a stubbed out version of WINBINDD_DOMAIN_INFO
Kai Blin [Wed, 12 Aug 2009 15:50:04 +0000 (17:50 +0200)]
wbinfo: Use one codebase for Samba3 and Samba4.
There can be only one....wbinfo that is.
Kai Blin [Wed, 12 Aug 2009 15:47:12 +0000 (17:47 +0200)]
s3 wbinfo: Only call afs_settoken_str if compiled with WITH_FAKE_KASERVER
Kai Blin [Wed, 12 Aug 2009 15:43:40 +0000 (17:43 +0200)]
s3 wbinfo: use wbcSidTypeString instead of sid_type_lookup
Kai Blin [Wed, 12 Aug 2009 15:41:23 +0000 (17:41 +0200)]
libwbclient: Add wbcSidTypeString function.
Kai Blin [Wed, 12 Aug 2009 15:27:05 +0000 (17:27 +0200)]
s3 wbinfo: Remove unused functions, use C99-types
Kai Blin [Wed, 12 Aug 2009 15:25:46 +0000 (17:25 +0200)]
s3 wbinfo: Explicitly include popt header, remove unused common options.
Kai Blin [Wed, 12 Aug 2009 15:25:14 +0000 (17:25 +0200)]
s3 wbinfo: Use talloc_strdup instead of SMB_STRDUP
Kai Blin [Wed, 12 Aug 2009 15:24:19 +0000 (17:24 +0200)]
s3 wbinfo: Don't use global_myname()
Kai Blin [Wed, 12 Aug 2009 14:18:54 +0000 (16:18 +0200)]
s3 wbinfo: Avoid ADD_TO_ARRAY macro.
Kai Blin [Wed, 12 Aug 2009 13:59:14 +0000 (15:59 +0200)]
s3 wbinfo: Use uint32_t instead of uint32
Kai Blin [Wed, 12 Aug 2009 21:41:32 +0000 (23:41 +0200)]
s3 wbinfo: remove --get-auth-user and --set-auth-user functionality
Point to the corresponding commands in "net" instead.
Kai Blin [Wed, 12 Aug 2009 21:40:05 +0000 (23:40 +0200)]
s3 net: Add getauthuser/setauthuser commands.
These replace the functionality of wbinfo --get-auth-user/--set-auth-user
Kai Blin [Wed, 12 Aug 2009 13:51:20 +0000 (15:51 +0200)]
s3 wbinfo: Get rid of lp_ functions
This commit also fixes a lot of line lengths to make the file more readable.
Kai Blin [Thu, 13 Aug 2009 07:40:43 +0000 (09:40 +0200)]
s4 ctags: Stop *_proto.h files from cluttering up the tags
Matthias Dieter Wallnöfer [Mon, 17 Aug 2009 18:42:39 +0000 (20:42 +0200)]
s4: int32 handling: previous fix was not fully correct
Matthias Dieter Wallnöfer [Mon, 17 Aug 2009 18:29:11 +0000 (20:29 +0200)]
s4: Make the int32 problem more clear - and fix another error
Stefan Metzmacher [Tue, 11 Aug 2009 17:49:33 +0000 (19:49 +0200)]
s4:librpc/rpc: fix DEBUG() message
metze
Günther Deschner [Mon, 17 Aug 2009 14:49:24 +0000 (16:49 +0200)]
netlogon: document some more MSVC flags.
Some of these were observed during password changing
from win7 using a samba 3.4 PDC.
Guenther
Günther Deschner [Wed, 12 Aug 2009 12:59:44 +0000 (14:59 +0200)]
s3-spoolss: remove another duplicate copy of print_architecture_table.
Guenther
Andrew Tridgell [Mon, 17 Aug 2009 12:45:51 +0000 (22:45 +1000)]
fixed make test reporting success when provision fails
We were getting build test 'pass' on the build farm when the provision
is failing. The cause was the use of filter pipelines in the selftest
code in the makefile. A bourne shell will by default report the error
status of the last element of the pipeline, which means when provision
failed, make thought everything had passed.
We could use the bash 'pipefail' option to fix this, but it isn't
portable, so instead I've modified the makefile to touch st/st_done
when the first element in the pipeline completes successfully. That
means we now get errors in make test, at the expense of making the
makefile even more horrible than it was.
Matthias Dieter Wallnöfer [Mon, 17 Aug 2009 11:10:16 +0000 (13:10 +0200)]
s4: Fixed the int32 datatype support
Should finally fix bug #6136 ("groupType", "sAMAccountType" ... attributes).
Andrew Tridgell [Mon, 17 Aug 2009 11:40:19 +0000 (21:40 +1000)]
fixed the build
the changes from Matthias didn't take account of url and lp being None
in some ldb python instances in 'make test'
Matthias Dieter Wallnöfer [Sat, 15 Aug 2009 13:20:09 +0000 (15:20 +0200)]
s4: Major rework of the LDB/SAMDB/IDMAP python bindings
- Centralise the lookups for the default domain (root) in the call "domain_dn"
- Reduce the LDB connections attempts ("connect" calls) from three to one
- tools should load faster
- Make the LDB connection init more like the "ldb_wrap_connection" call
- Load the right UTF8 casefolder which fixes up problems with special characters
(discovered by me: e.g. small "Umlaute" (ä, ö, ü, ...) in the DN weren't upcased
- so records "seemed" lost in TDB)
Matthias Dieter Wallnöfer [Mon, 17 Aug 2009 09:47:53 +0000 (11:47 +0200)]
s4:python tools - Centralise the lookups for the default domain (root) in the call "domain_dn" from SamDB
Matthias Dieter Wallnöfer [Mon, 17 Aug 2009 09:46:23 +0000 (11:46 +0200)]
s4:pyglue Add a wrapper for loading the correct UTF8 casefolder
Needed for special characters (e.g. in German "Umlaute")
Matthias Dieter Wallnöfer [Sat, 15 Aug 2009 13:18:46 +0000 (15:18 +0200)]
s4:ldb python bindings: Handle the parameters of the connect call in the right way
Matthias Dieter Wallnöfer [Mon, 17 Aug 2009 09:06:39 +0000 (11:06 +0200)]
Revert "s4:samdb python bindings - we don't need the attributes here"
This reverts commit
53ef426e6f68728763436bd0cd3dd91180c00579.
As abartlet pointed out this causes to load all attributes and therefore gives
us more here than we need (only the check for the DN)!
Andrew Tridgell [Mon, 17 Aug 2009 07:50:26 +0000 (17:50 +1000)]
sigh - still not right
Andrew Tridgell [Mon, 17 Aug 2009 07:48:27 +0000 (17:48 +1000)]
fixed up add_foreign again
my last patch was not even close ...
I'll leave abartlet to work out how to fix the test case
Andrew Tridgell [Mon, 17 Aug 2009 07:34:22 +0000 (17:34 +1000)]
more fixups from provision changes
Andrew, can you please check this? The idmap.setup_name_mapping tests
look totally out of place here. I'm also not sure I captured your
intention with the other changes
Stefan Metzmacher [Sat, 15 Aug 2009 08:11:16 +0000 (10:11 +0200)]
s3:smbd: add support for canceling SMB2 Notify calls.
metze
Stefan Metzmacher [Sat, 15 Aug 2009 08:07:00 +0000 (10:07 +0200)]
s3:smbd: add smbd_notify_cancel_by_smbreq()
This function will be used by the SMB2 notify code.
metze
Stefan Metzmacher [Sat, 15 Aug 2009 08:01:38 +0000 (10:01 +0200)]
s3:smbd: implement SMB2 Cancel correctly.
metze
Stefan Metzmacher [Sat, 15 Aug 2009 08:45:21 +0000 (10:45 +0200)]
s4:build: require tevent 0.9.7 with tevent_req_cancel()
metze
Stefan Metzmacher [Sat, 15 Aug 2009 08:44:50 +0000 (10:44 +0200)]
tevent: change version to 0.9.7 after adding tevent_req_cancel infrastructure
metze
Stefan Metzmacher [Sat, 15 Aug 2009 07:46:23 +0000 (09:46 +0200)]
tevent: add tevent_req_cancel() infrastructure
This offers a generic way for callers to cancel an
async request.
metze
Andrew Tridgell [Mon, 17 Aug 2009 03:29:34 +0000 (13:29 +1000)]
skip the autoidl test
The autoidl test is not needed now that we have IDL source
available. It also generates a lot of errors in the logs.
Andrew Tridgell [Mon, 17 Aug 2009 03:28:57 +0000 (13:28 +1000)]
fixed up some provision errors from the recent changes
Andrew Bartlett [Mon, 17 Aug 2009 01:41:58 +0000 (11:41 +1000)]
s4:provision Add comments to the provision script
Hopefully this will explain a bit more whey things are done the way
that they are done.
Andrew Bartlett
Andrew Bartlett [Mon, 17 Aug 2009 01:33:25 +0000 (11:33 +1000)]
s4:provision Avoid one more call to ltdb_reindex
The Samba4 schema code (called via
samdb.set_schema_from_ldb(schema.ldb)) manages the @ATTRIBUTES and
@INDEXLIST records, so don't wipe them early. The chances are that we
will not change them anyway.
Andrew Bartlett