[Pkg-samba-maint] r3779 - in branches/samba/experimental: . docs/manpages docs-xml/manpages-3 lib/smbconf lib/talloc lib/tdb lib/util libcli/auth libcli/echo/tests libcli/named_pipe_auth libcli/nbt libcli/security libcli/util libgpo librpc/idl nsswitch packaging/RHEL packaging/RHEL-CTDB source3 source3/auth source3/build source3/client source3/groupdb source3/include source3/intl source3/lib source3/lib/eventlog source3/lib/netapi source3/lib/pthreadpool source3/lib/smbconf source3/libads source3/libgpo source3/libnet source3/librpc/crypto source3/librpc/gen_ndr source3/librpc/rpc source3/libsmb source3/locale/net source3/locking source3/m4 source3/modules source3/nmbd source3/param source3/passdb source3/printing source3/printing/tests source3/registry source3/rpc_client source3/rpc_server source3/rpc_server/dfs source3/rpc_server/dssetup source3/rpc_server/echo source3/rpc_server/epmapper source3/rpc_server/eventlog source3/rpc_server/initshutdown source3/rpc_server/lsa source3/rpc_server/netlogon source3/rpc_server/ntsvcs source3/rpc_server/samr source3/rpc_server/spoolss source3/rpc_server/srvsvc source3/rpc_server/svcctl source3/rpc_server/winreg source3/rpc_server/wkssvc source3/rpcclient source3/smbd source3/torture source3/utils source3/web source3/winbindd source4/cluster source4/lib source4/lib/messaging source4/libcli/rap source4/libcli/util source4/ntvfs/common source4/ntvfs/posix source4/ntvfs/posix/python source4/param source4/selftest source4/torture/local source4/torture/rap

bubulle at alioth.debian.org bubulle at alioth.debian.org
Thu May 19 17:46:29 UTC 2011


Author: bubulle
Date: 2011-05-19 17:46:26 +0000 (Thu, 19 May 2011)
New Revision: 3779

Added:
   branches/samba/experimental/lib/util/tdb_wrap.c
   branches/samba/experimental/lib/util/tdb_wrap.h
   branches/samba/experimental/source3/libsmb/libsmb.h
   branches/samba/experimental/source3/libsmb/proto.h
   branches/samba/experimental/source3/modules/vfs_gpfs_hsm_notify.c
   branches/samba/experimental/source3/rpc_server/spoolss/srv_spoolss_nt.h
   branches/samba/experimental/source3/rpc_server/srv_pipe.h
   branches/samba/experimental/source3/rpc_server/srv_pipe_hnd.h
   branches/samba/experimental/source3/rpc_server/srv_pipe_register.h
   branches/samba/experimental/source3/rpc_server/svcctl/srv_svcctl_nt.h
   branches/samba/experimental/source3/torture/test_case_insensitive.c
   branches/samba/experimental/source3/torture/test_notify_online.c
Removed:
   branches/samba/experimental/source3/include/localedir.h
   branches/samba/experimental/source3/localedir.c
   branches/samba/experimental/source4/lib/tdb_wrap.c
   branches/samba/experimental/source4/lib/tdb_wrap.h
Modified:
   branches/samba/experimental/WHATSNEW.txt
   branches/samba/experimental/docs-xml/manpages-3/idmap_ad.8.xml
   branches/samba/experimental/docs-xml/manpages-3/vfs_gpfs.8.xml
   branches/samba/experimental/docs/manpages/eventlogadm.8
   branches/samba/experimental/docs/manpages/findsmb.1
   branches/samba/experimental/docs/manpages/idmap_ad.8
   branches/samba/experimental/docs/manpages/idmap_adex.8
   branches/samba/experimental/docs/manpages/idmap_autorid.8
   branches/samba/experimental/docs/manpages/idmap_hash.8
   branches/samba/experimental/docs/manpages/idmap_ldap.8
   branches/samba/experimental/docs/manpages/idmap_nss.8
   branches/samba/experimental/docs/manpages/idmap_rid.8
   branches/samba/experimental/docs/manpages/idmap_tdb.8
   branches/samba/experimental/docs/manpages/idmap_tdb2.8
   branches/samba/experimental/docs/manpages/ldb.3
   branches/samba/experimental/docs/manpages/ldbadd.1
   branches/samba/experimental/docs/manpages/ldbdel.1
   branches/samba/experimental/docs/manpages/ldbedit.1
   branches/samba/experimental/docs/manpages/ldbmodify.1
   branches/samba/experimental/docs/manpages/ldbrename.1
   branches/samba/experimental/docs/manpages/ldbsearch.1
   branches/samba/experimental/docs/manpages/libsmbclient.7
   branches/samba/experimental/docs/manpages/lmhosts.5
   branches/samba/experimental/docs/manpages/log2pcap.1
   branches/samba/experimental/docs/manpages/net.8
   branches/samba/experimental/docs/manpages/nmbd.8
   branches/samba/experimental/docs/manpages/nmblookup.1
   branches/samba/experimental/docs/manpages/ntlm_auth.1
   branches/samba/experimental/docs/manpages/pam_winbind.8
   branches/samba/experimental/docs/manpages/pam_winbind.conf.5
   branches/samba/experimental/docs/manpages/pdbedit.8
   branches/samba/experimental/docs/manpages/profiles.1
   branches/samba/experimental/docs/manpages/rpcclient.1
   branches/samba/experimental/docs/manpages/samba.7
   branches/samba/experimental/docs/manpages/sharesec.1
   branches/samba/experimental/docs/manpages/smb.conf.5
   branches/samba/experimental/docs/manpages/smbcacls.1
   branches/samba/experimental/docs/manpages/smbclient.1
   branches/samba/experimental/docs/manpages/smbcontrol.1
   branches/samba/experimental/docs/manpages/smbcquotas.1
   branches/samba/experimental/docs/manpages/smbd.8
   branches/samba/experimental/docs/manpages/smbget.1
   branches/samba/experimental/docs/manpages/smbgetrc.5
   branches/samba/experimental/docs/manpages/smbpasswd.5
   branches/samba/experimental/docs/manpages/smbpasswd.8
   branches/samba/experimental/docs/manpages/smbspool.8
   branches/samba/experimental/docs/manpages/smbstatus.1
   branches/samba/experimental/docs/manpages/smbta-util.8
   branches/samba/experimental/docs/manpages/smbtar.1
   branches/samba/experimental/docs/manpages/smbtree.1
   branches/samba/experimental/docs/manpages/swat.8
   branches/samba/experimental/docs/manpages/tdbbackup.8
   branches/samba/experimental/docs/manpages/tdbdump.8
   branches/samba/experimental/docs/manpages/tdbtool.8
   branches/samba/experimental/docs/manpages/testparm.1
   branches/samba/experimental/docs/manpages/vfs_acl_tdb.8
   branches/samba/experimental/docs/manpages/vfs_acl_xattr.8
   branches/samba/experimental/docs/manpages/vfs_audit.8
   branches/samba/experimental/docs/manpages/vfs_cacheprime.8
   branches/samba/experimental/docs/manpages/vfs_cap.8
   branches/samba/experimental/docs/manpages/vfs_catia.8
   branches/samba/experimental/docs/manpages/vfs_commit.8
   branches/samba/experimental/docs/manpages/vfs_crossrename.8
   branches/samba/experimental/docs/manpages/vfs_default_quota.8
   branches/samba/experimental/docs/manpages/vfs_dirsort.8
   branches/samba/experimental/docs/manpages/vfs_extd_audit.8
   branches/samba/experimental/docs/manpages/vfs_fake_perms.8
   branches/samba/experimental/docs/manpages/vfs_fileid.8
   branches/samba/experimental/docs/manpages/vfs_full_audit.8
   branches/samba/experimental/docs/manpages/vfs_gpfs.8
   branches/samba/experimental/docs/manpages/vfs_netatalk.8
   branches/samba/experimental/docs/manpages/vfs_notify_fam.8
   branches/samba/experimental/docs/manpages/vfs_prealloc.8
   branches/samba/experimental/docs/manpages/vfs_preopen.8
   branches/samba/experimental/docs/manpages/vfs_readahead.8
   branches/samba/experimental/docs/manpages/vfs_readonly.8
   branches/samba/experimental/docs/manpages/vfs_recycle.8
   branches/samba/experimental/docs/manpages/vfs_scannedonly.8
   branches/samba/experimental/docs/manpages/vfs_shadow_copy.8
   branches/samba/experimental/docs/manpages/vfs_shadow_copy2.8
   branches/samba/experimental/docs/manpages/vfs_smb_traffic_analyzer.8
   branches/samba/experimental/docs/manpages/vfs_streams_depot.8
   branches/samba/experimental/docs/manpages/vfs_streams_xattr.8
   branches/samba/experimental/docs/manpages/vfs_time_audit.8
   branches/samba/experimental/docs/manpages/vfs_xattr_tdb.8
   branches/samba/experimental/docs/manpages/vfstest.1
   branches/samba/experimental/docs/manpages/wbinfo.1
   branches/samba/experimental/docs/manpages/winbind_krb5_locator.7
   branches/samba/experimental/docs/manpages/winbindd.8
   branches/samba/experimental/lib/smbconf/smbconf.c
   branches/samba/experimental/lib/smbconf/smbconf.h
   branches/samba/experimental/lib/smbconf/smbconf_private.h
   branches/samba/experimental/lib/smbconf/smbconf_txt.c
   branches/samba/experimental/lib/smbconf/smbconf_txt.h
   branches/samba/experimental/lib/smbconf/smbconf_util.c
   branches/samba/experimental/lib/talloc/talloc.c
   branches/samba/experimental/lib/tdb/pytdb.c
   branches/samba/experimental/lib/util/system.c
   branches/samba/experimental/lib/util/util.h
   branches/samba/experimental/lib/util/util_net.c
   branches/samba/experimental/lib/util/util_net.h
   branches/samba/experimental/lib/util/util_tdb.h
   branches/samba/experimental/lib/util/wscript_build
   branches/samba/experimental/libcli/auth/schannel_state_tdb.c
   branches/samba/experimental/libcli/echo/tests/echo.c
   branches/samba/experimental/libcli/named_pipe_auth/npa_tstream.h
   branches/samba/experimental/libcli/nbt/dns_hosts_file.c
   branches/samba/experimental/libcli/security/create_descriptor.c
   branches/samba/experimental/libcli/security/pysecurity.c
   branches/samba/experimental/libcli/security/secacl.c
   branches/samba/experimental/libcli/util/error.h
   branches/samba/experimental/libcli/util/ntstatus.h
   branches/samba/experimental/libgpo/gpo_fetch.c
   branches/samba/experimental/librpc/idl/printcap.idl
   branches/samba/experimental/librpc/idl/rap.idl
   branches/samba/experimental/nsswitch/wins.c
   branches/samba/experimental/packaging/RHEL-CTDB/samba.spec
   branches/samba/experimental/packaging/RHEL-CTDB/samba.spec.tmpl
   branches/samba/experimental/packaging/RHEL/makerpms.sh
   branches/samba/experimental/packaging/RHEL/samba.spec
   branches/samba/experimental/source3/Makefile.in
   branches/samba/experimental/source3/VERSION
   branches/samba/experimental/source3/auth/auth_domain.c
   branches/samba/experimental/source3/auth/auth_sam.c
   branches/samba/experimental/source3/auth/auth_server.c
   branches/samba/experimental/source3/auth/auth_unix.c
   branches/samba/experimental/source3/auth/auth_util.c
   branches/samba/experimental/source3/auth/server_info_sam.c
   branches/samba/experimental/source3/auth/token_util.c
   branches/samba/experimental/source3/build/dynconfig.py
   branches/samba/experimental/source3/build/wscript
   branches/samba/experimental/source3/client/client.c
   branches/samba/experimental/source3/client/client_proto.h
   branches/samba/experimental/source3/client/clitar.c
   branches/samba/experimental/source3/client/smbspool.c
   branches/samba/experimental/source3/configure
   branches/samba/experimental/source3/configure.in
   branches/samba/experimental/source3/dynconfig.c
   branches/samba/experimental/source3/groupdb/mapping.c
   branches/samba/experimental/source3/groupdb/mapping_tdb.c
   branches/samba/experimental/source3/include/ads.h
   branches/samba/experimental/source3/include/async_smb.h
   branches/samba/experimental/source3/include/client.h
   branches/samba/experimental/source3/include/config.h.in
   branches/samba/experimental/source3/include/ctdbd_conn.h
   branches/samba/experimental/source3/include/dbwrap.h
   branches/samba/experimental/source3/include/dynconfig.h
   branches/samba/experimental/source3/include/includes.h
   branches/samba/experimental/source3/include/krb5_protos.h
   branches/samba/experimental/source3/include/nss_info.h
   branches/samba/experimental/source3/include/nt_printing.h
   branches/samba/experimental/source3/include/ntdomain.h
   branches/samba/experimental/source3/include/printing.h
   branches/samba/experimental/source3/include/proto.h
   branches/samba/experimental/source3/include/smb.h
   branches/samba/experimental/source3/include/smb_macros.h
   branches/samba/experimental/source3/include/util_tdb.h
   branches/samba/experimental/source3/include/version.h
   branches/samba/experimental/source3/intl/lang_tdb.c
   branches/samba/experimental/source3/lib/addrchange.c
   branches/samba/experimental/source3/lib/ctdbd_conn.c
   branches/samba/experimental/source3/lib/dbwrap.c
   branches/samba/experimental/source3/lib/dbwrap_ctdb.c
   branches/samba/experimental/source3/lib/dbwrap_tdb.c
   branches/samba/experimental/source3/lib/dbwrap_util.c
   branches/samba/experimental/source3/lib/eventlog/eventlog.c
   branches/samba/experimental/source3/lib/eventlog/eventlog.h
   branches/samba/experimental/source3/lib/events.c
   branches/samba/experimental/source3/lib/filename_util.c
   branches/samba/experimental/source3/lib/fncall.c
   branches/samba/experimental/source3/lib/g_lock.c
   branches/samba/experimental/source3/lib/gencache.c
   branches/samba/experimental/source3/lib/messages_ctdbd.c
   branches/samba/experimental/source3/lib/messages_local.c
   branches/samba/experimental/source3/lib/netapi/cm.c
   branches/samba/experimental/source3/lib/netapi/localgroup.c
   branches/samba/experimental/source3/lib/netapi/netapi_private.h
   branches/samba/experimental/source3/lib/netapi/serverinfo.c
   branches/samba/experimental/source3/lib/pthreadpool/pthreadpool.c
   branches/samba/experimental/source3/lib/server_mutex.c
   branches/samba/experimental/source3/lib/serverid.c
   branches/samba/experimental/source3/lib/sessionid_tdb.c
   branches/samba/experimental/source3/lib/sharesec.c
   branches/samba/experimental/source3/lib/smbconf/smbconf_init.c
   branches/samba/experimental/source3/lib/smbconf/smbconf_init.h
   branches/samba/experimental/source3/lib/smbconf/smbconf_reg.c
   branches/samba/experimental/source3/lib/smbconf/smbconf_reg.h
   branches/samba/experimental/source3/lib/smbconf/testsuite.c
   branches/samba/experimental/source3/lib/system.c
   branches/samba/experimental/source3/lib/talloc_dict.c
   branches/samba/experimental/source3/lib/tdb_validate.c
   branches/samba/experimental/source3/lib/tldap.c
   branches/samba/experimental/source3/lib/util.c
   branches/samba/experimental/source3/lib/util_builtin.c
   branches/samba/experimental/source3/lib/util_sid.c
   branches/samba/experimental/source3/lib/util_sock.c
   branches/samba/experimental/source3/lib/util_tdb.c
   branches/samba/experimental/source3/lib/util_tsock.c
   branches/samba/experimental/source3/libads/ads_status.c
   branches/samba/experimental/source3/libads/ads_status.h
   branches/samba/experimental/source3/libads/kerberos_proto.h
   branches/samba/experimental/source3/libads/ldap_printer.c
   branches/samba/experimental/source3/libgpo/gpo_filesync.c
   branches/samba/experimental/source3/libnet/libnet_dssync_passdb.c
   branches/samba/experimental/source3/libnet/libnet_join.c
   branches/samba/experimental/source3/libnet/libnet_samsync.c
   branches/samba/experimental/source3/librpc/crypto/gse.c
   branches/samba/experimental/source3/librpc/crypto/gse.h
   branches/samba/experimental/source3/librpc/gen_ndr/ndr_printcap.c
   branches/samba/experimental/source3/librpc/gen_ndr/ndr_rap.c
   branches/samba/experimental/source3/librpc/gen_ndr/ndr_rap.h
   branches/samba/experimental/source3/librpc/gen_ndr/ndr_rap_c.c
   branches/samba/experimental/source3/librpc/gen_ndr/ndr_rap_c.h
   branches/samba/experimental/source3/librpc/gen_ndr/printcap.h
   branches/samba/experimental/source3/librpc/gen_ndr/py_printcap.c
   branches/samba/experimental/source3/librpc/gen_ndr/py_rap.c
   branches/samba/experimental/source3/librpc/gen_ndr/rap.h
   branches/samba/experimental/source3/librpc/gen_ndr/srv_rap.c
   branches/samba/experimental/source3/librpc/gen_ndr/srv_rap.h
   branches/samba/experimental/source3/librpc/rpc/dcerpc.h
   branches/samba/experimental/source3/librpc/rpc/dcerpc_ep.c
   branches/samba/experimental/source3/librpc/rpc/dcerpc_helpers.c
   branches/samba/experimental/source3/librpc/rpc/rpc_common.c
   branches/samba/experimental/source3/libsmb/async_smb.c
   branches/samba/experimental/source3/libsmb/cli_np_tstream.c
   branches/samba/experimental/source3/libsmb/cliconnect.c
   branches/samba/experimental/source3/libsmb/clidfs.c
   branches/samba/experimental/source3/libsmb/clidgram.c
   branches/samba/experimental/source3/libsmb/clientgen.c
   branches/samba/experimental/source3/libsmb/clierror.c
   branches/samba/experimental/source3/libsmb/clifile.c
   branches/samba/experimental/source3/libsmb/clifsinfo.c
   branches/samba/experimental/source3/libsmb/clilist.c
   branches/samba/experimental/source3/libsmb/climessage.c
   branches/samba/experimental/source3/libsmb/clioplock.c
   branches/samba/experimental/source3/libsmb/cliprint.c
   branches/samba/experimental/source3/libsmb/cliquota.c
   branches/samba/experimental/source3/libsmb/clirap.c
   branches/samba/experimental/source3/libsmb/clirap.h
   branches/samba/experimental/source3/libsmb/clirap2.c
   branches/samba/experimental/source3/libsmb/clireadwrite.c
   branches/samba/experimental/source3/libsmb/clisecdesc.c
   branches/samba/experimental/source3/libsmb/clisigning.c
   branches/samba/experimental/source3/libsmb/clistr.c
   branches/samba/experimental/source3/libsmb/clitrans.c
   branches/samba/experimental/source3/libsmb/libsmb_cache.c
   branches/samba/experimental/source3/libsmb/libsmb_context.c
   branches/samba/experimental/source3/libsmb/libsmb_dir.c
   branches/samba/experimental/source3/libsmb/libsmb_file.c
   branches/samba/experimental/source3/libsmb/libsmb_misc.c
   branches/samba/experimental/source3/libsmb/libsmb_printjob.c
   branches/samba/experimental/source3/libsmb/libsmb_server.c
   branches/samba/experimental/source3/libsmb/libsmb_stat.c
   branches/samba/experimental/source3/libsmb/libsmb_xattr.c
   branches/samba/experimental/source3/libsmb/namequery.c
   branches/samba/experimental/source3/libsmb/nterr.c
   branches/samba/experimental/source3/libsmb/passchange.c
   branches/samba/experimental/source3/libsmb/samlogon_cache.c
   branches/samba/experimental/source3/libsmb/smb_seal.c
   branches/samba/experimental/source3/libsmb/smb_share_modes.c
   branches/samba/experimental/source3/libsmb/smbsock_connect.c
   branches/samba/experimental/source3/libsmb/trusts_util.c
   branches/samba/experimental/source3/libsmb/unexpected.c
   branches/samba/experimental/source3/locale/net/de.po
   branches/samba/experimental/source3/locking/locking.c
   branches/samba/experimental/source3/locking/posix.c
   branches/samba/experimental/source3/m4/aclocal.m4
   branches/samba/experimental/source3/modules/gpfs.c
   branches/samba/experimental/source3/modules/nfs4_acls.c
   branches/samba/experimental/source3/modules/onefs_acl.c
   branches/samba/experimental/source3/modules/onefs_open.c
   branches/samba/experimental/source3/modules/vfs_acl_tdb.c
   branches/samba/experimental/source3/modules/vfs_default.c
   branches/samba/experimental/source3/modules/vfs_gpfs.c
   branches/samba/experimental/source3/modules/vfs_gpfs.h
   branches/samba/experimental/source3/modules/vfs_xattr_tdb.c
   branches/samba/experimental/source3/modules/wscript_build
   branches/samba/experimental/source3/nmbd/nmbd_elections.c
   branches/samba/experimental/source3/nmbd/nmbd_incomingdgrams.c
   branches/samba/experimental/source3/nmbd/nmbd_packets.c
   branches/samba/experimental/source3/nmbd/nmbd_processlogon.c
   branches/samba/experimental/source3/nmbd/nmbd_proto.h
   branches/samba/experimental/source3/nmbd/nmbd_synclists.c
   branches/samba/experimental/source3/nmbd/nmbd_winsserver.c
   branches/samba/experimental/source3/param/loadparm.c
   branches/samba/experimental/source3/passdb/login_cache.c
   branches/samba/experimental/source3/passdb/machine_account_secrets.c
   branches/samba/experimental/source3/passdb/passdb.c
   branches/samba/experimental/source3/passdb/pdb_tdb.c
   branches/samba/experimental/source3/passdb/secrets.c
   branches/samba/experimental/source3/printing/notify.c
   branches/samba/experimental/source3/printing/nt_printing.c
   branches/samba/experimental/source3/printing/nt_printing_ads.c
   branches/samba/experimental/source3/printing/nt_printing_migrate.c
   branches/samba/experimental/source3/printing/nt_printing_tdb.c
   branches/samba/experimental/source3/printing/pcap.c
   branches/samba/experimental/source3/printing/pcap.h
   branches/samba/experimental/source3/printing/print_aix.c
   branches/samba/experimental/source3/printing/print_cups.c
   branches/samba/experimental/source3/printing/print_iprint.c
   branches/samba/experimental/source3/printing/print_standard.c
   branches/samba/experimental/source3/printing/print_svid.c
   branches/samba/experimental/source3/printing/printer_list.c
   branches/samba/experimental/source3/printing/printer_list.h
   branches/samba/experimental/source3/printing/printing.c
   branches/samba/experimental/source3/printing/printing_db.c
   branches/samba/experimental/source3/printing/printspoolss.c
   branches/samba/experimental/source3/printing/spoolssd.c
   branches/samba/experimental/source3/printing/tests/vlp.c
   branches/samba/experimental/source3/registry/reg_backend_db.c
   branches/samba/experimental/source3/registry/reg_objects.c
   branches/samba/experimental/source3/registry/reg_perfcount.c
   branches/samba/experimental/source3/rpc_client/cli_pipe.c
   branches/samba/experimental/source3/rpc_client/cli_pipe.h
   branches/samba/experimental/source3/rpc_client/cli_pipe_schannel.c
   branches/samba/experimental/source3/rpc_client/cli_spoolss.c
   branches/samba/experimental/source3/rpc_client/cli_winreg_int.c
   branches/samba/experimental/source3/rpc_client/cli_winreg_int.h
   branches/samba/experimental/source3/rpc_client/rpc_transport_np.c
   branches/samba/experimental/source3/rpc_client/rpc_transport_sock.c
   branches/samba/experimental/source3/rpc_client/rpc_transport_tstream.c
   branches/samba/experimental/source3/rpc_server/dcesrv_gssapi.c
   branches/samba/experimental/source3/rpc_server/dfs/srv_dfs_nt.c
   branches/samba/experimental/source3/rpc_server/dssetup/srv_dssetup_nt.c
   branches/samba/experimental/source3/rpc_server/echo/srv_echo_nt.c
   branches/samba/experimental/source3/rpc_server/epmapper/srv_epmapper.c
   branches/samba/experimental/source3/rpc_server/epmd.c
   branches/samba/experimental/source3/rpc_server/eventlog/srv_eventlog_nt.c
   branches/samba/experimental/source3/rpc_server/initshutdown/srv_initshutdown_nt.c
   branches/samba/experimental/source3/rpc_server/lsa/srv_lsa_nt.c
   branches/samba/experimental/source3/rpc_server/netlogon/srv_netlog_nt.c
   branches/samba/experimental/source3/rpc_server/ntsvcs/srv_ntsvcs_nt.c
   branches/samba/experimental/source3/rpc_server/rpc_ep_setup.c
   branches/samba/experimental/source3/rpc_server/rpc_ep_setup.h
   branches/samba/experimental/source3/rpc_server/rpc_handles.c
   branches/samba/experimental/source3/rpc_server/rpc_ncacn_np.c
   branches/samba/experimental/source3/rpc_server/rpc_ncacn_np.h
   branches/samba/experimental/source3/rpc_server/rpc_server.c
   branches/samba/experimental/source3/rpc_server/rpc_server.h
   branches/samba/experimental/source3/rpc_server/samr/srv_samr_nt.c
   branches/samba/experimental/source3/rpc_server/spoolss/srv_spoolss_nt.c
   branches/samba/experimental/source3/rpc_server/spoolss/srv_spoolss_util.c
   branches/samba/experimental/source3/rpc_server/srv_pipe.c
   branches/samba/experimental/source3/rpc_server/srv_pipe_hnd.c
   branches/samba/experimental/source3/rpc_server/srv_pipe_register.c
   branches/samba/experimental/source3/rpc_server/srvsvc/srv_srvsvc_nt.c
   branches/samba/experimental/source3/rpc_server/svcctl/srv_svcctl_nt.c
   branches/samba/experimental/source3/rpc_server/winreg/srv_winreg_nt.c
   branches/samba/experimental/source3/rpc_server/wkssvc/srv_wkssvc_nt.c
   branches/samba/experimental/source3/rpcclient/cmd_spoolss.c
   branches/samba/experimental/source3/rpcclient/rpcclient.c
   branches/samba/experimental/source3/smbd/aio.c
   branches/samba/experimental/source3/smbd/conn.c
   branches/samba/experimental/source3/smbd/dir.c
   branches/samba/experimental/source3/smbd/dosmode.c
   branches/samba/experimental/source3/smbd/fileio.c
   branches/samba/experimental/source3/smbd/files.c
   branches/samba/experimental/source3/smbd/globals.c
   branches/samba/experimental/source3/smbd/globals.h
   branches/samba/experimental/source3/smbd/ipc.c
   branches/samba/experimental/source3/smbd/lanman.c
   branches/samba/experimental/source3/smbd/mangle_hash.c
   branches/samba/experimental/source3/smbd/msg_idmap.c
   branches/samba/experimental/source3/smbd/negprot.c
   branches/samba/experimental/source3/smbd/notify_internal.c
   branches/samba/experimental/source3/smbd/ntquotas.c
   branches/samba/experimental/source3/smbd/nttrans.c
   branches/samba/experimental/source3/smbd/open.c
   branches/samba/experimental/source3/smbd/password.c
   branches/samba/experimental/source3/smbd/pipes.c
   branches/samba/experimental/source3/smbd/process.c
   branches/samba/experimental/source3/smbd/proto.h
   branches/samba/experimental/source3/smbd/reply.c
   branches/samba/experimental/source3/smbd/seal.c
   branches/samba/experimental/source3/smbd/server.c
   branches/samba/experimental/source3/smbd/server_exit.c
   branches/samba/experimental/source3/smbd/service.c
   branches/samba/experimental/source3/smbd/sesssetup.c
   branches/samba/experimental/source3/smbd/smb2_break.c
   branches/samba/experimental/source3/smbd/smb2_create.c
   branches/samba/experimental/source3/smbd/smb2_find.c
   branches/samba/experimental/source3/smbd/smb2_flush.c
   branches/samba/experimental/source3/smbd/smb2_getinfo.c
   branches/samba/experimental/source3/smbd/smb2_ioctl.c
   branches/samba/experimental/source3/smbd/smb2_lock.c
   branches/samba/experimental/source3/smbd/smb2_negprot.c
   branches/samba/experimental/source3/smbd/smb2_notify.c
   branches/samba/experimental/source3/smbd/smb2_read.c
   branches/samba/experimental/source3/smbd/smb2_server.c
   branches/samba/experimental/source3/smbd/smb2_setinfo.c
   branches/samba/experimental/source3/smbd/smb2_write.c
   branches/samba/experimental/source3/smbd/statcache.c
   branches/samba/experimental/source3/smbd/trans2.c
   branches/samba/experimental/source3/smbd/uid.c
   branches/samba/experimental/source3/torture/denytest.c
   branches/samba/experimental/source3/torture/locktest.c
   branches/samba/experimental/source3/torture/locktest2.c
   branches/samba/experimental/source3/torture/mangle_test.c
   branches/samba/experimental/source3/torture/masktest.c
   branches/samba/experimental/source3/torture/nbench.c
   branches/samba/experimental/source3/torture/nbio.c
   branches/samba/experimental/source3/torture/proto.h
   branches/samba/experimental/source3/torture/scanner.c
   branches/samba/experimental/source3/torture/test_async_echo.c
   branches/samba/experimental/source3/torture/test_posix_append.c
   branches/samba/experimental/source3/torture/torture.c
   branches/samba/experimental/source3/torture/utable.c
   branches/samba/experimental/source3/utils/net.c
   branches/samba/experimental/source3/utils/net.h
   branches/samba/experimental/source3/utils/net_ads.c
   branches/samba/experimental/source3/utils/net_conf.c
   branches/samba/experimental/source3/utils/net_dom.c
   branches/samba/experimental/source3/utils/net_idmap.c
   branches/samba/experimental/source3/utils/net_idmap_check.c
   branches/samba/experimental/source3/utils/net_printing.c
   branches/samba/experimental/source3/utils/net_proto.h
   branches/samba/experimental/source3/utils/net_rap.c
   branches/samba/experimental/source3/utils/net_rpc.c
   branches/samba/experimental/source3/utils/net_rpc_join.c
   branches/samba/experimental/source3/utils/net_rpc_printer.c
   branches/samba/experimental/source3/utils/net_rpc_registry.c
   branches/samba/experimental/source3/utils/net_rpc_shell.c
   branches/samba/experimental/source3/utils/net_rpc_trust.c
   branches/samba/experimental/source3/utils/net_time.c
   branches/samba/experimental/source3/utils/net_util.c
   branches/samba/experimental/source3/utils/netlookup.c
   branches/samba/experimental/source3/utils/smbcacls.c
   branches/samba/experimental/source3/utils/smbcontrol.c
   branches/samba/experimental/source3/utils/smbcquotas.c
   branches/samba/experimental/source3/utils/smbtree.c
   branches/samba/experimental/source3/web/diagnose.c
   branches/samba/experimental/source3/winbindd/idmap_autorid.c
   branches/samba/experimental/source3/winbindd/idmap_tdb.c
   branches/samba/experimental/source3/winbindd/idmap_tdb2.c
   branches/samba/experimental/source3/winbindd/wb_fill_pwent.c
   branches/samba/experimental/source3/winbindd/wb_getgrsid.c
   branches/samba/experimental/source3/winbindd/wb_getpwsid.c
   branches/samba/experimental/source3/winbindd/wb_gettoken.c
   branches/samba/experimental/source3/winbindd/wb_group_members.c
   branches/samba/experimental/source3/winbindd/wb_lookupname.c
   branches/samba/experimental/source3/winbindd/wb_lookupsid.c
   branches/samba/experimental/source3/winbindd/wb_next_grent.c
   branches/samba/experimental/source3/winbindd/wb_next_pwent.c
   branches/samba/experimental/source3/winbindd/wb_sid2gid.c
   branches/samba/experimental/source3/winbindd/wb_sid2uid.c
   branches/samba/experimental/source3/winbindd/winbindd.c
   branches/samba/experimental/source3/winbindd/winbindd.h
   branches/samba/experimental/source3/winbindd/winbindd_cache.c
   branches/samba/experimental/source3/winbindd/winbindd_cm.c
   branches/samba/experimental/source3/winbindd/winbindd_dual.c
   branches/samba/experimental/source3/winbindd/winbindd_dual_ndr.c
   branches/samba/experimental/source3/winbindd/winbindd_dual_srv.c
   branches/samba/experimental/source3/winbindd/winbindd_getdcname.c
   branches/samba/experimental/source3/winbindd/winbindd_getgrgid.c
   branches/samba/experimental/source3/winbindd/winbindd_getgrnam.c
   branches/samba/experimental/source3/winbindd/winbindd_getgroups.c
   branches/samba/experimental/source3/winbindd/winbindd_getpwent.c
   branches/samba/experimental/source3/winbindd/winbindd_getpwnam.c
   branches/samba/experimental/source3/winbindd/winbindd_getpwsid.c
   branches/samba/experimental/source3/winbindd/winbindd_getpwuid.c
   branches/samba/experimental/source3/winbindd/winbindd_getsidaliases.c
   branches/samba/experimental/source3/winbindd/winbindd_getuserdomgroups.c
   branches/samba/experimental/source3/winbindd/winbindd_getusersids.c
   branches/samba/experimental/source3/winbindd/winbindd_gid_to_sid.c
   branches/samba/experimental/source3/winbindd/winbindd_lookupname.c
   branches/samba/experimental/source3/winbindd/winbindd_lookupsids.c
   branches/samba/experimental/source3/winbindd/winbindd_pam.c
   branches/samba/experimental/source3/winbindd/winbindd_proto.h
   branches/samba/experimental/source3/winbindd/winbindd_rpc.c
   branches/samba/experimental/source3/winbindd/winbindd_samr.c
   branches/samba/experimental/source3/winbindd/winbindd_show_sequence.c
   branches/samba/experimental/source3/winbindd/winbindd_sid_to_gid.c
   branches/samba/experimental/source3/winbindd/winbindd_sid_to_uid.c
   branches/samba/experimental/source3/winbindd/winbindd_sids_to_xids.c
   branches/samba/experimental/source3/winbindd/winbindd_uid_to_sid.c
   branches/samba/experimental/source3/winbindd/winbindd_util.c
   branches/samba/experimental/source3/wscript
   branches/samba/experimental/source3/wscript_build
   branches/samba/experimental/source4/cluster/local.c
   branches/samba/experimental/source4/lib/messaging/messaging.c
   branches/samba/experimental/source4/lib/wscript_build
   branches/samba/experimental/source4/libcli/rap/rap.c
   branches/samba/experimental/source4/libcli/util/nterr.c
   branches/samba/experimental/source4/ntvfs/common/brlock_tdb.c
   branches/samba/experimental/source4/ntvfs/common/notify.c
   branches/samba/experimental/source4/ntvfs/common/opendb_tdb.c
   branches/samba/experimental/source4/ntvfs/posix/python/pyxattr_tdb.c
   branches/samba/experimental/source4/ntvfs/posix/vfs_posix.c
   branches/samba/experimental/source4/ntvfs/posix/xattr_tdb.c
   branches/samba/experimental/source4/param/secrets.c
   branches/samba/experimental/source4/selftest/knownfail
   branches/samba/experimental/source4/torture/local/dbspeed.c
   branches/samba/experimental/source4/torture/rap/rap.c
Log:
Merge upstream 3.6.0~rc1

Modified: branches/samba/experimental/WHATSNEW.txt
===================================================================
--- branches/samba/experimental/WHATSNEW.txt	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/WHATSNEW.txt	2011-05-19 17:46:26 UTC (rev 3779)
@@ -1,10 +1,10 @@
-                   =================================
-                   Release Notes for Samba 3.6.0pre3
-                            April 26, 2011
-                   =================================
+                   ================================
+                   Release Notes for Samba 3.6.0rc1
+                             May 17, 2011
+                   ================================
 
 
-This is the third preview release of Samba 3.6.0.  This is *not*
+This is the first release candidate of Samba 3.6.0.  This is *not*
 intended for production environments and is designed for testing
 purposes only.  Please report any defects via the Samba bug reporting
 system at https://bugzilla.samba.org/.
@@ -228,6 +228,10 @@
    username map cache time	       New	       0
    winbind max clients		       New	       200
 
+   The variable substitutions for %i and %I no longer
+   use IPv4 addresses mapped to IPv6, e.g. '::ffff:192.168.0.1',
+   if the host has IPv6 enabled. Now %i and %I contain just
+   '192.168.0.1'.
 
 Commit Highlights
 -----------------
@@ -248,6 +252,44 @@
     * Add an Endpoint Mapper daemon.
 
 
+Changes since 3.6.0pre3
+-----------------------
+
+o   Jeremy Allison <jra at samba.org>
+    * BUG 8111: CIFS VFS: Fix unexpected error on SMB posix open.
+    * BUG 8112: POSIX extension opens of a directory are denied with EISDIR.
+    * Remove fstrings from client struct.
+    * BUGFIX when converting from safe_strcpy to strlcpy.
+    * Fix off-by-one calculations with strlcpy.
+    * Ensure we always write the correct incoming mid into the share mode table
+      entries.
+    * Fix the SMB2 oplock showstopper.
+
+
+o   Christian Ambach <christian.ambach at de.ibm.com>
+    * Convert user-specified domain to uppercase in libsmb.
+
+
+o   Günther Deschner <gd at samba.org>
+    * BUG 8132: Fix filling printers location field when using cups.
+    * Fix Coverity CID #2302: FORWARD_NULL.
+    * Fix cups_pull_comment_location().
+    * Fix double free of cups request.
+    * Make cups_pull_comment_location() work again.
+    * Fix potential crash bug in display_print_driver3().
+
+
+o   Volker Lendecke <vl at samba.org>
+    * Properly clean up in pthreadpool_init in case of failure.
+    * Make plaintext session setup async.
+    * Reduce fd load in Winbind children.
+    * Avoid a potential 100% CPU loop in Winbind.
+    * Tune broadcast namequeries for unique names.
+    * Properly deal with exited winbind children.
+    * Fix dup_smb2_vec3.
+    * Fix return check in nss_wins.
+
+
 Changes since 3.6.0pre2
 -----------------------
 
@@ -341,10 +383,6 @@
     * Fix 'net usersidlist' not to skip every other user.
 
 
-o   Gregor Beck <gbeck at sernet.de>
-    * Add "net idmap check", a check and repair tool for the
-      id mapping database.
-
 o   Günther Deschner <gd at samba.org>
     * BUG 7690: Retry DNS updates when connection to one nameserver has failed.
     * BUG 7945: Let winbind try to use samlogon validation level 6.

Modified: branches/samba/experimental/docs/manpages/eventlogadm.8
===================================================================
--- branches/samba/experimental/docs/manpages/eventlogadm.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/eventlogadm.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: eventlogadm
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "EVENTLOGADM" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "EVENTLOGADM" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/findsmb.1
===================================================================
--- branches/samba/experimental/docs/manpages/findsmb.1	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/findsmb.1	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: findsmb
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: User Commands
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "FINDSMB" "1" "04/26/2011" "Samba 3\&.6" "User Commands"
+.TH "FINDSMB" "1" "05/17/2011" "Samba 3\&.6" "User Commands"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/idmap_ad.8
===================================================================
--- branches/samba/experimental/docs/manpages/idmap_ad.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/idmap_ad.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: idmap_ad
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "IDMAP_AD" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "IDMAP_AD" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
@@ -29,7 +29,8 @@
 backend does not work as the the default idmap backend, but one has to configure it separately for each domain for which one wants to use it, using disjoint ranges\&. One usually needs to configure a writeable default idmap range, using for example the
 \fItdb\fR
 or
-\fIldap\fR) backend, in order to be able to map the BUILTIN sids and possibly other trusted domains\&. The writeable default config is also needed in order to be able to create group mappings\&. This catch\-all default idmap configuration should have a range that is disjoint from any explicitly configured domain with idmap backend
+\fIldap\fR
+backend, in order to be able to map the BUILTIN sids and possibly other trusted domains\&. The writeable default config is also needed in order to be able to create group mappings\&. This catch\-all default idmap configuration should have a range that is disjoint from any explicitly configured domain with idmap backend
 \fIad\fR\&. See the example below\&.
 .SH "IDMAP OPTIONS"
 .PP

Modified: branches/samba/experimental/docs/manpages/idmap_adex.8
===================================================================
--- branches/samba/experimental/docs/manpages/idmap_adex.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/idmap_adex.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: idmap_adex
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "IDMAP_ADEX" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "IDMAP_ADEX" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/idmap_autorid.8
===================================================================
--- branches/samba/experimental/docs/manpages/idmap_autorid.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/idmap_autorid.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: idmap_autorid
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "IDMAP_AUTORID" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "IDMAP_AUTORID" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/idmap_hash.8
===================================================================
--- branches/samba/experimental/docs/manpages/idmap_hash.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/idmap_hash.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: idmap_hash
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "IDMAP_HASH" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "IDMAP_HASH" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/idmap_ldap.8
===================================================================
--- branches/samba/experimental/docs/manpages/idmap_ldap.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/idmap_ldap.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: idmap_ldap
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "IDMAP_LDAP" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "IDMAP_LDAP" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/idmap_nss.8
===================================================================
--- branches/samba/experimental/docs/manpages/idmap_nss.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/idmap_nss.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: idmap_nss
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "IDMAP_NSS" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "IDMAP_NSS" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/idmap_rid.8
===================================================================
--- branches/samba/experimental/docs/manpages/idmap_rid.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/idmap_rid.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: idmap_rid
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "IDMAP_RID" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "IDMAP_RID" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/idmap_tdb.8
===================================================================
--- branches/samba/experimental/docs/manpages/idmap_tdb.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/idmap_tdb.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: idmap_tdb
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "IDMAP_TDB" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "IDMAP_TDB" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/idmap_tdb2.8
===================================================================
--- branches/samba/experimental/docs/manpages/idmap_tdb2.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/idmap_tdb2.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: idmap_tdb2
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "IDMAP_TDB2" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "IDMAP_TDB2" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/ldb.3
===================================================================
--- branches/samba/experimental/docs/manpages/ldb.3	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/ldb.3	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: ldb
 .\"    Author: [see the "Author" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: C Library Functions
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "LDB" "3" "04/26/2011" "Samba 3\&.6" "C Library Functions"
+.TH "LDB" "3" "05/17/2011" "Samba 3\&.6" "C Library Functions"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/ldbadd.1
===================================================================
--- branches/samba/experimental/docs/manpages/ldbadd.1	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/ldbadd.1	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: ldbadd
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: User Commands
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "LDBADD" "1" "04/26/2011" "Samba 3\&.6" "User Commands"
+.TH "LDBADD" "1" "05/17/2011" "Samba 3\&.6" "User Commands"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/ldbdel.1
===================================================================
--- branches/samba/experimental/docs/manpages/ldbdel.1	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/ldbdel.1	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: ldbdel
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: User Commands
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "LDBDEL" "1" "04/26/2011" "Samba 3\&.6" "User Commands"
+.TH "LDBDEL" "1" "05/17/2011" "Samba 3\&.6" "User Commands"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/ldbedit.1
===================================================================
--- branches/samba/experimental/docs/manpages/ldbedit.1	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/ldbedit.1	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: ldbedit
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: User Commands
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "LDBEDIT" "1" "04/26/2011" "Samba 3\&.6" "User Commands"
+.TH "LDBEDIT" "1" "05/17/2011" "Samba 3\&.6" "User Commands"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/ldbmodify.1
===================================================================
--- branches/samba/experimental/docs/manpages/ldbmodify.1	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/ldbmodify.1	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: ldbmodify
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: User Commands
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "LDBMODIFY" "1" "04/26/2011" "Samba 3\&.6" "User Commands"
+.TH "LDBMODIFY" "1" "05/17/2011" "Samba 3\&.6" "User Commands"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/ldbrename.1
===================================================================
--- branches/samba/experimental/docs/manpages/ldbrename.1	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/ldbrename.1	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: ldbrename
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: User Commands
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "LDBRENAME" "1" "04/26/2011" "Samba 3\&.6" "User Commands"
+.TH "LDBRENAME" "1" "05/17/2011" "Samba 3\&.6" "User Commands"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/ldbsearch.1
===================================================================
--- branches/samba/experimental/docs/manpages/ldbsearch.1	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/ldbsearch.1	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: ldbsearch
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: User Commands
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "LDBSEARCH" "1" "04/26/2011" "Samba 3\&.6" "User Commands"
+.TH "LDBSEARCH" "1" "05/17/2011" "Samba 3\&.6" "User Commands"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/libsmbclient.7
===================================================================
--- branches/samba/experimental/docs/manpages/libsmbclient.7	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/libsmbclient.7	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: libsmbclient
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: 7
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "LIBSMBCLIENT" "7" "04/26/2011" "Samba 3\&.6" "7"
+.TH "LIBSMBCLIENT" "7" "05/17/2011" "Samba 3\&.6" "7"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/lmhosts.5
===================================================================
--- branches/samba/experimental/docs/manpages/lmhosts.5	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/lmhosts.5	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: lmhosts
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: File Formats and Conventions
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "LMHOSTS" "5" "04/26/2011" "Samba 3\&.6" "File Formats and Conventions"
+.TH "LMHOSTS" "5" "05/17/2011" "Samba 3\&.6" "File Formats and Conventions"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/log2pcap.1
===================================================================
--- branches/samba/experimental/docs/manpages/log2pcap.1	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/log2pcap.1	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: log2pcap
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: User Commands
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "LOG2PCAP" "1" "04/26/2011" "Samba 3\&.6" "User Commands"
+.TH "LOG2PCAP" "1" "05/17/2011" "Samba 3\&.6" "User Commands"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/net.8
===================================================================
--- branches/samba/experimental/docs/manpages/net.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/net.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: net
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "NET" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "NET" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/nmbd.8
===================================================================
--- branches/samba/experimental/docs/manpages/nmbd.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/nmbd.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: nmbd
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "NMBD" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "NMBD" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/nmblookup.1
===================================================================
--- branches/samba/experimental/docs/manpages/nmblookup.1	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/nmblookup.1	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: nmblookup
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: User Commands
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "NMBLOOKUP" "1" "04/26/2011" "Samba 3\&.6" "User Commands"
+.TH "NMBLOOKUP" "1" "05/17/2011" "Samba 3\&.6" "User Commands"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/ntlm_auth.1
===================================================================
--- branches/samba/experimental/docs/manpages/ntlm_auth.1	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/ntlm_auth.1	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: ntlm_auth
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: User Commands
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "NTLM_AUTH" "1" "04/26/2011" "Samba 3\&.6" "User Commands"
+.TH "NTLM_AUTH" "1" "05/17/2011" "Samba 3\&.6" "User Commands"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/pam_winbind.8
===================================================================
--- branches/samba/experimental/docs/manpages/pam_winbind.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/pam_winbind.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: pam_winbind
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: 8
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "PAM_WINBIND" "8" "04/26/2011" "Samba 3\&.6" "8"
+.TH "PAM_WINBIND" "8" "05/17/2011" "Samba 3\&.6" "8"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/pam_winbind.conf.5
===================================================================
--- branches/samba/experimental/docs/manpages/pam_winbind.conf.5	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/pam_winbind.conf.5	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: pam_winbind.conf
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: 5
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "PAM_WINBIND\&.CONF" "5" "04/26/2011" "Samba 3\&.6" "5"
+.TH "PAM_WINBIND\&.CONF" "5" "05/17/2011" "Samba 3\&.6" "5"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/pdbedit.8
===================================================================
--- branches/samba/experimental/docs/manpages/pdbedit.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/pdbedit.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: pdbedit
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "PDBEDIT" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "PDBEDIT" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/profiles.1
===================================================================
--- branches/samba/experimental/docs/manpages/profiles.1	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/profiles.1	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: profiles
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: User Commands
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "PROFILES" "1" "04/26/2011" "Samba 3\&.6" "User Commands"
+.TH "PROFILES" "1" "05/17/2011" "Samba 3\&.6" "User Commands"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/rpcclient.1
===================================================================
--- branches/samba/experimental/docs/manpages/rpcclient.1	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/rpcclient.1	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: rpcclient
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: User Commands
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "RPCCLIENT" "1" "04/26/2011" "Samba 3\&.6" "User Commands"
+.TH "RPCCLIENT" "1" "05/17/2011" "Samba 3\&.6" "User Commands"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/samba.7
===================================================================
--- branches/samba/experimental/docs/manpages/samba.7	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/samba.7	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: samba
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: Miscellanea
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "SAMBA" "7" "04/26/2011" "Samba 3\&.6" "Miscellanea"
+.TH "SAMBA" "7" "05/17/2011" "Samba 3\&.6" "Miscellanea"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/sharesec.1
===================================================================
--- branches/samba/experimental/docs/manpages/sharesec.1	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/sharesec.1	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: sharesec
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: User Commands
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "SHARESEC" "1" "04/26/2011" "Samba 3\&.6" "User Commands"
+.TH "SHARESEC" "1" "05/17/2011" "Samba 3\&.6" "User Commands"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/smb.conf.5
===================================================================
--- branches/samba/experimental/docs/manpages/smb.conf.5	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/smb.conf.5	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: smb.conf
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: File Formats and Conventions
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "SMB\&.CONF" "5" "04/26/2011" "Samba 3\&.6" "File Formats and Conventions"
+.TH "SMB\&.CONF" "5" "05/17/2011" "Samba 3\&.6" "File Formats and Conventions"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/smbcacls.1
===================================================================
--- branches/samba/experimental/docs/manpages/smbcacls.1	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/smbcacls.1	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: smbcacls
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: User Commands
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "SMBCACLS" "1" "04/26/2011" "Samba 3\&.6" "User Commands"
+.TH "SMBCACLS" "1" "05/17/2011" "Samba 3\&.6" "User Commands"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/smbclient.1
===================================================================
--- branches/samba/experimental/docs/manpages/smbclient.1	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/smbclient.1	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: smbclient
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: User Commands
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "SMBCLIENT" "1" "04/26/2011" "Samba 3\&.6" "User Commands"
+.TH "SMBCLIENT" "1" "05/17/2011" "Samba 3\&.6" "User Commands"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/smbcontrol.1
===================================================================
--- branches/samba/experimental/docs/manpages/smbcontrol.1	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/smbcontrol.1	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: smbcontrol
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: User Commands
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "SMBCONTROL" "1" "04/26/2011" "Samba 3\&.6" "User Commands"
+.TH "SMBCONTROL" "1" "05/17/2011" "Samba 3\&.6" "User Commands"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/smbcquotas.1
===================================================================
--- branches/samba/experimental/docs/manpages/smbcquotas.1	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/smbcquotas.1	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: smbcquotas
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: User Commands
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "SMBCQUOTAS" "1" "04/26/2011" "Samba 3\&.6" "User Commands"
+.TH "SMBCQUOTAS" "1" "05/17/2011" "Samba 3\&.6" "User Commands"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/smbd.8
===================================================================
--- branches/samba/experimental/docs/manpages/smbd.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/smbd.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: smbd
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "SMBD" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "SMBD" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/smbget.1
===================================================================
--- branches/samba/experimental/docs/manpages/smbget.1	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/smbget.1	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: smbget
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: User Commands
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "SMBGET" "1" "04/26/2011" "Samba 3\&.6" "User Commands"
+.TH "SMBGET" "1" "05/17/2011" "Samba 3\&.6" "User Commands"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/smbgetrc.5
===================================================================
--- branches/samba/experimental/docs/manpages/smbgetrc.5	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/smbgetrc.5	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: smbgetrc
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: File Formats and Conventions
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "SMBGETRC" "5" "04/26/2011" "Samba 3\&.6" "File Formats and Conventions"
+.TH "SMBGETRC" "5" "05/17/2011" "Samba 3\&.6" "File Formats and Conventions"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/smbpasswd.5
===================================================================
--- branches/samba/experimental/docs/manpages/smbpasswd.5	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/smbpasswd.5	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: smbpasswd
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: File Formats and Conventions
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "SMBPASSWD" "5" "04/26/2011" "Samba 3\&.6" "File Formats and Conventions"
+.TH "SMBPASSWD" "5" "05/17/2011" "Samba 3\&.6" "File Formats and Conventions"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/smbpasswd.8
===================================================================
--- branches/samba/experimental/docs/manpages/smbpasswd.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/smbpasswd.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: smbpasswd
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "SMBPASSWD" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "SMBPASSWD" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/smbspool.8
===================================================================
--- branches/samba/experimental/docs/manpages/smbspool.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/smbspool.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: smbspool
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "SMBSPOOL" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "SMBSPOOL" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/smbstatus.1
===================================================================
--- branches/samba/experimental/docs/manpages/smbstatus.1	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/smbstatus.1	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: smbstatus
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: User Commands
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "SMBSTATUS" "1" "04/26/2011" "Samba 3\&.6" "User Commands"
+.TH "SMBSTATUS" "1" "05/17/2011" "Samba 3\&.6" "User Commands"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/smbta-util.8
===================================================================
--- branches/samba/experimental/docs/manpages/smbta-util.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/smbta-util.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: smbta-util
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "SMBTA\-UTIL" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "SMBTA\-UTIL" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/smbtar.1
===================================================================
--- branches/samba/experimental/docs/manpages/smbtar.1	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/smbtar.1	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: smbtar
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: User Commands
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "SMBTAR" "1" "04/26/2011" "Samba 3\&.6" "User Commands"
+.TH "SMBTAR" "1" "05/17/2011" "Samba 3\&.6" "User Commands"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/smbtree.1
===================================================================
--- branches/samba/experimental/docs/manpages/smbtree.1	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/smbtree.1	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: smbtree
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: User Commands
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "SMBTREE" "1" "04/26/2011" "Samba 3\&.6" "User Commands"
+.TH "SMBTREE" "1" "05/17/2011" "Samba 3\&.6" "User Commands"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/swat.8
===================================================================
--- branches/samba/experimental/docs/manpages/swat.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/swat.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: swat
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "SWAT" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "SWAT" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/tdbbackup.8
===================================================================
--- branches/samba/experimental/docs/manpages/tdbbackup.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/tdbbackup.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: tdbbackup
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "TDBBACKUP" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "TDBBACKUP" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/tdbdump.8
===================================================================
--- branches/samba/experimental/docs/manpages/tdbdump.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/tdbdump.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: tdbdump
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "TDBDUMP" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "TDBDUMP" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/tdbtool.8
===================================================================
--- branches/samba/experimental/docs/manpages/tdbtool.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/tdbtool.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: tdbtool
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "TDBTOOL" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "TDBTOOL" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/testparm.1
===================================================================
--- branches/samba/experimental/docs/manpages/testparm.1	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/testparm.1	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: testparm
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: User Commands
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "TESTPARM" "1" "04/26/2011" "Samba 3\&.6" "User Commands"
+.TH "TESTPARM" "1" "05/17/2011" "Samba 3\&.6" "User Commands"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/vfs_acl_tdb.8
===================================================================
--- branches/samba/experimental/docs/manpages/vfs_acl_tdb.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/vfs_acl_tdb.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: vfs_acl_tdb
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_ACL_TDB" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_ACL_TDB" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/vfs_acl_xattr.8
===================================================================
--- branches/samba/experimental/docs/manpages/vfs_acl_xattr.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/vfs_acl_xattr.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: vfs_acl_xattr
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_ACL_XATTR" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_ACL_XATTR" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/vfs_audit.8
===================================================================
--- branches/samba/experimental/docs/manpages/vfs_audit.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/vfs_audit.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: vfs_audit
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_AUDIT" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_AUDIT" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/vfs_cacheprime.8
===================================================================
--- branches/samba/experimental/docs/manpages/vfs_cacheprime.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/vfs_cacheprime.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: vfs_cacheprime
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_CACHEPRIME" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_CACHEPRIME" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/vfs_cap.8
===================================================================
--- branches/samba/experimental/docs/manpages/vfs_cap.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/vfs_cap.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: vfs_cap
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_CAP" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_CAP" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/vfs_catia.8
===================================================================
--- branches/samba/experimental/docs/manpages/vfs_catia.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/vfs_catia.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: vfs_catia
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_CATIA" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_CATIA" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/vfs_commit.8
===================================================================
--- branches/samba/experimental/docs/manpages/vfs_commit.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/vfs_commit.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: vfs_commit
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_COMMIT" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_COMMIT" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/vfs_crossrename.8
===================================================================
--- branches/samba/experimental/docs/manpages/vfs_crossrename.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/vfs_crossrename.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: vfs_crossrename
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_CROSSRENAME" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_CROSSRENAME" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/vfs_default_quota.8
===================================================================
--- branches/samba/experimental/docs/manpages/vfs_default_quota.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/vfs_default_quota.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: vfs_default_quota
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_DEFAULT_QUOTA" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_DEFAULT_QUOTA" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/vfs_dirsort.8
===================================================================
--- branches/samba/experimental/docs/manpages/vfs_dirsort.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/vfs_dirsort.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: vfs_dirsort
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_DIRSORT" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_DIRSORT" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/vfs_extd_audit.8
===================================================================
--- branches/samba/experimental/docs/manpages/vfs_extd_audit.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/vfs_extd_audit.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: vfs_extd_audit
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_EXTD_AUDIT" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_EXTD_AUDIT" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/vfs_fake_perms.8
===================================================================
--- branches/samba/experimental/docs/manpages/vfs_fake_perms.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/vfs_fake_perms.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: vfs_fake_perms
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_FAKE_PERMS" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_FAKE_PERMS" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/vfs_fileid.8
===================================================================
--- branches/samba/experimental/docs/manpages/vfs_fileid.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/vfs_fileid.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: vfs_fileid
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_FILEID" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_FILEID" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/vfs_full_audit.8
===================================================================
--- branches/samba/experimental/docs/manpages/vfs_full_audit.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/vfs_full_audit.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: vfs_full_audit
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_FULL_AUDIT" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_FULL_AUDIT" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/vfs_gpfs.8
===================================================================
--- branches/samba/experimental/docs/manpages/vfs_gpfs.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/vfs_gpfs.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: vfs_gpfs
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_GPFS" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_GPFS" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
@@ -444,6 +444,37 @@
 .sp
 .RE
 .RE
+.PP
+gpfs:syncio = [yes|no]
+.RS 4
+This parameter makes Samba open all files with O_SYNC\&. This triggers optimizations in GPFS for workloads that heavily share files\&.
+.sp
+Following is the behaviour of Samba for different values:
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+yesOpen files with O_SYNC
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+no (default)Open files as normal Samba would do
+.RE
+.sp
+.RE
+.RE
 .SH "EXAMPLES"
 .PP
 A GPFS mount can be exported via Samba as follows :

Modified: branches/samba/experimental/docs/manpages/vfs_netatalk.8
===================================================================
--- branches/samba/experimental/docs/manpages/vfs_netatalk.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/vfs_netatalk.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: vfs_netatalk
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_NETATALK" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_NETATALK" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/vfs_notify_fam.8
===================================================================
--- branches/samba/experimental/docs/manpages/vfs_notify_fam.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/vfs_notify_fam.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: vfs_notify_fam
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_NOTIFY_FAM" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_NOTIFY_FAM" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/vfs_prealloc.8
===================================================================
--- branches/samba/experimental/docs/manpages/vfs_prealloc.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/vfs_prealloc.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: vfs_prealloc
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_PREALLOC" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_PREALLOC" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/vfs_preopen.8
===================================================================
--- branches/samba/experimental/docs/manpages/vfs_preopen.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/vfs_preopen.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: vfs_preopen
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_PREOPEN" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_PREOPEN" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/vfs_readahead.8
===================================================================
--- branches/samba/experimental/docs/manpages/vfs_readahead.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/vfs_readahead.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: vfs_readahead
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_READAHEAD" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_READAHEAD" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/vfs_readonly.8
===================================================================
--- branches/samba/experimental/docs/manpages/vfs_readonly.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/vfs_readonly.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: vfs_readonly
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_READONLY" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_READONLY" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/vfs_recycle.8
===================================================================
--- branches/samba/experimental/docs/manpages/vfs_recycle.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/vfs_recycle.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: vfs_recycle
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_RECYCLE" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_RECYCLE" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/vfs_scannedonly.8
===================================================================
--- branches/samba/experimental/docs/manpages/vfs_scannedonly.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/vfs_scannedonly.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: vfs_scannedonly
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_SCANNEDONLY" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_SCANNEDONLY" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/vfs_shadow_copy.8
===================================================================
--- branches/samba/experimental/docs/manpages/vfs_shadow_copy.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/vfs_shadow_copy.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: vfs_shadow_copy
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_SHADOW_COPY" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_SHADOW_COPY" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/vfs_shadow_copy2.8
===================================================================
--- branches/samba/experimental/docs/manpages/vfs_shadow_copy2.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/vfs_shadow_copy2.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: vfs_shadow_copy2
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_SHADOW_COPY2" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_SHADOW_COPY2" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/vfs_smb_traffic_analyzer.8
===================================================================
--- branches/samba/experimental/docs/manpages/vfs_smb_traffic_analyzer.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/vfs_smb_traffic_analyzer.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: smb_traffic_analyzer
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "SMB_TRAFFIC_ANALYZER" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "SMB_TRAFFIC_ANALYZER" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/vfs_streams_depot.8
===================================================================
--- branches/samba/experimental/docs/manpages/vfs_streams_depot.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/vfs_streams_depot.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: vfs_streams_depot
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_STREAMS_DEPOT" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_STREAMS_DEPOT" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/vfs_streams_xattr.8
===================================================================
--- branches/samba/experimental/docs/manpages/vfs_streams_xattr.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/vfs_streams_xattr.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: vfs_streams_xattr
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_STREAMS_XATTR" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_STREAMS_XATTR" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/vfs_time_audit.8
===================================================================
--- branches/samba/experimental/docs/manpages/vfs_time_audit.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/vfs_time_audit.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: vfs_time_audit
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_TIME_AUDIT" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_TIME_AUDIT" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/vfs_xattr_tdb.8
===================================================================
--- branches/samba/experimental/docs/manpages/vfs_xattr_tdb.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/vfs_xattr_tdb.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: vfs_xattr_tdb
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_XATTR_TDB" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_XATTR_TDB" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/vfstest.1
===================================================================
--- branches/samba/experimental/docs/manpages/vfstest.1	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/vfstest.1	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: vfstest
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: User Commands
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFSTEST" "1" "04/26/2011" "Samba 3\&.6" "User Commands"
+.TH "VFSTEST" "1" "05/17/2011" "Samba 3\&.6" "User Commands"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/wbinfo.1
===================================================================
--- branches/samba/experimental/docs/manpages/wbinfo.1	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/wbinfo.1	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: wbinfo
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: User Commands
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "WBINFO" "1" "04/26/2011" "Samba 3\&.6" "User Commands"
+.TH "WBINFO" "1" "05/17/2011" "Samba 3\&.6" "User Commands"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/winbind_krb5_locator.7
===================================================================
--- branches/samba/experimental/docs/manpages/winbind_krb5_locator.7	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/winbind_krb5_locator.7	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: winbind_krb5_locator
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: 7
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "WINBIND_KRB5_LOCATOR" "7" "04/26/2011" "Samba 3\&.6" "7"
+.TH "WINBIND_KRB5_LOCATOR" "7" "05/17/2011" "Samba 3\&.6" "7"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs/manpages/winbindd.8
===================================================================
--- branches/samba/experimental/docs/manpages/winbindd.8	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs/manpages/winbindd.8	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,12 +2,12 @@
 .\"     Title: winbindd
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 04/26/2011
+.\"      Date: 05/17/2011
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "WINBINDD" "8" "04/26/2011" "Samba 3\&.6" "System Administration tools"
+.TH "WINBINDD" "8" "05/17/2011" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------

Modified: branches/samba/experimental/docs-xml/manpages-3/idmap_ad.8.xml
===================================================================
--- branches/samba/experimental/docs-xml/manpages-3/idmap_ad.8.xml	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs-xml/manpages-3/idmap_ad.8.xml	2011-05-19 17:46:26 UTC (rev 3779)
@@ -34,7 +34,7 @@
 	to configure it separately for each domain for which one wants
 	to use it, using disjoint ranges. One usually needs to configure
 	a writeable default idmap range, using for example the
-	<parameter>tdb</parameter> or <parameter>ldap</parameter>)
+	<parameter>tdb</parameter> or <parameter>ldap</parameter>
 	backend, in order to be able to map the BUILTIN sids and
 	possibly other trusted domains. The writeable default config
 	is also needed in order to be able to create group mappings.

Modified: branches/samba/experimental/docs-xml/manpages-3/vfs_gpfs.8.xml
===================================================================
--- branches/samba/experimental/docs-xml/manpages-3/vfs_gpfs.8.xml	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/docs-xml/manpages-3/vfs_gpfs.8.xml	2011-05-19 17:46:26 UTC (rev 3779)
@@ -276,6 +276,26 @@
 		</listitem>
 		</varlistentry>
 
+		<varlistentry>
+		<term>gpfs:syncio = [yes|no]</term>
+		<listitem>
+		<para>This parameter makes Samba open all files with O_SYNC.
+		  This triggers optimizations in GPFS for workloads that
+		  heavily share files.</para>
+
+		<para>Following is the behaviour of Samba for different
+		  values:
+		</para>
+		<itemizedlist>
+		<listitem><para><command>yes</command>Open files with O_SYNC
+		</para></listitem>
+		<listitem><para><command>no (default)</command>Open files as
+		    normal Samba would do
+		</para></listitem>
+		</itemizedlist>
+		</listitem>
+		</varlistentry>
+
 	</variablelist>
 </refsect1>
 

Modified: branches/samba/experimental/lib/smbconf/smbconf.c
===================================================================
--- branches/samba/experimental/lib/smbconf/smbconf.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/lib/smbconf/smbconf.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -27,12 +27,13 @@
  *
  **********************************************************************/
 
-static WERROR smbconf_global_check(struct smbconf_ctx *ctx)
+static sbcErr smbconf_global_check(struct smbconf_ctx *ctx)
 {
 	if (!smbconf_share_exists(ctx, GLOBAL_NAME)) {
 		return smbconf_create_share(ctx, GLOBAL_NAME);
 	}
-	return WERR_OK;
+
+	return SBC_ERR_OK;
 }
 
 
@@ -42,6 +43,41 @@
  *
  **********************************************************************/
 
+const char *sbcErrorString(sbcErr error)
+{
+	switch (error) {
+		case SBC_ERR_OK:
+			return "SBC_ERR_OK";
+		case SBC_ERR_NOT_IMPLEMENTED:
+			return "SBC_ERR_NOT_IMPLEMENTED";
+		case SBC_ERR_NOT_SUPPORTED:
+			return "SBC_ERR_NOT_SUPPORTED";
+		case SBC_ERR_UNKNOWN_FAILURE:
+			return "SBC_ERR_UNKNOWN_FAILURE";
+		case SBC_ERR_NOMEM:
+			return "SBC_ERR_NOMEM";
+		case SBC_ERR_INVALID_PARAM:
+			return "SBC_ERR_INVALID_PARAM";
+		case SBC_ERR_BADFILE:
+			return "SBC_ERR_BADFILE";
+		case SBC_ERR_NO_SUCH_SERVICE:
+			return "SBC_ERR_NO_SUCH_SERVICE";
+		case SBC_ERR_IO_FAILURE:
+			return "SBC_ERR_IO_FAILURE";
+		case SBC_ERR_CAN_NOT_COMPLETE:
+			return "SBC_ERR_CAN_NOT_COMPLETE";
+		case SBC_ERR_NO_MORE_ITEMS:
+			return "SBC_ERR_NO_MORE_ITEMS";
+		case SBC_ERR_FILE_EXISTS:
+			return "SBC_ERR_FILE_EXISTS";
+		case SBC_ERR_ACCESS_DENIED:
+			return "SBC_ERR_ACCESS_DENIED";
+	}
+
+	return "unknown sbcErr value";
+}
+
+
 /**
  * Tell whether the backend requires messaging to be set up
  * for the backend to work correctly.
@@ -91,7 +127,7 @@
 /**
  * Drop the whole configuration (restarting empty).
  */
-WERROR smbconf_drop(struct smbconf_ctx *ctx)
+sbcErr smbconf_drop(struct smbconf_ctx *ctx)
 {
 	return ctx->ops->drop(ctx);
 }
@@ -105,12 +141,12 @@
  *  param_names  : list of lists of parameter names for each share
  *  param_values : list of lists of parameter values for each share
  */
-WERROR smbconf_get_config(struct smbconf_ctx *ctx,
+sbcErr smbconf_get_config(struct smbconf_ctx *ctx,
 			  TALLOC_CTX *mem_ctx,
 			  uint32_t *num_shares,
 			  struct smbconf_service ***services)
 {
-	WERROR werr = WERR_OK;
+	sbcErr err;
 	TALLOC_CTX *tmp_ctx = NULL;
 	uint32_t tmp_num_shares;
 	char **tmp_share_names;
@@ -118,36 +154,35 @@
 	uint32_t count;
 
 	if ((num_shares == NULL) || (services == NULL)) {
-		werr = WERR_INVALID_PARAM;
+		err = SBC_ERR_INVALID_PARAM;
 		goto done;
 	}
 
 	tmp_ctx = talloc_stackframe();
 
-	werr = smbconf_get_share_names(ctx, tmp_ctx, &tmp_num_shares,
-				       &tmp_share_names);
-	if (!W_ERROR_IS_OK(werr)) {
+	err = smbconf_get_share_names(ctx, tmp_ctx, &tmp_num_shares,
+				      &tmp_share_names);
+	if (!SBC_ERROR_IS_OK(err)) {
 		goto done;
 	}
 
 	tmp_services = talloc_array(tmp_ctx, struct smbconf_service *,
 				    tmp_num_shares);
-
 	if (tmp_services == NULL) {
-		werr = WERR_NOMEM;
+		err = SBC_ERR_NOMEM;
 		goto done;
 	}
 
 	for (count = 0; count < tmp_num_shares; count++) {
-		werr = smbconf_get_share(ctx, tmp_services,
-					 tmp_share_names[count],
-					 &tmp_services[count]);
-		if (!W_ERROR_IS_OK(werr)) {
+		err = smbconf_get_share(ctx, tmp_services,
+					tmp_share_names[count],
+					&tmp_services[count]);
+		if (!SBC_ERROR_IS_OK(err)) {
 			goto done;
 		}
 	}
 
-	werr = WERR_OK;
+	err = SBC_ERR_OK;
 
 	*num_shares = tmp_num_shares;
 	if (tmp_num_shares > 0) {
@@ -158,13 +193,13 @@
 
 done:
 	talloc_free(tmp_ctx);
-	return werr;
+	return err;
 }
 
 /**
  * get the list of share names defined in the configuration.
  */
-WERROR smbconf_get_share_names(struct smbconf_ctx *ctx,
+sbcErr smbconf_get_share_names(struct smbconf_ctx *ctx,
 			       TALLOC_CTX *mem_ctx,
 			       uint32_t *num_shares,
 			       char ***share_names)
@@ -185,11 +220,11 @@
 /**
  * Add a service if it does not already exist.
  */
-WERROR smbconf_create_share(struct smbconf_ctx *ctx,
+sbcErr smbconf_create_share(struct smbconf_ctx *ctx,
 			    const char *servicename)
 {
 	if ((servicename != NULL) && smbconf_share_exists(ctx, servicename)) {
-		return WERR_FILE_EXISTS;
+		return SBC_ERR_FILE_EXISTS;
 	}
 
 	return ctx->ops->create_share(ctx, servicename);
@@ -198,7 +233,7 @@
 /**
  * get a definition of a share (service) from configuration.
  */
-WERROR smbconf_get_share(struct smbconf_ctx *ctx,
+sbcErr smbconf_get_share(struct smbconf_ctx *ctx,
 			 TALLOC_CTX *mem_ctx,
 			 const char *servicename,
 			 struct smbconf_service **service)
@@ -209,10 +244,10 @@
 /**
  * delete a service from configuration
  */
-WERROR smbconf_delete_share(struct smbconf_ctx *ctx, const char *servicename)
+sbcErr smbconf_delete_share(struct smbconf_ctx *ctx, const char *servicename)
 {
 	if (!smbconf_share_exists(ctx, servicename)) {
-		return WERR_NO_SUCH_SERVICE;
+		return SBC_ERR_NO_SUCH_SERVICE;
 	}
 
 	return ctx->ops->delete_share(ctx, servicename);
@@ -221,7 +256,7 @@
 /**
  * set a configuration parameter to the value provided.
  */
-WERROR smbconf_set_parameter(struct smbconf_ctx *ctx,
+sbcErr smbconf_set_parameter(struct smbconf_ctx *ctx,
 			     const char *service,
 			     const char *param,
 			     const char *valstr)
@@ -235,30 +270,31 @@
  *
  * This also creates [global] when it does not exist.
  */
-WERROR smbconf_set_global_parameter(struct smbconf_ctx *ctx,
+sbcErr smbconf_set_global_parameter(struct smbconf_ctx *ctx,
 				    const char *param, const char *val)
 {
-	WERROR werr;
+	sbcErr err;
 
-	werr = smbconf_global_check(ctx);
-	if (W_ERROR_IS_OK(werr)) {
-		werr = smbconf_set_parameter(ctx, GLOBAL_NAME, param, val);
+	err = smbconf_global_check(ctx);
+	if (!SBC_ERROR_IS_OK(err)) {
+		return err;
 	}
+	err = smbconf_set_parameter(ctx, GLOBAL_NAME, param, val);
 
-	return werr;
+	return err;
 }
 
 /**
  * get the value of a configuration parameter as a string
  */
-WERROR smbconf_get_parameter(struct smbconf_ctx *ctx,
+sbcErr smbconf_get_parameter(struct smbconf_ctx *ctx,
 			     TALLOC_CTX *mem_ctx,
 			     const char *service,
 			     const char *param,
 			     char **valstr)
 {
 	if (valstr == NULL) {
-		return WERR_INVALID_PARAM;
+		return SBC_ERR_INVALID_PARAM;
 	}
 
 	return ctx->ops->get_parameter(ctx, mem_ctx, service, param, valstr);
@@ -269,26 +305,28 @@
  *
  * Create [global] if it does not exist.
  */
-WERROR smbconf_get_global_parameter(struct smbconf_ctx *ctx,
+sbcErr smbconf_get_global_parameter(struct smbconf_ctx *ctx,
 				    TALLOC_CTX *mem_ctx,
 				    const char *param,
 				    char **valstr)
 {
-	WERROR werr;
+	sbcErr err;
 
-	werr = smbconf_global_check(ctx);
-	if (W_ERROR_IS_OK(werr)) {
-		werr = smbconf_get_parameter(ctx, mem_ctx, GLOBAL_NAME, param,
-					     valstr);
+	err = smbconf_global_check(ctx);
+	if (!SBC_ERROR_IS_OK(err)) {
+		return err;
 	}
 
-	return werr;
+	err = smbconf_get_parameter(ctx, mem_ctx, GLOBAL_NAME, param,
+				    valstr);
+
+	return err;
 }
 
 /**
  * delete a parameter from configuration
  */
-WERROR smbconf_delete_parameter(struct smbconf_ctx *ctx,
+sbcErr smbconf_delete_parameter(struct smbconf_ctx *ctx,
 				const char *service, const char *param)
 {
 	return ctx->ops->delete_parameter(ctx, service, param);
@@ -299,20 +337,21 @@
  *
  * Create [global] if it does not exist.
  */
-WERROR smbconf_delete_global_parameter(struct smbconf_ctx *ctx,
+sbcErr smbconf_delete_global_parameter(struct smbconf_ctx *ctx,
 				       const char *param)
 {
-	WERROR werr;
+	sbcErr err;
 
-	werr = smbconf_global_check(ctx);
-	if (W_ERROR_IS_OK(werr)) {
-		werr = smbconf_delete_parameter(ctx, GLOBAL_NAME, param);
+	err = smbconf_global_check(ctx);
+	if (!SBC_ERROR_IS_OK(err)) {
+		return err;
 	}
+	err = smbconf_delete_parameter(ctx, GLOBAL_NAME, param);
 
-	return werr;
+	return err;
 }
 
-WERROR smbconf_get_includes(struct smbconf_ctx *ctx,
+sbcErr smbconf_get_includes(struct smbconf_ctx *ctx,
 			    TALLOC_CTX *mem_ctx,
 			    const char *service,
 			    uint32_t *num_includes, char ***includes)
@@ -321,72 +360,75 @@
 				      includes);
 }
 
-WERROR smbconf_get_global_includes(struct smbconf_ctx *ctx,
+sbcErr smbconf_get_global_includes(struct smbconf_ctx *ctx,
 				   TALLOC_CTX *mem_ctx,
 				   uint32_t *num_includes, char ***includes)
 {
-	WERROR werr;
+	sbcErr err;
 
-	werr = smbconf_global_check(ctx);
-	if (W_ERROR_IS_OK(werr)) {
-		werr = smbconf_get_includes(ctx, mem_ctx, GLOBAL_NAME,
-					    num_includes, includes);
+	err = smbconf_global_check(ctx);
+	if (!SBC_ERROR_IS_OK(err)) {
+		return err;
 	}
+	err = smbconf_get_includes(ctx, mem_ctx, GLOBAL_NAME,
+				    num_includes, includes);
 
-	return werr;
+	return err;
 }
 
-WERROR smbconf_set_includes(struct smbconf_ctx *ctx,
+sbcErr smbconf_set_includes(struct smbconf_ctx *ctx,
 			    const char *service,
 			    uint32_t num_includes, const char **includes)
 {
 	return ctx->ops->set_includes(ctx, service, num_includes, includes);
 }
 
-WERROR smbconf_set_global_includes(struct smbconf_ctx *ctx,
+sbcErr smbconf_set_global_includes(struct smbconf_ctx *ctx,
 				   uint32_t num_includes,
 				   const char **includes)
 {
-	WERROR werr;
+	sbcErr err;
 
-	werr = smbconf_global_check(ctx);
-	if (W_ERROR_IS_OK(werr)) {
-		werr = smbconf_set_includes(ctx, GLOBAL_NAME,
-					    num_includes, includes);
+	err = smbconf_global_check(ctx);
+	if (!SBC_ERROR_IS_OK(err)) {
+		return err;
 	}
+	err = smbconf_set_includes(ctx, GLOBAL_NAME,
+				   num_includes, includes);
 
-	return werr;
+	return err;
 }
 
 
-WERROR smbconf_delete_includes(struct smbconf_ctx *ctx, const char *service)
+sbcErr smbconf_delete_includes(struct smbconf_ctx *ctx, const char *service)
 {
 	return ctx->ops->delete_includes(ctx, service);
 }
 
-WERROR smbconf_delete_global_includes(struct smbconf_ctx *ctx)
+sbcErr smbconf_delete_global_includes(struct smbconf_ctx *ctx)
 {
-	WERROR werr;
+	sbcErr err;
 
-	werr = smbconf_global_check(ctx);
-	if (W_ERROR_IS_OK(werr)) {
-		werr = smbconf_delete_includes(ctx, GLOBAL_NAME);
+	err = smbconf_global_check(ctx);
+	if (!SBC_ERROR_IS_OK(err)) {
+		return err;
 	}
+	err = smbconf_delete_includes(ctx, GLOBAL_NAME);
 
-	return werr;
+	return err;
 }
 
-WERROR smbconf_transaction_start(struct smbconf_ctx *ctx)
+sbcErr smbconf_transaction_start(struct smbconf_ctx *ctx)
 {
 	return ctx->ops->transaction_start(ctx);
 }
 
-WERROR smbconf_transaction_commit(struct smbconf_ctx *ctx)
+sbcErr smbconf_transaction_commit(struct smbconf_ctx *ctx)
 {
 	return ctx->ops->transaction_commit(ctx);
 }
 
-WERROR smbconf_transaction_cancel(struct smbconf_ctx *ctx)
+sbcErr smbconf_transaction_cancel(struct smbconf_ctx *ctx)
 {
 	return ctx->ops->transaction_cancel(ctx);
 }

Modified: branches/samba/experimental/lib/smbconf/smbconf.h
===================================================================
--- branches/samba/experimental/lib/smbconf/smbconf.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/lib/smbconf/smbconf.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -20,6 +20,39 @@
 #ifndef __LIBSMBCONF_H__
 #define __LIBSMBCONF_H__
 
+/**
+ * @defgroup libsmbconf The smbconf API
+ *
+ * libsmbconf is a library to read or, based on the backend, modify the Samba
+ * configuration.
+ *
+ * @{
+ */
+
+/**
+ * @brief Status codes returned from smbconf functions
+ */
+enum _sbcErrType {
+	SBC_ERR_OK = 0,          /**< Successful completion **/
+	SBC_ERR_NOT_IMPLEMENTED, /**< Function not implemented **/
+	SBC_ERR_NOT_SUPPORTED,   /**< Function not supported **/
+	SBC_ERR_UNKNOWN_FAILURE, /**< General failure **/
+	SBC_ERR_NOMEM,           /**< Memory allocation error **/
+	SBC_ERR_INVALID_PARAM,   /**< An Invalid parameter was supplied **/
+	SBC_ERR_BADFILE,         /**< A bad file was supplied **/
+	SBC_ERR_NO_SUCH_SERVICE, /**< There is no such service provided **/
+	SBC_ERR_IO_FAILURE,      /**< There was an IO error **/
+	SBC_ERR_CAN_NOT_COMPLETE,/**< Can not complete action **/
+	SBC_ERR_NO_MORE_ITEMS,   /**< No more items left **/
+	SBC_ERR_FILE_EXISTS,     /**< File already exists **/
+	SBC_ERR_ACCESS_DENIED,   /**< Access has been denied **/
+};
+
+typedef enum _sbcErrType sbcErr;
+
+#define SBC_ERROR_IS_OK(x) ((x) == SBC_ERR_OK)
+#define SBC_ERROR_EQUAL(x,y) ((x) == (y))
+
 struct smbconf_ctx;
 
 /* the change sequence number */
@@ -27,75 +60,428 @@
 	uint64_t csn;
 };
 
+/** Information about a service */
 struct smbconf_service {
-	char *name;
-	uint32_t num_params;
-	char **param_names;
-	char **param_values;
+	char *name;          /**< The name of the share */
+	uint32_t num_params; /**< List of length num_shares of parameter counts for each share */
+	char **param_names;  /**< List of lists of parameter names for each share */
+	char **param_values; /**< List of lists of parameter values for each share */
 };
 
 /*
- * the smbconf API functions
+ * The smbconf API functions
  */
+
+/**
+ * @brief Translate an error value into a string
+ *
+ * @param error
+ *
+ * @return a pointer to a static string
+ **/
+const char *sbcErrorString(sbcErr error);
+
+/**
+ * @brief Check if the backend requires messaging to be set up.
+ *
+ * Tell whether the backend requires messaging to be set up
+ * for the backend to work correctly.
+ *
+ * @param[in] ctx       The smbconf context to check.
+ *
+ * @return              True if needed, false if not.
+ */
 bool smbconf_backend_requires_messaging(struct smbconf_ctx *ctx);
+
+/**
+ * @brief Tell whether the source is writeable.
+ *
+ * @param[in] ctx       The smbconf context to check.
+ *
+ * @return              True if it is writeable, false if not.
+ */
 bool smbconf_is_writeable(struct smbconf_ctx *ctx);
+
+/**
+ * @brief Close the configuration.
+ *
+ * @param[in] ctx       The smbconf context to close.
+ */
 void smbconf_shutdown(struct smbconf_ctx *ctx);
+
+/**
+ * @brief Detect changes in the configuration.
+ *
+ * Get the change sequence number of the given service/parameter. Service and
+ * parameter strings may be NULL.
+ *
+ * The given change sequence number (csn) struct is filled with the current
+ * csn. smbconf_changed() can also be used for initial retrieval of the csn.
+ *
+ * @param[in] ctx       The smbconf context to check for changes.
+ *
+ * @param[inout] csn    The smbconf csn to be filled.
+ *
+ * @param[in] service   The service name to check or NULL.
+ *
+ * @param[in] param     The param to check or NULL.
+ *
+ * @return              True if it has been changed, false if not.
+ */
 bool smbconf_changed(struct smbconf_ctx *ctx, struct smbconf_csn *csn,
 		     const char *service, const char *param);
-WERROR smbconf_drop(struct smbconf_ctx *ctx);
-WERROR smbconf_get_config(struct smbconf_ctx *ctx,
+
+/**
+ * @brief Drop the whole configuration (restarting empty).
+ *
+ * @param[in] ctx       The smbconf context to drop the config.
+ *
+ * @return              SBC_ERR_OK on success, a corresponding sbcErr if an
+ *                      error occured.
+ */
+sbcErr smbconf_drop(struct smbconf_ctx *ctx);
+
+/**
+ * @brief Get the whole configuration as lists of strings with counts.
+ *
+ * @param[in] ctx       The smbconf context to get the lists from.
+ *
+ * @param[in] mem_ctx   The memory context to use.
+ *
+ * @param[in] num_shares A pointer to store the number of shares.
+ *
+ * @param[out] services  A pointer to store the services.
+ *
+ * @return              SBC_ERR_OK on success, a corresponding sbcErr if an
+ *                      error occured.
+ *
+ * @see smbconf_service
+ */
+sbcErr smbconf_get_config(struct smbconf_ctx *ctx,
 			  TALLOC_CTX *mem_ctx,
 			  uint32_t *num_shares,
 			  struct smbconf_service ***services);
-WERROR smbconf_get_share_names(struct smbconf_ctx *ctx,
+
+/**
+ * @brief Get the list of share names defined in the configuration.
+ *
+ * @param[in] ctx       The smbconf context to use.
+ *
+ * @param[in] mem_ctx   The memory context to use.
+ *
+ * @param[in] num_shares A pointer to store the number of shares.
+ *
+ * @param[in] share_names A pointer to store the share names.
+ *
+ * @return              SBC_ERR_OK on success, a corresponding sbcErr if an
+ *                      error occured.
+ */
+sbcErr smbconf_get_share_names(struct smbconf_ctx *ctx,
 			       TALLOC_CTX *mem_ctx,
 			       uint32_t *num_shares,
 			       char ***share_names);
+
+/**
+ * @brief Check if a share/service of a given name exists.
+ *
+ * @param[in] ctx       The smbconf context to use.
+ *
+ * @param[in] servicename The service name to check if it exists.
+ *
+ * @return              True if it exists, false if not.
+ */
 bool smbconf_share_exists(struct smbconf_ctx *ctx, const char *servicename);
-WERROR smbconf_create_share(struct smbconf_ctx *ctx, const char *servicename);
-WERROR smbconf_get_share(struct smbconf_ctx *ctx,
+
+/**
+ * @brief Add a service if it does not already exist.
+ *
+ * @param[in] ctx       The smbconf context to use.
+ *
+ * @param[in] servicename The name of the service to add.
+ *
+ * @return              SBC_ERR_OK on success, a corresponding sbcErr if an
+ *                      error occured.
+ */
+sbcErr smbconf_create_share(struct smbconf_ctx *ctx, const char *servicename);
+
+/**
+ * @brief Get a definition of a share (service) from configuration.
+ *
+ * @param[in] ctx       The smbconf context to use.
+ *
+ * @param[in] mem_ctx   A memory context to allocate the result.
+ *
+ * @param[in] servicename The service name to get the information from.
+ *
+ * @param[out] service  A pointer to store the service information about the
+ *                      share.
+ *
+ * @return              SBC_ERR_OK on success, a corresponding sbcErr if an
+ *                      error occured.
+ *
+ * @see smbconf_service
+ */
+sbcErr smbconf_get_share(struct smbconf_ctx *ctx,
 			 TALLOC_CTX *mem_ctx,
 			 const char *servicename,
 			 struct smbconf_service **service);
-WERROR smbconf_delete_share(struct smbconf_ctx *ctx,
+
+/**
+ * @brief Delete a service from configuration.
+ *
+ * @param[in] ctx       The smbconf context to use.
+ *
+ * @param[in] servicename The service name to delete.
+ *
+ * @return              SBC_ERR_OK on success, a corresponding sbcErr if an
+ *                      error occured.
+ */
+sbcErr smbconf_delete_share(struct smbconf_ctx *ctx,
 			    const char *servicename);
-WERROR smbconf_set_parameter(struct smbconf_ctx *ctx,
+
+/**
+ * @brief Set a configuration parameter to the value provided.
+ *
+ * @param[in] ctx       The smbconf context to use.
+ *
+ * @param[in] service   The service name to set the parameter.
+ *
+ * @param[in] param     The name of the parameter to set.
+ *
+ * @param[in] valstr    The value to set.
+ *
+ * @return              SBC_ERR_OK on success, a corresponding sbcErr if an
+ *                      error occured.
+ */
+sbcErr smbconf_set_parameter(struct smbconf_ctx *ctx,
 			     const char *service,
 			     const char *param,
 			     const char *valstr);
-WERROR smbconf_set_global_parameter(struct smbconf_ctx *ctx,
+
+/**
+ * @brief Set a global configuration parameter to the value provided.
+ *
+ * This adds a paramet in the [global] service. It also creates [global] if it
+ * does't exist.
+ *
+ * @param[in] ctx       The smbconf context to use.
+ *
+ * @param[in] param     The name of the parameter to set.
+ *
+ * @param[in] val       The value to set.
+ *
+ * @return              SBC_ERR_OK on success, a corresponding sbcErr if an
+ *                      error occured.
+ */
+sbcErr smbconf_set_global_parameter(struct smbconf_ctx *ctx,
 				    const char *param, const char *val);
-WERROR smbconf_get_parameter(struct smbconf_ctx *ctx,
+
+/**
+ * @brief Get the value of a configuration parameter as a string.
+ *
+ * @param[in]  ctx      The smbconf context to use.
+ *
+ * @param[in]  mem_ctx  The memory context to allocate the string on.
+ *
+ * @param[in]  service  The name of the service where to find the parameter.
+ *
+ * @param[in]  param    The parameter to get.
+ *
+ * @param[out] valstr   A pointer to store the value as a string.
+ *
+ * @return              SBC_ERR_OK on success, a corresponding sbcErr if an
+ *                      error occured.
+ */
+sbcErr smbconf_get_parameter(struct smbconf_ctx *ctx,
 			     TALLOC_CTX *mem_ctx,
 			     const char *service,
 			     const char *param,
 			     char **valstr);
-WERROR smbconf_get_global_parameter(struct smbconf_ctx *ctx,
+
+/**
+ * @brief Get the value of a global configuration parameter as a string.
+ *
+ * It also creates [global] if it does't exist.
+ *
+ * @param[in]  ctx      The smbconf context to use.
+ *
+ * @param[in]  mem_ctx  The memory context to allocate the string on.
+ *
+ * @param[in]  param    The parameter to get.
+ *
+ * @param[out] valstr   A pointer to store the value as a string.
+ *
+ * @return              SBC_ERR_OK on success, a corresponding sbcErr if an
+ *                      error occured.
+ */
+sbcErr smbconf_get_global_parameter(struct smbconf_ctx *ctx,
 				    TALLOC_CTX *mem_ctx,
 				    const char *param,
 				    char **valstr);
-WERROR smbconf_delete_parameter(struct smbconf_ctx *ctx,
+
+/**
+ * @brief Delete a parameter from the configuration.
+ *
+ * @param[in]  ctx      The smbconf context to use.
+ *
+ * @param[in] service   The service where the parameter can be found.
+ *
+ * @param[in] param     The name of the parameter to delete.
+ *
+ * @return              SBC_ERR_OK on success, a corresponding sbcErr if an
+ *                      error occured.
+ */
+sbcErr smbconf_delete_parameter(struct smbconf_ctx *ctx,
 				const char *service, const char *param);
-WERROR smbconf_delete_global_parameter(struct smbconf_ctx *ctx,
+
+/**
+ * @brief Delete a global parameter from the configuration.
+ *
+ * It also creates [global] if it does't exist.
+ *
+ * @param[in]  ctx      The smbconf context to use.
+ *
+ * @param[in] param     The name of the parameter to delete.
+ *
+ * @return              SBC_ERR_OK on success, a corresponding sbcErr if an
+ *                      error occured.
+ */
+sbcErr smbconf_delete_global_parameter(struct smbconf_ctx *ctx,
 				       const char *param);
-WERROR smbconf_get_includes(struct smbconf_ctx *ctx,
+
+/**
+ * @brief Get the list of names of included files.
+ *
+ * @param[in]  ctx      The smbconf context to use.
+ *
+ * @param[in]  mem_ctx  The memory context to allocate the names.
+ *
+ * @param[in]  service  The service name to get the include files.
+ *
+ * @param[out] num_includes A pointer to store the number of included files.
+ *
+ * @param[out] includes A pointer to store the paths of the included files.
+ *
+ * @return              SBC_ERR_OK on success, a corresponding sbcErr if an
+ *                      error occured.
+ */
+sbcErr smbconf_get_includes(struct smbconf_ctx *ctx,
 			    TALLOC_CTX *mem_ctx,
 			    const char *service,
 			    uint32_t *num_includes, char ***includes);
-WERROR smbconf_get_global_includes(struct smbconf_ctx *ctx,
+
+/**
+ * @brief Get the list of globally included files.
+ *
+ * @param[in]  ctx      The smbconf context to use.
+ *
+ * @param[in]  mem_ctx  The memory context to allocate the names.
+ *
+ * @param[out] num_includes A pointer to store the number of included files.
+ *
+ * @param[out] includes A pointer to store the paths of the included files.
+ *
+ * @return              SBC_ERR_OK on success, a corresponding sbcErr if an
+ *                      error occured.
+ */
+sbcErr smbconf_get_global_includes(struct smbconf_ctx *ctx,
 				   TALLOC_CTX *mem_ctx,
 				   uint32_t *num_includes, char ***includes);
-WERROR smbconf_set_includes(struct smbconf_ctx *ctx,
+
+/**
+ * @brief Set a list of config files to include on the given service.
+ *
+ * @param[in]  ctx      The smbconf context to use.
+ *
+ * @param[in]  service  The service to add includes.
+ *
+ * @param[in]  num_includes The number of includes to set.
+ *
+ * @param[in]  includes A list of paths to include.
+ *
+ * @return              SBC_ERR_OK on success, a corresponding sbcErr if an
+ *                      error occured.
+ */
+sbcErr smbconf_set_includes(struct smbconf_ctx *ctx,
 			    const char *service,
 			    uint32_t num_includes, const char **includes);
-WERROR smbconf_set_global_includes(struct smbconf_ctx *ctx,
+
+/**
+ * @brief Set a list of config files to include globally.
+ *
+ * @param[in]  ctx      The smbconf context to use.
+ *
+ * @param[in]  num_includes The number of includes to set.
+ *
+ * @param[in]  includes A list of paths to include.
+ *
+ * @return              SBC_ERR_OK on success, a corresponding sbcErr if an
+ *                      error occured.
+ */
+sbcErr smbconf_set_global_includes(struct smbconf_ctx *ctx,
 				   uint32_t num_includes,
 				   const char **includes);
-WERROR smbconf_delete_includes(struct smbconf_ctx *ctx, const char *service);
-WERROR smbconf_delete_global_includes(struct smbconf_ctx *ctx);
 
-WERROR smbconf_transaction_start(struct smbconf_ctx *ctx);
-WERROR smbconf_transaction_commit(struct smbconf_ctx *ctx);
-WERROR smbconf_transaction_cancel(struct smbconf_ctx *ctx);
+/**
+ * @brief Delete include parameter on the given service.
+ *
+ * @param[in]  ctx      The smbconf context to use.
+ *
+ * @param[in]  service  The name of the service to delete the includes from.
+ *
+ * @return              SBC_ERR_OK on success, a corresponding sbcErr if an
+ *                      error occured.
+ */
+sbcErr smbconf_delete_includes(struct smbconf_ctx *ctx, const char *service);
 
+/**
+ * @brief Delete include parameter from the global service.
+ *
+ * @param[in]  ctx      The smbconf context to use.
+ *
+ * @return              SBC_ERR_OK on success, a corresponding sbcErr if an
+ *                      error occured.
+ */
+sbcErr smbconf_delete_global_includes(struct smbconf_ctx *ctx);
+
+/**
+ * @brief Start a transaction on the configuration backend.
+ *
+ * This is to speed up writes to the registry based backend.
+ *
+ * @param[in] ctx       The smbconf context to start the transaction.
+ *
+ * @return              SBC_ERR_OK on success, a corresponding sbcErr if an
+ *                      error occured.
+ */
+sbcErr smbconf_transaction_start(struct smbconf_ctx *ctx);
+
+/**
+ * @brief Commit a transaction on the configuration backend.
+ *
+ * This is to speed up writes to the registry based backend.
+ *
+ * @param[in] ctx       The smbconf context to commit the transaction.
+ *
+ * @return              SBC_ERR_OK on success, a corresponding sbcErr if an
+ *                      error occured.
+ *
+ * @see smbconf_transaction_start()
+ */
+sbcErr smbconf_transaction_commit(struct smbconf_ctx *ctx);
+
+/**
+ * @brief Cancel a transaction on the configuration backend.
+ *
+ * @param[in] ctx       The smbconf context to cancel the transaction.
+ *
+ * @return              SBC_ERR_OK on success, a corresponding sbcErr if an
+ *                      error occured.
+ *
+ * @see smbconf_transaction_start()
+ */
+sbcErr smbconf_transaction_cancel(struct smbconf_ctx *ctx);
+
+/* @} ******************************************************************/
+
 #endif /*  _LIBSMBCONF_H_  */

Modified: branches/samba/experimental/lib/smbconf/smbconf_private.h
===================================================================
--- branches/samba/experimental/lib/smbconf/smbconf_private.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/lib/smbconf/smbconf_private.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -27,50 +27,50 @@
 #include "lib/smbconf/smbconf.h"
 
 struct smbconf_ops {
-	WERROR (*init)(struct smbconf_ctx *ctx, const char *path);
+	sbcErr (*init)(struct smbconf_ctx *ctx, const char *path);
 	int (*shutdown)(struct smbconf_ctx *ctx);
 	bool (*requires_messaging)(struct smbconf_ctx *ctx);
 	bool (*is_writeable)(struct smbconf_ctx *ctx);
-	WERROR (*open_conf)(struct smbconf_ctx *ctx);
+	sbcErr (*open_conf)(struct smbconf_ctx *ctx);
 	int (*close_conf)(struct smbconf_ctx *ctx);
 	void (*get_csn)(struct smbconf_ctx *ctx, struct smbconf_csn *csn,
 			const char *service, const char *param);
-	WERROR (*drop)(struct smbconf_ctx *ctx);
-	WERROR (*get_share_names)(struct smbconf_ctx *ctx,
+	sbcErr (*drop)(struct smbconf_ctx *ctx);
+	sbcErr (*get_share_names)(struct smbconf_ctx *ctx,
 				  TALLOC_CTX *mem_ctx,
 				  uint32_t *num_shares,
 				  char ***share_names);
 	bool (*share_exists)(struct smbconf_ctx *ctx, const char *service);
-	WERROR (*create_share)(struct smbconf_ctx *ctx, const char *service);
-	WERROR (*get_share)(struct smbconf_ctx *ctx,
+	sbcErr (*create_share)(struct smbconf_ctx *ctx, const char *service);
+	sbcErr (*get_share)(struct smbconf_ctx *ctx,
 			    TALLOC_CTX *mem_ctx,
 			    const char *servicename,
 			    struct smbconf_service **service);
-	WERROR (*delete_share)(struct smbconf_ctx *ctx,
+	sbcErr (*delete_share)(struct smbconf_ctx *ctx,
 				    const char *servicename);
-	WERROR (*set_parameter)(struct smbconf_ctx *ctx,
+	sbcErr (*set_parameter)(struct smbconf_ctx *ctx,
 				const char *service,
 				const char *param,
 				const char *valstr);
-	WERROR (*get_parameter)(struct smbconf_ctx *ctx,
+	sbcErr (*get_parameter)(struct smbconf_ctx *ctx,
 				TALLOC_CTX *mem_ctx,
 				const char *service,
 				const char *param,
 				char **valstr);
-	WERROR (*delete_parameter)(struct smbconf_ctx *ctx,
+	sbcErr (*delete_parameter)(struct smbconf_ctx *ctx,
 				   const char *service, const char *param);
-	WERROR (*get_includes)(struct smbconf_ctx *ctx,
+	sbcErr (*get_includes)(struct smbconf_ctx *ctx,
 			       TALLOC_CTX *mem_ctx,
 			       const char *service,
 			       uint32_t *num_includes, char ***includes);
-	WERROR (*set_includes)(struct smbconf_ctx *ctx,
+	sbcErr (*set_includes)(struct smbconf_ctx *ctx,
 			       const char *service,
 			       uint32_t num_includes, const char **includes);
-	WERROR (*delete_includes)(struct smbconf_ctx *ctx,
+	sbcErr (*delete_includes)(struct smbconf_ctx *ctx,
 				  const char *service);
-	WERROR (*transaction_start)(struct smbconf_ctx *ctx);
-	WERROR (*transaction_commit)(struct smbconf_ctx *ctx);
-	WERROR (*transaction_cancel)(struct smbconf_ctx *ctx);
+	sbcErr (*transaction_start)(struct smbconf_ctx *ctx);
+	sbcErr (*transaction_commit)(struct smbconf_ctx *ctx);
+	sbcErr (*transaction_cancel)(struct smbconf_ctx *ctx);
 };
 
 struct smbconf_ctx {
@@ -79,10 +79,10 @@
 	void *data; /* private data for use in backends */
 };
 
-WERROR smbconf_init_internal(TALLOC_CTX *mem_ctx, struct smbconf_ctx **conf_ctx,
+sbcErr smbconf_init_internal(TALLOC_CTX *mem_ctx, struct smbconf_ctx **conf_ctx,
 			     const char *path, struct smbconf_ops *ops);
 
-WERROR smbconf_add_string_to_array(TALLOC_CTX *mem_ctx,
+sbcErr smbconf_add_string_to_array(TALLOC_CTX *mem_ctx,
 				   char ***array,
 				   uint32_t count,
 				   const char *string);

Modified: branches/samba/experimental/lib/smbconf/smbconf_txt.c
===================================================================
--- branches/samba/experimental/lib/smbconf/smbconf_txt.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/lib/smbconf/smbconf_txt.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -60,7 +60,7 @@
 
 static bool smbconf_txt_do_section(const char *section, void *private_data)
 {
-	WERROR werr;
+	sbcErr err;
 	uint32_t idx;
 	struct txt_private_data *tpd = (struct txt_private_data *)private_data;
 	struct txt_cache *cache = tpd->cache;
@@ -72,9 +72,9 @@
 		return true;
 	}
 
-	werr = smbconf_add_string_to_array(cache, &(cache->share_names),
-					   cache->num_shares, section);
-	if (!W_ERROR_IS_OK(werr)) {
+	err = smbconf_add_string_to_array(cache, &(cache->share_names),
+					  cache->num_shares, section);
+	if (!SBC_ERROR_IS_OK(err)) {
 		return false;
 	}
 	cache->current_share = cache->num_shares;
@@ -114,7 +114,7 @@
 				     const char *param_value,
 				     void *private_data)
 {
-	WERROR werr;
+	sbcErr err;
 	char **param_names, **param_values;
 	uint32_t num_params;
 	uint32_t idx;
@@ -146,17 +146,17 @@
 		}
 		return true;
 	}
-	werr = smbconf_add_string_to_array(cache,
+	err = smbconf_add_string_to_array(cache,
 				&(cache->param_names[cache->current_share]),
 				num_params, param_name);
-	if (!W_ERROR_IS_OK(werr)) {
+	if (!SBC_ERROR_IS_OK(err)) {
 		return false;
 	}
-	werr = smbconf_add_string_to_array(cache,
+	err = smbconf_add_string_to_array(cache,
 				&(cache->param_values[cache->current_share]),
 				num_params, param_value);
 	cache->num_params[cache->current_share]++;
-	return W_ERROR_IS_OK(werr);
+	return SBC_ERROR_IS_OK(err);
 }
 
 static void smbconf_txt_flush_cache(struct smbconf_ctx *ctx)
@@ -165,7 +165,7 @@
 	pd(ctx)->cache = NULL;
 }
 
-static WERROR smbconf_txt_init_cache(struct smbconf_ctx *ctx)
+static sbcErr smbconf_txt_init_cache(struct smbconf_ctx *ctx)
 {
 	if (pd(ctx)->cache != NULL) {
 		smbconf_txt_flush_cache(ctx);
@@ -174,40 +174,40 @@
 	pd(ctx)->cache = talloc_zero(pd(ctx), struct txt_cache);
 
 	if (pd(ctx)->cache == NULL) {
-		return WERR_NOMEM;
+		return SBC_ERR_NOMEM;
 	}
 
-	return WERR_OK;
+	return SBC_ERR_OK;
 }
 
-static WERROR smbconf_txt_load_file(struct smbconf_ctx *ctx)
+static sbcErr smbconf_txt_load_file(struct smbconf_ctx *ctx)
 {
-	WERROR werr;
+	sbcErr err;
 	uint64_t new_csn;
 
 	if (!file_exist(ctx->path)) {
-		return WERR_BADFILE;
+		return SBC_ERR_BADFILE;
 	}
 
 	new_csn = (uint64_t)file_modtime(ctx->path);
 	if (new_csn == pd(ctx)->csn) {
-		return WERR_OK;
+		return SBC_ERR_OK;
 	}
 
-	werr = smbconf_txt_init_cache(ctx);
-	if (!W_ERROR_IS_OK(werr)) {
-		return werr;
+	err = smbconf_txt_init_cache(ctx);
+	if (!SBC_ERROR_IS_OK(err)) {
+		return err;
 	}
 
 	if (!pm_process(ctx->path, smbconf_txt_do_section,
 			smbconf_txt_do_parameter, pd(ctx)))
 	{
-		return WERR_CAN_NOT_COMPLETE;
+		return SBC_ERR_CAN_NOT_COMPLETE;
 	}
 
 	pd(ctx)->csn = new_csn;
 
-	return WERR_OK;
+	return SBC_ERR_OK;
 }
 
 
@@ -220,24 +220,24 @@
 /**
  * initialize the text based smbconf backend
  */
-static WERROR smbconf_txt_init(struct smbconf_ctx *ctx, const char *path)
+static sbcErr smbconf_txt_init(struct smbconf_ctx *ctx, const char *path)
 {
 	if (path == NULL) {
-		return WERR_BADFILE;
+		return SBC_ERR_BADFILE;
 	}
 	ctx->path = talloc_strdup(ctx, path);
 	if (ctx->path == NULL) {
-		return WERR_NOMEM;
+		return SBC_ERR_NOMEM;
 	}
 
 	ctx->data = talloc_zero(ctx, struct txt_private_data);
 	if (ctx->data == NULL) {
-		return WERR_NOMEM;
+		return SBC_ERR_NOMEM;
 	}
 
 	pd(ctx)->verbatim = true;
 
-	return WERR_OK;
+	return SBC_ERR_OK;
 }
 
 static int smbconf_txt_shutdown(struct smbconf_ctx *ctx)
@@ -256,7 +256,7 @@
 	return false;
 }
 
-static WERROR smbconf_txt_open(struct smbconf_ctx *ctx)
+static sbcErr smbconf_txt_open(struct smbconf_ctx *ctx)
 {
 	return smbconf_txt_load_file(ctx);
 }
@@ -285,15 +285,15 @@
 /**
  * Drop the whole configuration (restarting empty)
  */
-static WERROR smbconf_txt_drop(struct smbconf_ctx *ctx)
+static sbcErr smbconf_txt_drop(struct smbconf_ctx *ctx)
 {
-	return WERR_NOT_SUPPORTED;
+	return SBC_ERR_NOT_SUPPORTED;
 }
 
 /**
  * get the list of share names defined in the configuration.
  */
-static WERROR smbconf_txt_get_share_names(struct smbconf_ctx *ctx,
+static sbcErr smbconf_txt_get_share_names(struct smbconf_ctx *ctx,
 					  TALLOC_CTX *mem_ctx,
 					  uint32_t *num_shares,
 					  char ***share_names)
@@ -301,17 +301,16 @@
 	uint32_t count;
 	uint32_t added_count = 0;
 	TALLOC_CTX *tmp_ctx = NULL;
-	WERROR werr = WERR_OK;
+	sbcErr err = SBC_ERR_OK;
 	char **tmp_share_names = NULL;
 
 	if ((num_shares == NULL) || (share_names == NULL)) {
-		werr = WERR_INVALID_PARAM;
-		goto done;
+		return SBC_ERR_INVALID_PARAM;
 	}
 
-	werr = smbconf_txt_load_file(ctx);
-	if (!W_ERROR_IS_OK(werr)) {
-		return werr;
+	err = smbconf_txt_load_file(ctx);
+	if (!SBC_ERROR_IS_OK(err)) {
+		return err;
 	}
 
 	tmp_ctx = talloc_stackframe();
@@ -320,18 +319,18 @@
 	 * possibly after NULL section */
 
 	if (smbconf_share_exists(ctx, NULL)) {
-		werr = smbconf_add_string_to_array(tmp_ctx, &tmp_share_names,
-						   0, NULL);
-		if (!W_ERROR_IS_OK(werr)) {
+		err = smbconf_add_string_to_array(tmp_ctx, &tmp_share_names,
+						  0, NULL);
+		if (!SBC_ERROR_IS_OK(err)) {
 			goto done;
 		}
 		added_count++;
 	}
 
 	if (smbconf_share_exists(ctx, GLOBAL_NAME)) {
-		werr = smbconf_add_string_to_array(tmp_ctx, &tmp_share_names,
+		err = smbconf_add_string_to_array(tmp_ctx, &tmp_share_names,
 						   added_count, GLOBAL_NAME);
-		if (!W_ERROR_IS_OK(werr)) {
+		if (!SBC_ERROR_IS_OK(err)) {
 			goto done;
 		}
 		added_count++;
@@ -344,10 +343,10 @@
 			continue;
 		}
 
-		werr = smbconf_add_string_to_array(tmp_ctx, &tmp_share_names,
+		err = smbconf_add_string_to_array(tmp_ctx, &tmp_share_names,
 					added_count,
 					pd(ctx)->cache->share_names[count]);
-		if (!W_ERROR_IS_OK(werr)) {
+		if (!SBC_ERROR_IS_OK(err)) {
 			goto done;
 		}
 		added_count++;
@@ -362,7 +361,7 @@
 
 done:
 	talloc_free(tmp_ctx);
-	return werr;
+	return err;
 }
 
 /**
@@ -371,10 +370,10 @@
 static bool smbconf_txt_share_exists(struct smbconf_ctx *ctx,
 				     const char *servicename)
 {
-	WERROR werr;
+	sbcErr err;
 
-	werr = smbconf_txt_load_file(ctx);
-	if (!W_ERROR_IS_OK(werr)) {
+	err = smbconf_txt_load_file(ctx);
+	if (!SBC_ERROR_IS_OK(err)) {
 		return false;
 	}
 
@@ -386,29 +385,29 @@
 /**
  * Add a service if it does not already exist
  */
-static WERROR smbconf_txt_create_share(struct smbconf_ctx *ctx,
+static sbcErr smbconf_txt_create_share(struct smbconf_ctx *ctx,
 				       const char *servicename)
 {
-	return WERR_NOT_SUPPORTED;
+	return SBC_ERR_NOT_SUPPORTED;
 }
 
 /**
  * get a definition of a share (service) from configuration.
  */
-static WERROR smbconf_txt_get_share(struct smbconf_ctx *ctx,
+static sbcErr smbconf_txt_get_share(struct smbconf_ctx *ctx,
 				    TALLOC_CTX *mem_ctx,
 				    const char *servicename,
 				    struct smbconf_service **service)
 {
-	WERROR werr;
+	sbcErr err;
 	uint32_t sidx, count;
 	bool found;
 	TALLOC_CTX *tmp_ctx = NULL;
 	struct smbconf_service *tmp_service = NULL;
 
-	werr = smbconf_txt_load_file(ctx);
-	if (!W_ERROR_IS_OK(werr)) {
-		return werr;
+	err = smbconf_txt_load_file(ctx);
+	if (!SBC_ERROR_IS_OK(err)) {
+		return err;
 	}
 
 	found = smbconf_find_in_array(servicename,
@@ -416,38 +415,38 @@
 				      pd(ctx)->cache->num_shares,
 				      &sidx);
 	if (!found) {
-		return WERR_NO_SUCH_SERVICE;
+		return SBC_ERR_NO_SUCH_SERVICE;
 	}
 
 	tmp_ctx = talloc_stackframe();
 
 	tmp_service = talloc_zero(tmp_ctx, struct smbconf_service);
 	if (tmp_service == NULL) {
-		werr = WERR_NOMEM;
+		err = SBC_ERR_NOMEM;
 		goto done;
 	}
 
 	if (servicename != NULL) {
 		tmp_service->name = talloc_strdup(tmp_service, servicename);
 		if (tmp_service->name == NULL) {
-			werr = WERR_NOMEM;
+			err = SBC_ERR_NOMEM;
 			goto done;
 		}
 	}
 
 	for (count = 0; count < pd(ctx)->cache->num_params[sidx]; count++) {
-		werr = smbconf_add_string_to_array(tmp_service,
+		err = smbconf_add_string_to_array(tmp_service,
 				&(tmp_service->param_names),
 				count,
 				pd(ctx)->cache->param_names[sidx][count]);
-		if (!W_ERROR_IS_OK(werr)) {
+		if (!SBC_ERROR_IS_OK(err)) {
 			goto done;
 		}
-		werr = smbconf_add_string_to_array(tmp_service,
+		err = smbconf_add_string_to_array(tmp_service,
 				&(tmp_service->param_values),
 				count,
 				pd(ctx)->cache->param_values[sidx][count]);
-		if (!W_ERROR_IS_OK(werr)) {
+		if (!SBC_ERROR_IS_OK(err)) {
 			goto done;
 		}
 	}
@@ -457,45 +456,45 @@
 
 done:
 	talloc_free(tmp_ctx);
-	return werr;
+	return err;
 }
 
 /**
  * delete a service from configuration
  */
-static WERROR smbconf_txt_delete_share(struct smbconf_ctx *ctx,
+static sbcErr smbconf_txt_delete_share(struct smbconf_ctx *ctx,
 				       const char *servicename)
 {
-	return WERR_NOT_SUPPORTED;
+	return SBC_ERR_NOT_SUPPORTED;
 }
 
 /**
  * set a configuration parameter to the value provided.
  */
-static WERROR smbconf_txt_set_parameter(struct smbconf_ctx *ctx,
+static sbcErr smbconf_txt_set_parameter(struct smbconf_ctx *ctx,
 					const char *service,
 					const char *param,
 					const char *valstr)
 {
-	return WERR_NOT_SUPPORTED;
+	return SBC_ERR_NOT_SUPPORTED;
 }
 
 /**
  * get the value of a configuration parameter as a string
  */
-static WERROR smbconf_txt_get_parameter(struct smbconf_ctx *ctx,
+static sbcErr smbconf_txt_get_parameter(struct smbconf_ctx *ctx,
 					TALLOC_CTX *mem_ctx,
 					const char *service,
 					const char *param,
 					char **valstr)
 {
-	WERROR werr;
+	sbcErr err;
 	bool found;
 	uint32_t share_index, param_index;
 
-	werr = smbconf_txt_load_file(ctx);
-	if (!W_ERROR_IS_OK(werr)) {
-		return werr;
+	err = smbconf_txt_load_file(ctx);
+	if (!SBC_ERROR_IS_OK(err)) {
+		return err;
 	}
 
 	found = smbconf_find_in_array(service,
@@ -503,7 +502,7 @@
 				      pd(ctx)->cache->num_shares,
 				      &share_index);
 	if (!found) {
-		return WERR_NO_SUCH_SERVICE;
+		return SBC_ERR_NO_SUCH_SERVICE;
 	}
 
 	found = smbconf_reverse_find_in_array(param,
@@ -511,45 +510,45 @@
 				pd(ctx)->cache->num_params[share_index],
 				&param_index);
 	if (!found) {
-		return WERR_INVALID_PARAM;
+		return SBC_ERR_INVALID_PARAM;
 	}
 
 	*valstr = talloc_strdup(mem_ctx,
 			pd(ctx)->cache->param_values[share_index][param_index]);
 
 	if (*valstr == NULL) {
-		return WERR_NOMEM;
+		return SBC_ERR_NOMEM;
 	}
 
-	return WERR_OK;
+	return SBC_ERR_OK;
 }
 
 /**
  * delete a parameter from configuration
  */
-static WERROR smbconf_txt_delete_parameter(struct smbconf_ctx *ctx,
+static sbcErr smbconf_txt_delete_parameter(struct smbconf_ctx *ctx,
 					   const char *service,
 					   const char *param)
 {
-	return WERR_NOT_SUPPORTED;
+	return SBC_ERR_NOT_SUPPORTED;
 }
 
-static WERROR smbconf_txt_get_includes(struct smbconf_ctx *ctx,
+static sbcErr smbconf_txt_get_includes(struct smbconf_ctx *ctx,
 				       TALLOC_CTX *mem_ctx,
 				       const char *service,
 				       uint32_t *num_includes,
 				       char ***includes)
 {
-	WERROR werr;
+	sbcErr err;
 	bool found;
 	uint32_t sidx, count;
 	TALLOC_CTX *tmp_ctx = NULL;
 	uint32_t tmp_num_includes = 0;
 	char **tmp_includes = NULL;
 
-	werr = smbconf_txt_load_file(ctx);
-	if (!W_ERROR_IS_OK(werr)) {
-		return werr;
+	err = smbconf_txt_load_file(ctx);
+	if (!SBC_ERROR_IS_OK(err)) {
+		return err;
 	}
 
 	found = smbconf_find_in_array(service,
@@ -557,7 +556,7 @@
 				      pd(ctx)->cache->num_shares,
 				      &sidx);
 	if (!found) {
-		return WERR_NO_SUCH_SERVICE;
+		return SBC_ERR_NO_SUCH_SERVICE;
 	}
 
 	tmp_ctx = talloc_stackframe();
@@ -566,11 +565,11 @@
 		if (strequal(pd(ctx)->cache->param_names[sidx][count],
 			     "include"))
 		{
-			werr = smbconf_add_string_to_array(tmp_ctx,
+			err = smbconf_add_string_to_array(tmp_ctx,
 				&tmp_includes,
 				tmp_num_includes,
 				pd(ctx)->cache->param_values[sidx][count]);
-			if (!W_ERROR_IS_OK(werr)) {
+			if (!SBC_ERROR_IS_OK(err)) {
 				goto done;
 			}
 			tmp_num_includes++;
@@ -581,47 +580,47 @@
 	if (*num_includes > 0) {
 		*includes = talloc_move(mem_ctx, &tmp_includes);
 		if (*includes == NULL) {
-			werr = WERR_NOMEM;
+			err = SBC_ERR_NOMEM;
 			goto done;
 		}
 	} else {
 		*includes = NULL;
 	}
 
-	werr = WERR_OK;
+	err = SBC_ERR_OK;
 
 done:
 	talloc_free(tmp_ctx);
-	return werr;
+	return err;
 }
 
-static WERROR smbconf_txt_set_includes(struct smbconf_ctx *ctx,
+static sbcErr smbconf_txt_set_includes(struct smbconf_ctx *ctx,
 				       const char *service,
 				       uint32_t num_includes,
 				       const char **includes)
 {
-	return WERR_NOT_SUPPORTED;
+	return SBC_ERR_NOT_SUPPORTED;
 }
 
-static WERROR smbconf_txt_delete_includes(struct smbconf_ctx *ctx,
+static sbcErr smbconf_txt_delete_includes(struct smbconf_ctx *ctx,
 					  const char *service)
 {
-	return WERR_NOT_SUPPORTED;
+	return SBC_ERR_NOT_SUPPORTED;
 }
 
-static WERROR smbconf_txt_transaction_start(struct smbconf_ctx *ctx)
+static sbcErr smbconf_txt_transaction_start(struct smbconf_ctx *ctx)
 {
-	return WERR_OK;
+	return SBC_ERR_OK;
 }
 
-static WERROR smbconf_txt_transaction_commit(struct smbconf_ctx *ctx)
+static sbcErr smbconf_txt_transaction_commit(struct smbconf_ctx *ctx)
 {
-	return WERR_OK;
+	return SBC_ERR_OK;
 }
 
-static WERROR smbconf_txt_transaction_cancel(struct smbconf_ctx *ctx)
+static sbcErr smbconf_txt_transaction_cancel(struct smbconf_ctx *ctx)
 {
-	return WERR_OK;
+	return SBC_ERR_OK;
 }
 
 static struct smbconf_ops smbconf_ops_txt = {
@@ -654,15 +653,15 @@
  * initialize the smbconf text backend
  * the only function that is exported from this module
  */
-WERROR smbconf_init_txt(TALLOC_CTX *mem_ctx,
+sbcErr smbconf_init_txt(TALLOC_CTX *mem_ctx,
 			struct smbconf_ctx **conf_ctx,
 			const char *path)
 {
-	WERROR werr;
+	sbcErr err;
 
-	werr = smbconf_init_internal(mem_ctx, conf_ctx, path, &smbconf_ops_txt);
-	if (!W_ERROR_IS_OK(werr)) {
-		return werr;
+	err = smbconf_init_internal(mem_ctx, conf_ctx, path, &smbconf_ops_txt);
+	if (!SBC_ERROR_IS_OK(err)) {
+		return err;
 	}
 
 	return smbconf_txt_load_file(*conf_ctx);

Modified: branches/samba/experimental/lib/smbconf/smbconf_txt.h
===================================================================
--- branches/samba/experimental/lib/smbconf/smbconf_txt.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/lib/smbconf/smbconf_txt.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -26,7 +26,7 @@
  * initialization functions for the text/file backend modules
  */
 
-WERROR smbconf_init_txt(TALLOC_CTX *mem_ctx,
+sbcErr smbconf_init_txt(TALLOC_CTX *mem_ctx,
 			struct smbconf_ctx **conf_ctx,
 			const char *path);
 

Modified: branches/samba/experimental/lib/smbconf/smbconf_util.c
===================================================================
--- branches/samba/experimental/lib/smbconf/smbconf_util.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/lib/smbconf/smbconf_util.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -39,43 +39,43 @@
  * After the work with the configuration is completed, smbconf_shutdown()
  * should be called.
  */
-WERROR smbconf_init_internal(TALLOC_CTX *mem_ctx, struct smbconf_ctx **conf_ctx,
+sbcErr smbconf_init_internal(TALLOC_CTX *mem_ctx, struct smbconf_ctx **conf_ctx,
 			     const char *path, struct smbconf_ops *ops)
 {
-	WERROR werr = WERR_OK;
+	sbcErr err = SBC_ERR_OK;
 	struct smbconf_ctx *ctx;
 
 	if (conf_ctx == NULL) {
-		return WERR_INVALID_PARAM;
+		return SBC_ERR_INVALID_PARAM;
 	}
 
 	ctx = talloc_zero(mem_ctx, struct smbconf_ctx);
 	if (ctx == NULL) {
-		return WERR_NOMEM;
+		return SBC_ERR_NOMEM;
 	}
 
 	ctx->ops = ops;
 
-	werr = ctx->ops->init(ctx, path);
-	if (!W_ERROR_IS_OK(werr)) {
+	err = ctx->ops->init(ctx, path);
+	if (!SBC_ERROR_IS_OK(err)) {
 		goto fail;
 	}
 
 	talloc_set_destructor(ctx, smbconf_destroy_ctx);
 
 	*conf_ctx = ctx;
-	return werr;
+	return err;
 
 fail:
 	talloc_free(ctx);
-	return werr;
+	return err;
 }
 
 
 /**
  * add a string to a talloced array of strings.
  */
-WERROR smbconf_add_string_to_array(TALLOC_CTX *mem_ctx,
+sbcErr smbconf_add_string_to_array(TALLOC_CTX *mem_ctx,
 				   char ***array,
 				   uint32_t count,
 				   const char *string)
@@ -83,12 +83,12 @@
 	char **new_array = NULL;
 
 	if (array == NULL) {
-		return WERR_INVALID_PARAM;
+		return SBC_ERR_INVALID_PARAM;
 	}
 
 	new_array = talloc_realloc(mem_ctx, *array, char *, count + 1);
 	if (new_array == NULL) {
-		return WERR_NOMEM;
+		return SBC_ERR_NOMEM;
 	}
 
 	if (string == NULL) {
@@ -97,13 +97,13 @@
 		new_array[count] = talloc_strdup(new_array, string);
 		if (new_array[count] == NULL) {
 			talloc_free(new_array);
-			return WERR_NOMEM;
+			return SBC_ERR_NOMEM;
 		}
 	}
 
 	*array = new_array;
 
-	return WERR_OK;
+	return SBC_ERR_OK;
 }
 
 bool smbconf_find_in_array(const char *string, char **list,

Modified: branches/samba/experimental/lib/talloc/talloc.c
===================================================================
--- branches/samba/experimental/lib/talloc/talloc.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/lib/talloc/talloc.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -178,7 +178,33 @@
 	TC_INVALIDATE_SHRINK_VALGRIND_CHUNK(_tc, _new_size); \
 } while (0)
 
+#define TC_UNDEFINE_SHRINK_FILL_CHUNK(_tc, _new_size) do { \
+	if (unlikely(talloc_fill.enabled)) { \
+		size_t _flen = (_tc)->size - (_new_size); \
+		char *_fptr = (char *)TC_PTR_FROM_CHUNK(_tc); \
+		_fptr += (_new_size); \
+		memset(_fptr, talloc_fill.fill_value, _flen); \
+	} \
+} while (0)
+
 #if defined(DEVELOPER) && defined(VALGRIND_MAKE_MEM_UNDEFINED)
+/* Mark the unused bytes as undefined */
+#define TC_UNDEFINE_SHRINK_VALGRIND_CHUNK(_tc, _new_size) do { \
+	size_t _flen = (_tc)->size - (_new_size); \
+	char *_fptr = (char *)TC_PTR_FROM_CHUNK(_tc); \
+	_fptr += (_new_size); \
+	VALGRIND_MAKE_MEM_UNDEFINED(_fptr, _flen); \
+} while (0)
+#else
+#define TC_UNDEFINE_SHRINK_VALGRIND_CHUNK(_tc, _new_size) do { } while (0)
+#endif
+
+#define TC_UNDEFINE_SHRINK_CHUNK(_tc, _new_size) do { \
+	TC_UNDEFINE_SHRINK_FILL_CHUNK(_tc, _new_size); \
+	TC_UNDEFINE_SHRINK_VALGRIND_CHUNK(_tc, _new_size); \
+} while (0)
+
+#if defined(DEVELOPER) && defined(VALGRIND_MAKE_MEM_UNDEFINED)
 /* Mark the new bytes as undefined */
 #define TC_UNDEFINE_GROW_VALGRIND_CHUNK(_tc, _new_size) do { \
 	size_t _old_used = TC_HDR_SIZE + (_tc)->size; \
@@ -1365,7 +1391,16 @@
 			}
 			return ptr;
 		} else if ((tc->size - size) < 1024) {
-			TC_INVALIDATE_SHRINK_CHUNK(tc, size);
+			/*
+			 * if we call TC_INVALIDATE_SHRINK_CHUNK() here
+			 * we would need to call TC_UNDEFINE_GROW_CHUNK()
+			 * after each realloc call, which slows down
+			 * testing a lot :-(.
+			 *
+			 * That is why we only mark memory as undefined here.
+			 */
+			TC_UNDEFINE_SHRINK_CHUNK(tc, size);
+
 			/* do not shrink if we have less than 1k to gain */
 			tc->size = size;
 			return ptr;

Modified: branches/samba/experimental/lib/tdb/pytdb.c
===================================================================
--- branches/samba/experimental/lib/tdb/pytdb.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/lib/tdb/pytdb.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -558,6 +558,7 @@
 	{ NULL }
 };
 
+void inittdb(void);
 void inittdb(void)
 {
 	PyObject *m;

Modified: branches/samba/experimental/lib/util/system.c
===================================================================
--- branches/samba/experimental/lib/util/system.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/lib/util/system.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -117,3 +117,75 @@
 
 	return mypid;
 }
+
+
+_PUBLIC_ int sys_getpeereid( int s, uid_t *uid)
+{
+#if defined(HAVE_PEERCRED)
+	struct ucred cred;
+	socklen_t cred_len = sizeof(struct ucred);
+	int ret;
+
+	ret = getsockopt(s, SOL_SOCKET, SO_PEERCRED, (void *)&cred, &cred_len);
+	if (ret != 0) {
+		return -1;
+	}
+
+	if (cred_len != sizeof(struct ucred)) {
+		errno = EINVAL;
+		return -1;
+	}
+
+	*uid = cred.uid;
+	return 0;
+#else
+#if defined(HAVE_GETPEEREID)
+	gid_t gid;
+	return getpeereid(s, uid, &gid);
+#endif
+	errno = ENOSYS;
+	return -1;
+#endif
+}
+
+_PUBLIC_ int sys_getnameinfo(const struct sockaddr *psa,
+			     int salen,
+			     char *host,
+			     size_t hostlen,
+			     char *service,
+			     size_t servlen,
+			     int flags)
+{
+	/*
+	 * For Solaris we must make sure salen is the
+	 * correct length for the incoming sa_family.
+	 */
+
+	if (salen == sizeof(struct sockaddr_storage)) {
+		salen = sizeof(struct sockaddr_in);
+#if defined(HAVE_IPV6)
+		if (psa->sa_family == AF_INET6) {
+			salen = sizeof(struct sockaddr_in6);
+		}
+#endif
+	}
+	return getnameinfo(psa, salen, host, hostlen, service, servlen, flags);
+}
+
+_PUBLIC_ int sys_connect(int fd, const struct sockaddr * addr)
+{
+	socklen_t salen = (socklen_t)-1;
+
+	if (addr->sa_family == AF_INET) {
+	    salen = sizeof(struct sockaddr_in);
+	} else if (addr->sa_family == AF_UNIX) {
+	    salen = sizeof(struct sockaddr_un);
+	}
+#if defined(HAVE_IPV6)
+	else if (addr->sa_family == AF_INET6) {
+	    salen = sizeof(struct sockaddr_in6);
+	}
+#endif
+
+	return connect(fd, addr, salen);
+}

Copied: branches/samba/experimental/lib/util/tdb_wrap.c (from rev 3778, tags/samba/upstream_3.6.0~rc1/lib/util/tdb_wrap.c)
===================================================================
--- branches/samba/experimental/lib/util/tdb_wrap.c	                        (rev 0)
+++ branches/samba/experimental/lib/util/tdb_wrap.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -0,0 +1,194 @@
+/* 
+   Unix SMB/CIFS implementation.
+   TDB wrap functions
+
+   Copyright (C) Andrew Tridgell 2004
+   Copyright (C) Jelmer Vernooij <jelmer at samba.org> 2007
+   
+   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/>.
+*/
+
+#include "includes.h"
+#include <tdb.h>
+#include "lib/util/dlinklist.h"
+#include "lib/util/tdb_wrap.h"
+#include <tdb.h>
+
+/*
+ Log tdb messages via DEBUG().
+*/
+static void tdb_wrap_log(TDB_CONTEXT *tdb, enum tdb_debug_level level, 
+			 const char *format, ...) PRINTF_ATTRIBUTE(3,4);
+
+static void tdb_wrap_log(TDB_CONTEXT *tdb, enum tdb_debug_level level, 
+			 const char *format, ...)
+{
+	va_list ap;
+	char *ptr = NULL;
+	int debuglevel = 0;
+	int ret;
+
+	switch (level) {
+	case TDB_DEBUG_FATAL:
+		debuglevel = 0;
+		break;
+	case TDB_DEBUG_ERROR:
+		debuglevel = 1;
+		break;
+	case TDB_DEBUG_WARNING:
+		debuglevel = 2;
+		break;
+	case TDB_DEBUG_TRACE:
+		debuglevel = 5;
+		break;
+	default:
+		debuglevel = 0;
+	}		
+
+	va_start(ap, format);
+	ret = vasprintf(&ptr, format, ap);
+	va_end(ap);
+
+	if (ret != -1) {
+		const char *name = tdb_name(tdb);
+		DEBUG(debuglevel, ("tdb(%s): %s", name ? name : "unnamed", ptr));
+		free(ptr);
+	}
+}
+
+struct tdb_wrap_private {
+	struct tdb_context *tdb;
+	const char *name;
+	struct tdb_wrap_private *next, *prev;
+};
+
+static struct tdb_wrap_private *tdb_list;
+
+/* destroy the last connection to a tdb */
+static int tdb_wrap_private_destructor(struct tdb_wrap_private *w)
+{
+	tdb_close(w->tdb);
+	DLIST_REMOVE(tdb_list, w);
+	return 0;
+}				 
+
+static struct tdb_wrap_private *tdb_wrap_private_open(TALLOC_CTX *mem_ctx,
+						      const char *name,
+						      int hash_size,
+						      int tdb_flags,
+						      int open_flags,
+						      mode_t mode)
+{
+	struct tdb_wrap_private *result;
+	struct tdb_logging_context log_ctx;
+
+	result = talloc(mem_ctx, struct tdb_wrap_private);
+	if (result == NULL) {
+		return NULL;
+	}
+	result->name = talloc_strdup(result, name);
+	if (result->name == NULL) {
+		goto fail;
+	}
+
+	log_ctx.log_fn = tdb_wrap_log;
+
+#if _SAMBA_BUILD_ == 3	
+	/* This #if _SAMBA_BUILD == 3 is very unfortunate, as it means
+	 * that in the top level build, these options are not
+	 * available for these databases.  However, having two
+	 * different tdb_wrap lists is a worse fate, so this will do
+	 * for now */
+
+	if (!lp_use_mmap()) {
+		tdb_flags |= TDB_NOMMAP;
+	}
+
+	if ((hash_size == 0) && (name != NULL)) {
+		const char *base;
+		base = strrchr_m(name, '/');
+
+		if (base != NULL) {
+			base += 1;
+		} else {
+			base = name;
+		}
+		hash_size = lp_parm_int(-1, "tdb_hashsize", base, 0);
+	}
+#endif
+
+	result->tdb = tdb_open_ex(name, hash_size, tdb_flags,
+				  open_flags, mode, &log_ctx, NULL);
+	if (result->tdb == NULL) {
+		goto fail;
+	}
+	talloc_set_destructor(result, tdb_wrap_private_destructor);
+	DLIST_ADD(tdb_list, result);
+	return result;
+
+fail:
+	TALLOC_FREE(result);
+	return NULL;
+}
+
+/*
+  wrapped connection to a tdb database
+  to close just talloc_free() the tdb_wrap pointer
+ */
+struct tdb_wrap *tdb_wrap_open(TALLOC_CTX *mem_ctx,
+			       const char *name, int hash_size, int tdb_flags,
+			       int open_flags, mode_t mode)
+{
+	struct tdb_wrap *result;
+	struct tdb_wrap_private *w;
+
+	result = talloc(mem_ctx, struct tdb_wrap);
+	if (result == NULL) {
+		return NULL;
+	}
+
+	for (w=tdb_list;w;w=w->next) {
+		if (strcmp(name, w->name) == 0) {
+			break;
+		}
+	}
+
+	if (w == NULL) {
+		w = tdb_wrap_private_open(result, name, hash_size, tdb_flags,
+					  open_flags, mode);
+	} else {
+		/*
+		 * Correctly use talloc_reference: The tdb will be
+		 * closed when "w" is being freed. The caller never
+		 * sees "w", so an incorrect use of talloc_free(w)
+		 * instead of calling talloc_unlink is not possible.
+		 * To avoid having to refcount ourselves, "w" will
+		 * have multiple parents that hang off all the
+		 * tdb_wrap's being returned from here. Those parents
+		 * can be freed without problem.
+		 */
+		if (talloc_reference(result, w) == NULL) {
+			goto fail;
+		}
+	}
+	if (w == NULL) {
+		goto fail;
+	}
+	result->tdb = w->tdb;
+	return result;
+fail:
+	TALLOC_FREE(result);
+	return NULL;
+}
+

Copied: branches/samba/experimental/lib/util/tdb_wrap.h (from rev 3778, tags/samba/upstream_3.6.0~rc1/lib/util/tdb_wrap.h)
===================================================================
--- branches/samba/experimental/lib/util/tdb_wrap.h	                        (rev 0)
+++ branches/samba/experimental/lib/util/tdb_wrap.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -0,0 +1,42 @@
+/* 
+   Unix SMB/CIFS implementation.
+
+   database wrap headers
+
+   Copyright (C) Andrew Tridgell 2004
+   
+   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/>.
+*/
+
+/* IMPORTANT: tdb_wrap should be always preferred over tdb_context for end consumer functions
+   it's because if the code will be running inside smbd, then we must use the linked list
+   of open tdb files, to determine if the tdb we desire is already open
+   as otherwise, when you close the tdb (even on a different file descriptor),
+   ALL LOCKS are lost (due to a real screwup in the POSIX specification that nobody has been able to get fixed)
+*/
+
+#ifndef _TDB_WRAP_H_
+#define _TDB_WRAP_H_
+
+#include <tdb.h>
+
+struct tdb_wrap {
+	struct tdb_context *tdb;
+};
+
+struct tdb_wrap *tdb_wrap_open(TALLOC_CTX *mem_ctx,
+			       const char *name, int hash_size, int tdb_flags,
+			       int open_flags, mode_t mode);
+
+#endif /* _TDB_WRAP_H_ */

Modified: branches/samba/experimental/lib/util/util.h
===================================================================
--- branches/samba/experimental/lib/util/util.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/lib/util/util.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -133,8 +133,20 @@
  **/
 _PUBLIC_ pid_t sys_getpid(void);
 
+_PUBLIC_ int sys_getpeereid( int s, uid_t *uid);
+
+struct sockaddr;
+
+_PUBLIC_ int sys_getnameinfo(const struct sockaddr *psa,
+			     int salen,
+			     char *host,
+			     size_t hostlen,
+			     char *service,
+			     size_t servlen,
+			     int flags);
+_PUBLIC_ int sys_connect(int fd, const struct sockaddr * addr);
+
 /* The following definitions come from lib/util/genrand.c  */
-
 /**
  Copy any user given reseed data.
 **/

Modified: branches/samba/experimental/lib/util/util_net.c
===================================================================
--- branches/samba/experimental/lib/util/util_net.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/lib/util/util_net.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -540,3 +540,158 @@
 }
 
 
+/****************************************************************************
+ Get a port number in host byte order from a sockaddr_storage.
+****************************************************************************/
+
+uint16_t get_sockaddr_port(const struct sockaddr_storage *pss)
+{
+	uint16_t port = 0;
+
+	if (pss->ss_family != AF_INET) {
+#if defined(HAVE_IPV6)
+		/* IPv6 */
+		const struct sockaddr_in6 *sa6 =
+			(const struct sockaddr_in6 *)pss;
+		port = ntohs(sa6->sin6_port);
+#endif
+	} else {
+		const struct sockaddr_in *sa =
+			(const struct sockaddr_in *)pss;
+		port = ntohs(sa->sin_port);
+	}
+	return port;
+}
+
+/****************************************************************************
+ Print out an IPv4 or IPv6 address from a struct sockaddr_storage.
+****************************************************************************/
+
+char *print_sockaddr_len(char *dest,
+			 size_t destlen,
+			const struct sockaddr *psa,
+			socklen_t psalen)
+{
+	if (destlen > 0) {
+		dest[0] = '\0';
+	}
+	(void)sys_getnameinfo(psa,
+			psalen,
+			dest, destlen,
+			NULL, 0,
+			NI_NUMERICHOST);
+	return dest;
+}
+
+/****************************************************************************
+ Print out an IPv4 or IPv6 address from a struct sockaddr_storage.
+****************************************************************************/
+
+char *print_sockaddr(char *dest,
+			size_t destlen,
+			const struct sockaddr_storage *psa)
+{
+	return print_sockaddr_len(dest, destlen, (struct sockaddr *)psa,
+			sizeof(struct sockaddr_storage));
+}
+
+/****************************************************************************
+ Print out a canonical IPv4 or IPv6 address from a struct sockaddr_storage.
+****************************************************************************/
+
+char *print_canonical_sockaddr(TALLOC_CTX *ctx,
+			const struct sockaddr_storage *pss)
+{
+	char addr[INET6_ADDRSTRLEN];
+	char *dest = NULL;
+	int ret;
+
+	/* Linux getnameinfo() man pages says port is unitialized if
+	   service name is NULL. */
+
+	ret = sys_getnameinfo((const struct sockaddr *)pss,
+			sizeof(struct sockaddr_storage),
+			addr, sizeof(addr),
+			NULL, 0,
+			NI_NUMERICHOST);
+	if (ret != 0) {
+		return NULL;
+	}
+
+	if (pss->ss_family != AF_INET) {
+#if defined(HAVE_IPV6)
+		dest = talloc_asprintf(ctx, "[%s]", addr);
+#else
+		return NULL;
+#endif
+	} else {
+		dest = talloc_asprintf(ctx, "%s", addr);
+	}
+
+	return dest;
+}
+
+/****************************************************************************
+ Return the port number we've bound to on a socket.
+****************************************************************************/
+
+int get_socket_port(int fd)
+{
+	struct sockaddr_storage sa;
+	socklen_t length = sizeof(sa);
+
+	if (fd == -1) {
+		return -1;
+	}
+
+	if (getsockname(fd, (struct sockaddr *)&sa, &length) < 0) {
+		int level = (errno == ENOTCONN) ? 2 : 0;
+		DEBUG(level, ("getsockname failed. Error was %s\n",
+			       strerror(errno)));
+		return -1;
+	}
+
+#if defined(HAVE_IPV6)
+	if (sa.ss_family == AF_INET6) {
+		return ntohs(((struct sockaddr_in6 *)&sa)->sin6_port);
+	}
+#endif
+	if (sa.ss_family == AF_INET) {
+		return ntohs(((struct sockaddr_in *)&sa)->sin_port);
+	}
+	return -1;
+}
+
+/****************************************************************************
+ Return the string of an IP address (IPv4 or IPv6).
+****************************************************************************/
+
+static const char *get_socket_addr(int fd, char *addr_buf, size_t addr_len)
+{
+	struct sockaddr_storage sa;
+	socklen_t length = sizeof(sa);
+
+	/* Ok, returning a hard coded IPv4 address
+	 * is bogus, but it's just as bogus as a
+	 * zero IPv6 address. No good choice here.
+	 */
+
+	strlcpy(addr_buf, "0.0.0.0", addr_len);
+
+	if (fd == -1) {
+		return addr_buf;
+	}
+
+	if (getsockname(fd, (struct sockaddr *)&sa, &length) < 0) {
+		DEBUG(0,("getsockname failed. Error was %s\n",
+			strerror(errno) ));
+		return addr_buf;
+	}
+
+	return print_sockaddr_len(addr_buf, addr_len, (struct sockaddr *)&sa, length);
+}
+
+const char *client_socket_addr(int fd, char *addr, size_t addr_len)
+{
+	return get_socket_addr(fd, addr, addr_len);
+}

Modified: branches/samba/experimental/lib/util/util_net.h
===================================================================
--- branches/samba/experimental/lib/util/util_net.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/lib/util/util_net.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -50,7 +50,16 @@
 **/
 _PUBLIC_ bool is_zero_ip_v4(struct in_addr ip);
 
+void in_addr_to_sockaddr_storage(struct sockaddr_storage *ss,
+				 struct in_addr ip);
+#if defined(HAVE_IPV6)
 /**
+ * Convert an IPv6 struct in_addr to a struct sockaddr_storage.
+ */
+void in6_addr_to_sockaddr_storage(struct sockaddr_storage *ss,
+				  struct in6_addr ip);
+#endif
+/**
  Are two IPs on the same subnet?
 **/
 _PUBLIC_ bool same_net_v4(struct in_addr ip1,struct in_addr ip2,struct in_addr mask);
@@ -60,6 +69,11 @@
 **/
 _PUBLIC_ bool is_ipaddress(const char *str);
 
+bool is_broadcast_addr(const struct sockaddr *pss);
+bool is_loopback_ip_v4(struct in_addr ip);
+bool is_loopback_addr(const struct sockaddr *pss);
+bool is_zero_addr(const struct sockaddr_storage *pss);
+void zero_ip_v4(struct in_addr *ip);
 /**
  Interpret an internet address or name into an IP address in 4 byte form.
 **/
@@ -72,5 +86,26 @@
 
 _PUBLIC_ bool is_ipaddress_v4(const char *str);
 
+bool is_address_any(const struct sockaddr *psa);
+bool same_net(const struct sockaddr *ip1,
+	      const struct sockaddr *ip2,
+	      const struct sockaddr *mask);
+bool sockaddr_equal(const struct sockaddr *ip1,
+		    const struct sockaddr *ip2);
 
+bool is_address_any(const struct sockaddr *psa);
+uint16_t get_sockaddr_port(const struct sockaddr_storage *pss);
+char *print_sockaddr_len(char *dest,
+			 size_t destlen,
+			 const struct sockaddr *psa,
+			 socklen_t psalen);
+char *print_sockaddr(char *dest,
+			size_t destlen,
+			const struct sockaddr_storage *psa);
+char *print_canonical_sockaddr(TALLOC_CTX *ctx,
+			const struct sockaddr_storage *pss);
+const char *client_name(int fd);
+int get_socket_port(int fd);
+const char *client_socket_addr(int fd, char *addr, size_t addr_len);
+
 #endif /* _SAMBA_UTIL_NET_H_ */

Modified: branches/samba/experimental/lib/util/util_tdb.h
===================================================================
--- branches/samba/experimental/lib/util/util_tdb.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/lib/util/util_tdb.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -1,7 +1,6 @@
 #ifndef _____LIB_UTIL_UTIL_TDB_H__
 #define _____LIB_UTIL_UTIL_TDB_H__
 
-
 /***************************************************************
  Make a TDB_DATA and keep the const warning in one place
 ****************************************************************/

Modified: branches/samba/experimental/lib/util/wscript_build
===================================================================
--- branches/samba/experimental/lib/util/wscript_build	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/lib/util/wscript_build	2011-05-19 17:46:26 UTC (rev 3779)
@@ -91,3 +91,13 @@
 	local_include=False,
 	public_deps='talloc'
 	)
+
+
+bld.SAMBA_LIBRARY('tdb-wrap',
+                  source='tdb_wrap.c',
+                  deps='tdb talloc samba-util',
+                  public_headers='tdb_wrap.h',
+                  private_library=True,
+                  local_include=False
+                  )
+

Modified: branches/samba/experimental/libcli/auth/schannel_state_tdb.c
===================================================================
--- branches/samba/experimental/libcli/auth/schannel_state_tdb.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/libcli/auth/schannel_state_tdb.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -27,9 +27,7 @@
 #include "../lib/util/util_tdb.h"
 #include "../libcli/auth/schannel.h"
 #include "../librpc/gen_ndr/ndr_schannel.h"
-#if _SAMBA_BUILD_ == 4
-#include "tdb_wrap.h"
-#endif
+#include "lib/util/tdb_wrap.h"
 
 #define SECRETS_SCHANNEL_STATE "SECRETS/SCHANNEL"
 

Modified: branches/samba/experimental/libcli/echo/tests/echo.c
===================================================================
--- branches/samba/experimental/libcli/echo/tests/echo.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/libcli/echo/tests/echo.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -26,6 +26,8 @@
 #include "libcli/util/ntstatus.h"
 #include "libcli/echo/libecho.h"
 
+NTSTATUS torture_libcli_echo_init(void);
+
 /* Basic test function that sends an echo request and checks the reply */
 static bool echo_udp_basic(struct torture_context *tctx, const char *address)
 {

Modified: branches/samba/experimental/libcli/named_pipe_auth/npa_tstream.h
===================================================================
--- branches/samba/experimental/libcli/named_pipe_auth/npa_tstream.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/libcli/named_pipe_auth/npa_tstream.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -23,6 +23,7 @@
 struct tevent_req;
 struct tevent_context;
 struct auth_session_info_transport;
+struct tsocket_address;
 
 struct tevent_req *tstream_npa_connect_send(TALLOC_CTX *mem_ctx,
 					    struct tevent_context *ev,

Modified: branches/samba/experimental/libcli/nbt/dns_hosts_file.c
===================================================================
--- branches/samba/experimental/libcli/nbt/dns_hosts_file.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/libcli/nbt/dns_hosts_file.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -28,6 +28,7 @@
 #include "lib/util/util_net.h"
 #include "system/filesys.h"
 #include "system/network.h"
+#include "libcli/nbt/libnbt.h"
 
 /********************************************************
  Start parsing the dns_hosts_file file.

Modified: branches/samba/experimental/libcli/security/create_descriptor.c
===================================================================
--- branches/samba/experimental/libcli/security/create_descriptor.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/libcli/security/create_descriptor.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -305,6 +305,7 @@
 	}
 }
 
+#if 0
 static void cr_descr_log_acl(struct security_acl *acl,
 				    const char *message,
 				    int level)
@@ -318,6 +319,7 @@
 		DEBUG(level,("%s: NULL\n", message));
 	}
 }
+#endif
 
 static bool compute_acl(struct security_descriptor *parent_sd,
 			struct security_descriptor *creator_sd,

Modified: branches/samba/experimental/libcli/security/pysecurity.c
===================================================================
--- branches/samba/experimental/libcli/security/pysecurity.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/libcli/security/pysecurity.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -23,6 +23,8 @@
 #include "libcli/security/security.h"
 #include "pytalloc.h"
 
+void initsecurity(void);
+
 static PyObject *py_se_access_check(PyObject *module, PyObject *args, PyObject *kwargs)
 {
 	NTSTATUS nt_status;

Modified: branches/samba/experimental/libcli/security/secacl.c
===================================================================
--- branches/samba/experimental/libcli/security/secacl.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/libcli/security/secacl.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -23,6 +23,7 @@
 #include "includes.h"
 #include "librpc/gen_ndr/ndr_security.h"
 #include "libcli/security/secace.h"
+#include "libcli/security/secacl.h"
 
 #define  SEC_ACL_HEADER_SIZE (2 * sizeof(uint16_t) + sizeof(uint32_t))
 

Modified: branches/samba/experimental/libcli/util/error.h
===================================================================
--- branches/samba/experimental/libcli/util/error.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/libcli/util/error.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -51,4 +51,6 @@
 *********************************************************************/
 WERROR unix_to_werror(int unix_error);
 
+NTSTATUS nt_status_squash(NTSTATUS nt_status);
+
 #endif /* _SAMBA_ERROR_H */

Modified: branches/samba/experimental/libcli/util/ntstatus.h
===================================================================
--- branches/samba/experimental/libcli/util/ntstatus.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/libcli/util/ntstatus.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -601,6 +601,8 @@
 #define NT_STATUS_OBJECTID_NOT_FOUND NT_STATUS(0xC0000000 | 0x02F0)
 #define NT_STATUS_NO_SUCH_JOB NT_STATUS(0xC0000000 | 0xEDE) /* scheduler */
 #define NT_STATUS_DOWNGRADE_DETECTED NT_STATUS(0xC0000000 | 0x0388)
+#define NT_STATUS_NO_S4U_PROT_SUPPORT NT_STATUS(0xC0000000 | 0x040A)
+#define NT_STATUS_CROSSREALM_DELEGATION_FAILURE NT_STATUS(0xC0000000 | 0x040B)
 #define NT_STATUS_NO_SUCH_JOB NT_STATUS(0xC0000000 | 0xEDE) /* scheduler */
 #define NT_STATUS_RPC_PROTSEQ_NOT_SUPPORTED NT_STATUS(0xC0000000 | 0x20004)
 #define NT_STATUS_RPC_UNSUPPORTED_NAME_SYNTAX NT_STATUS(0xC0000000 | 0x20026)

Modified: branches/samba/experimental/libgpo/gpo_fetch.c
===================================================================
--- branches/samba/experimental/libgpo/gpo_fetch.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/libgpo/gpo_fetch.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -34,6 +34,7 @@
 #include "lib/util/util.h"
 #else
 #include "libgpo/gpo_proto.h"
+#include "libsmb/libsmb.h"
 #endif
 
 /****************************************************************

Modified: branches/samba/experimental/librpc/idl/printcap.idl
===================================================================
--- branches/samba/experimental/librpc/idl/printcap.idl	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/librpc/idl/printcap.idl	2011-05-19 17:46:26 UTC (rev 3779)
@@ -7,6 +7,7 @@
 	typedef struct {
 		[charset(UTF8),string] uint8 *name;
 		[charset(UTF8),string] uint8 *info;
+		[charset(UTF8),string] uint8 *location;
 	} pcap_printer;
 
 	typedef [public] struct {

Modified: branches/samba/experimental/librpc/idl/rap.idl
===================================================================
--- branches/samba/experimental/librpc/idl/rap.idl	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/librpc/idl/rap.idl	2011-05-19 17:46:26 UTC (rev 3779)
@@ -966,6 +966,28 @@
 		[out] uint16 convert
 	);
 
+	typedef [public] struct {
+		uint32 TimeSinceJan11970;
+		uint32 TimeSinceBoot;
+		uint8 Hours;
+		uint8 Minutes;
+		uint8 Seconds;
+		uint8 Hundreds;
+		uint16 TimeZone;
+		uint16 ClockFrequency;
+		uint8 Day;
+		uint8 Month;
+		uint16 Year;
+		uint8 Weekday;
+	} rap_TimeOfDayInfo;
+
+	[public] void rap_NetRemoteTOD(
+		[in] uint16 bufsize,
+		[out] rap_status status,
+		[out] uint16 convert,
+		[out] rap_TimeOfDayInfo tod
+	);
+
 	/* Parameter description strings for RAP calls   */
 	/* Names are defined name for RAP call with _REQ */
 	/* appended to end.                              */

Modified: branches/samba/experimental/nsswitch/wins.c
===================================================================
--- branches/samba/experimental/nsswitch/wins.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/nsswitch/wins.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -99,7 +99,7 @@
 		in_addr_to_sockaddr_storage(&ss, *bcast);
 		status = name_query(name, 0x00, True, True, &ss,
 				    NULL, &pss, count, NULL);
-		if (pss) {
+		if (NT_STATUS_IS_OK(status) && (*count > 0)) {
 			if ((ret = SMB_MALLOC_P(struct in_addr)) == NULL) {
 				return NULL;
 			}

Modified: branches/samba/experimental/packaging/RHEL/makerpms.sh
===================================================================
--- branches/samba/experimental/packaging/RHEL/makerpms.sh	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/packaging/RHEL/makerpms.sh	2011-05-19 17:46:26 UTC (rev 3779)
@@ -20,7 +20,7 @@
 
 USERID=`id -u`
 GRPID=`id -g`
-VERSION='3.6.0pre3'
+VERSION='3.6.0rc1'
 REVISION=''
 SPECFILE="samba.spec"
 RPMVER=`rpm --version | awk '{print $3}'`

Modified: branches/samba/experimental/packaging/RHEL/samba.spec
===================================================================
--- branches/samba/experimental/packaging/RHEL/samba.spec	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/packaging/RHEL/samba.spec	2011-05-19 17:46:26 UTC (rev 3779)
@@ -5,7 +5,7 @@
 Vendor: Samba Team
 Packager: Samba Team <samba at samba.org>
 Name:         samba
-Version:      3.6.0pre3
+Version:      3.6.0rc1
 Release:      1
 Epoch:        0
 License: GNU GPL version 3

Modified: branches/samba/experimental/packaging/RHEL-CTDB/samba.spec
===================================================================
--- branches/samba/experimental/packaging/RHEL-CTDB/samba.spec	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/packaging/RHEL-CTDB/samba.spec	2011-05-19 17:46:26 UTC (rev 3779)
@@ -5,7 +5,7 @@
 Vendor: Samba Team
 Packager: Samba Team <samba at samba.org>
 Name:         samba
-Version:      3.6.0pre3
+Version:      3.6.0rc1
 Release:      1GITHASH
 Epoch:        0
 License: GNU GPL version 3
@@ -246,7 +246,7 @@
         --without-smbwrapper \
 	--with-pam \
 	--with-quotas \
-	--with-shared-modules=idmap_rid,idmap_ad,idmap_tdb2,vfs_gpfs,vfs_tsmsm \
+	--with-shared-modules=idmap_rid,idmap_ad,idmap_tdb2,vfs_gpfs,vfs_tsmsm,vfs_gpfs_hsm_notify \
 	--with-syslog \
 	--with-utmp \
 	--with-cluster-support \
@@ -482,6 +482,7 @@
 %{_libarchdir}/samba/vfs/fileid.so
 %{_libarchdir}/samba/vfs/full_audit.so
 %{_libarchdir}/samba/vfs/gpfs.so
+%{_libarchdir}/samba/vfs/gpfs_hsm_notify.so
 %{_libarchdir}/samba/vfs/linux_xfs_sgid.so
 %{_libarchdir}/samba/vfs/netatalk.so
 %{_libarchdir}/samba/vfs/preopen.so

Modified: branches/samba/experimental/packaging/RHEL-CTDB/samba.spec.tmpl
===================================================================
--- branches/samba/experimental/packaging/RHEL-CTDB/samba.spec.tmpl	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/packaging/RHEL-CTDB/samba.spec.tmpl	2011-05-19 17:46:26 UTC (rev 3779)
@@ -246,7 +246,7 @@
         --without-smbwrapper \
 	--with-pam \
 	--with-quotas \
-	--with-shared-modules=idmap_rid,idmap_ad,idmap_tdb2,vfs_gpfs,vfs_tsmsm \
+	--with-shared-modules=idmap_rid,idmap_ad,idmap_tdb2,vfs_gpfs,vfs_tsmsm,vfs_gpfs_hsm_notify \
 	--with-syslog \
 	--with-utmp \
 	--with-cluster-support \
@@ -482,6 +482,7 @@
 %{_libarchdir}/samba/vfs/fileid.so
 %{_libarchdir}/samba/vfs/full_audit.so
 %{_libarchdir}/samba/vfs/gpfs.so
+%{_libarchdir}/samba/vfs/gpfs_hsm_notify.so
 %{_libarchdir}/samba/vfs/linux_xfs_sgid.so
 %{_libarchdir}/samba/vfs/netatalk.so
 %{_libarchdir}/samba/vfs/preopen.so

Modified: branches/samba/experimental/source3/Makefile.in
===================================================================
--- branches/samba/experimental/source3/Makefile.in	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/Makefile.in	2011-05-19 17:46:26 UTC (rev 3779)
@@ -269,6 +269,7 @@
 ######################################################################
 
 TDB_LIB_OBJ = lib/util_tdb.o ../lib/util/util_tdb.o \
+	  ../lib/util/tdb_wrap.o \
 	  lib/dbwrap.o lib/dbwrap_tdb.o \
 	  lib/dbwrap_ctdb.o \
 	  lib/g_lock.o \
@@ -820,6 +821,7 @@
 VFS_PREALLOC_OBJ = modules/vfs_prealloc.o
 VFS_COMMIT_OBJ = modules/vfs_commit.o
 VFS_GPFS_OBJ = modules/vfs_gpfs.o modules/gpfs.o modules/nfs4_acls.o
+VFS_GPFS_HSM_NOTIFY_OBJ = modules/vfs_gpfs_hsm_notify.o
 VFS_NOTIFY_FAM_OBJ = modules/vfs_notify_fam.o
 VFS_READAHEAD_OBJ = modules/vfs_readahead.o
 VFS_TSMSM_OBJ = modules/vfs_tsmsm.o
@@ -1203,7 +1205,7 @@
 	  $(LIBSMBCONF_OBJ) \
 	  $(REGFIO_OBJ) \
 	  $(PRIVILEGES_BASIC_OBJ) \
-	  $(LIB_EVENTLOG_OBJ) localedir.o
+	  $(LIB_EVENTLOG_OBJ)
 
 CUPS_OBJ = client/smbspool.o $(PARAM_OBJ) $(LIBSMB_OBJ) \
 	  $(LIB_NONSMBD_OBJ) $(KRBCLIENT_OBJ) $(POPT_LIB_OBJ) \
@@ -1738,13 +1740,6 @@
 		$(COMPILE_CC) $(PTHREAD_CFLAGS) >/dev/null 2>&1
 ### End section of object files that require PTHREAD_CFLAGS
 
-localedir.o: localedir.c Makefile
-	@echo Compiling $*.c
-	@$(COMPILE_CC_PATH) && exit 0;\
-		echo "The following command failed:" 1>&2;\
-		echo "$(COMPILE_CC_PATH)" 1>&2;\
-		$(COMPILE_CC_PATH) >/dev/null 2>&1
-
 lib/pidfile.o: lib/pidfile.c
 	@echo Compiling $*.c
 	@$(COMPILE_CC_PATH) && exit 0;\
@@ -2023,7 +2018,9 @@
 
 LIBTALLOC_SHARED_TARGET=@LIBTALLOC_SHARED_TARGET@
 LIBTALLOC_SOVER=@LIBTALLOC_SOVER@
+LIBTALLOC_FULLVER=@LIBTALLOC_FULLVER@
 LIBTALLOC_SHARED_TARGET_SONAME=$(LIBTALLOC_SHARED_TARGET).$(LIBTALLOC_SOVER)
+LIBTALLOC_SHARED_TARGET_FULLVER=$(LIBTALLOC_SHARED_TARGET).$(LIBTALLOC_FULLVER)
 LIBTALLOC_STATIC_TARGET=@LIBTALLOC_STATIC_TARGET@
 LIBTALLOC_SYMS=$(srcdir)/exports/libtalloc. at SYMSEXT@
 LIBTALLOC_HEADERS=$(srcdir)/@tallocdir@/talloc.h
@@ -2035,8 +2032,13 @@
 	@echo Linking shared library $@
 	@$(SHLD_DSO) $(LIBTALLOC_OBJ) $(LIBREPLACE_LIBS) @SONAMEFLAG@`basename $@`
 
-$(LIBTALLOC_SHARED_TARGET): $(LIBTALLOC_SHARED_TARGET_SONAME)
+$(LIBTALLOC_SHARED_TARGET_FULLVER): $(LIBTALLOC_SHARED_TARGET_SONAME)
 	@rm -f $@
+	@mv -f $(LIBTALLOC_SHARED_TARGET_SONAME) $@
+	@ln -f -s `basename $@` $(LIBTALLOC_SHARED_TARGET_SONAME)
+
+$(LIBTALLOC_SHARED_TARGET): $(LIBTALLOC_SHARED_TARGET_FULLVER)
+	@rm -f $@
 	@ln -f -s `basename $(LIBTALLOC_SHARED_TARGET_SONAME)` $@
 
 $(LIBTALLOC_STATIC_TARGET): $(BINARY_PREREQS) $(LIBTALLOC_OBJ0)
@@ -2053,8 +2055,13 @@
 
 installlibtalloc:: installdirs libtalloc
 	@$(SHELL) $(srcdir)/script/installdirs.sh $(INSTALLPERMS_BIN) $(DESTDIR) $(LIBDIR)
-	-$(INSTALLLIBCMD_SH) $(LIBTALLOC_SHARED_TARGET_SONAME) $(DESTDIR)$(LIBDIR)
+	-$(INSTALLLIBCMD_SH) $(LIBTALLOC_SHARED_TARGET_FULLVER) $(DESTDIR)$(LIBDIR)
 	@rm -f $(DESTDIR)$(LIBDIR)/`basename $(LIBTALLOC_SHARED_TARGET)`
+	@rm -f $(DESTDIR)$(LIBDIR)/`basename $(LIBTALLOC_SHARED_TARGET_SONAME)`
+	-if test -r $(LIBTALLOC_SHARED_TARGET_FULLVER) ; then \
+		ln -f -s `basename $(LIBTALLOC_SHARED_TARGET_FULLVER)` \
+			$(DESTDIR)$(LIBDIR)/`basename $(LIBTALLOC_SHARED_TARGET_SONAME)` ; \
+	fi
 	-if test -r $(LIBTALLOC_SHARED_TARGET_SONAME) ; then \
 		ln -f -s `basename $(LIBTALLOC_SHARED_TARGET_SONAME)` \
 			$(DESTDIR)$(LIBDIR)/`basename $(LIBTALLOC_SHARED_TARGET)` ; \
@@ -2077,15 +2084,17 @@
 
 showlibtalloc:
 	@echo  ""
-	@echo "LIBTALLOC_SHARED               = @LIBTALLOC_SHARED@"
-	@echo "LIBTALLOC_STATIC               = @LIBTALLOC_STATIC@"
-	@echo "LIBTALLOC_LIBS                 = $(LIBTALLOC_LIBS)"
+	@echo "LIBTALLOC_SHARED                = @LIBTALLOC_SHARED@"
+	@echo "LIBTALLOC_STATIC                = @LIBTALLOC_STATIC@"
+	@echo "LIBTALLOC_LIBS                  = $(LIBTALLOC_LIBS)"
 	@echo ""
-	@echo "LIBTALLOC_SHARED_TARGET        = $(LIBTALLOC_SHARED_TARGET)"
-	@echo "LIBTALLOC_SOVER                = $(LIBTALLOC_SOVER)"
-	@echo "LIBTALLOC_SHARED TARGET_SONAME = $(LIBTALLOC_SHARED_TARGET_SONAME)"
-	@echo "LIBTALLOC_STATIC_TARGET        = $(LIBTALLOC_STATIC_TARGET)"
-	@echo "LIBTALLOC                      = $(LIBTALLOC)"
+	@echo "LIBTALLOC_SHARED_TARGET         = $(LIBTALLOC_SHARED_TARGET)"
+	@echo "LIBTALLOC_SOVER                 = $(LIBTALLOC_SOVER)"
+	@echo "LIBTALLOC_FULLVER               = $(LIBTALLOC_FULLVER)"
+	@echo "LIBTALLOC_SHARED TARGET_SONAME  = $(LIBTALLOC_SHARED_TARGET_SONAME)"
+	@echo "LIBTALLOC_SHARED TARGET_FULLVER = $(LIBTALLOC_SHARED_TARGET_FULLVER)"
+	@echo "LIBTALLOC_STATIC_TARGET         = $(LIBTALLOC_STATIC_TARGET)"
+	@echo "LIBTALLOC                       = $(LIBTALLOC)"
 
 showlibs:: showlibtalloc
 
@@ -2100,7 +2109,9 @@
 
 LIBTDB_SHARED_TARGET=@LIBTDB_SHARED_TARGET@
 LIBTDB_SOVER=@LIBTDB_SOVER@
+LIBTDB_FULLVER=@LIBTDB_FULLVER@
 LIBTDB_SHARED_TARGET_SONAME=$(LIBTDB_SHARED_TARGET).$(LIBTDB_SOVER)
+LIBTDB_SHARED_TARGET_FULLVER=$(LIBTDB_SHARED_TARGET).$(LIBTDB_FULLVER)
 LIBTDB_STATIC_TARGET=@LIBTDB_STATIC_TARGET@
 LIBTDB_SYMS=$(srcdir)/exports/libtdb. at SYMSEXT@
 LIBTDB_HEADERS=$(srcdir)/@tdbdir@/include/tdb.h
@@ -2108,13 +2119,19 @@
 $(LIBTDB_SYMS): $(LIBTDB_HEADERS)
 	@$(MKSYMS_SH) $(AWK) $@ $(LIBTDB_HEADERS)
 
+
 $(LIBTDB_SHARED_TARGET_SONAME): $(BINARY_PREREQS) $(LIBTDB_OBJ) $(LIBTDB_SYMS)
 	@echo Linking shared library $@
 	@$(SHLD_DSO) $(LIBTDB_OBJ) $(LIBREPLACE_LIBS) $(TDB_DEPS) \
 		@SONAMEFLAG@`basename $@`
 
-$(LIBTDB_SHARED_TARGET): $(LIBTDB_SHARED_TARGET_SONAME)
+$(LIBTDB_SHARED_TARGET_FULLVER): $(LIBTDB_SHARED_TARGET_SONAME)
 	@rm -f $@
+	@mv -f $(LIBTDB_SHARED_TARGET_SONAME) $(LIBTDB_SHARED_TARGET_FULLVER)
+	@ln -f -s `basename $(LIBTDB_SHARED_TARGET_FULLVER)` $(LIBTDB_SHARED_TARGET_SONAME)
+
+$(LIBTDB_SHARED_TARGET): $(LIBTDB_SHARED_TARGET_FULLVER)
+	@rm -f $@
 	@ln -f -s `basename $(LIBTDB_SHARED_TARGET_SONAME)` $@
 
 $(LIBTDB_STATIC_TARGET): $(BINARY_PREREQS) $(LIBTDB_OBJ0)
@@ -2133,8 +2150,13 @@
 
 installlibtdb:: installdirs libtdb
 	@$(SHELL) $(srcdir)/script/installdirs.sh $(INSTALLPERMS_BIN) $(DESTDIR) $(LIBDIR)
-	-$(INSTALLLIBCMD_SH) $(LIBTDB_SHARED_TARGET_SONAME) $(DESTDIR)$(LIBDIR)
+	-$(INSTALLLIBCMD_SH) $(LIBTDB_SHARED_TARGET_FULLVER) $(DESTDIR)$(LIBDIR)
 	@rm -f $(DESTDIR)$(LIBDIR)/`basename $(LIBTDB_SHARED_TARGET)`
+	@rm -f $(DESTDIR)$(LIBDIR)/`basename $(LIBTDB_SHARED_TARGET_SONAME)`
+	-if test -r $(LIBTDB_SHARED_TARGET_FULLVER) ; then \
+		ln -f -s `basename $(LIBTDB_SHARED_TARGET_FULLVER)` \
+			$(DESTDIR)$(LIBDIR)/`basename $(LIBTDB_SHARED_TARGET_SONAME)` ; \
+	fi
 	-if test -r $(LIBTDB_SHARED_TARGET_SONAME) ; then \
 		ln -f -s `basename $(LIBTDB_SHARED_TARGET_SONAME)` \
 			$(DESTDIR)$(LIBDIR)/`basename $(LIBTDB_SHARED_TARGET)` ; \
@@ -2157,15 +2179,17 @@
 
 showlibtdb:
 	@echo  ""
-	@echo "LIBTDB_SHARED               = @LIBTDB_SHARED@"
-	@echo "LIBTDB_STATIC               = @LIBTDB_STATIC@"
-	@echo "LIBTDB_LIBS                 = $(LIBTDB_LIBS)"
+	@echo "LIBTDB_SHARED                = @LIBTDB_SHARED@"
+	@echo "LIBTDB_STATIC                = @LIBTDB_STATIC@"
+	@echo "LIBTDB_LIBS                  = $(LIBTDB_LIBS)"
 	@echo ""
-	@echo "LIBTDB_SHARED_TARGET        = $(LIBTDB_SHARED_TARGET)"
-	@echo "LIBTDB_SOVER                = $(LIBTDB_SOVER)"
-	@echo "LIBTDB_SHARED TARGET_SONAME = $(LIBTDB_SHARED_TARGET_SONAME)"
-	@echo "LIBTDB_STATIC_TARGET        = $(LIBTDB_STATIC_TARGET)"
-	@echo "LIBTDB                      = $(LIBTDB)"
+	@echo "LIBTDB_SHARED_TARGET         = $(LIBTDB_SHARED_TARGET)"
+	@echo "LIBTDB_SOVER                 = $(LIBTDB_SOVER)"
+	@echo "LIBTDB_FULLVER               = $(LIBTDB_FULLVER)"
+	@echo "LIBTDB_SHARED TARGET_SONAME  = $(LIBTDB_SHARED_TARGET_SONAME)"
+	@echo "LIBTDB_SHARED TARGET_FULLVER = $(LIBTDB_SHARED_TARGET_FULLVER)"
+	@echo "LIBTDB_STATIC_TARGET         = $(LIBTDB_STATIC_TARGET)"
+	@echo "LIBTDB                       = $(LIBTDB)"
 
 showlibs:: showlibtdb
 
@@ -2191,6 +2215,7 @@
 
 LIBWBCLIENT_SHARED_TARGET=@LIBWBCLIENT_SHARED_TARGET@
 LIBWBCLIENT_SOVER=@LIBWBCLIENT_SOVER@
+LIBWBCLIENT_FULLVER=@LIBWBCLIENT_FULLVER@
 LIBWBCLIENT_SHARED_TARGET_SONAME=$(LIBWBCLIENT_SHARED_TARGET).$(LIBWBCLIENT_SOVER)
 LIBWBCLIENT_STATIC_TARGET=@LIBWBCLIENT_STATIC_TARGET@
 LIBWBCLIENT_SYMS=$(srcdir)/exports/libwbclient. at SYMSEXT@
@@ -2253,6 +2278,7 @@
 	@echo ""
 	@echo "LIBWBCLIENT_SHARED_TARGET        = $(LIBWBCLIENT_SHARED_TARGET)"
 	@echo "LIBWBCLIENT_SOVER                = $(LIBWBCLIENT_SOVER)"
+	@echo "LIBWBCLIENT_FULLVER              = $(LIBWBCLIENT_FULLVER)"
 	@echo "LIBWBCLIENT_SHARED TARGET_SONAME = $(LIBWBCLIENT_SHARED_TARGET_SONAME)"
 	@echo "LIBWBCLIENT_STATIC_TARGET        = $(LIBWBCLIENT_STATIC_TARGET)"
 	@echo "LIBWBCLIENT                      = $(LIBWBCLIENT)"
@@ -2269,6 +2295,7 @@
 
 LIBADDNS_SHARED_TARGET=@LIBADDNS_SHARED_TARGET@
 LIBADDNS_SOVER=@LIBADDNS_SOVER@
+LIBADDNS_FULLVER=@LIBADDNS_FULLVER@
 LIBADDNS_SHARED_TARGET_SONAME=$(LIBADDNS_SHARED_TARGET).$(LIBADDNS_SOVER)
 LIBADDNS_STATIC_TARGET=@LIBADDNS_STATIC_TARGET@
 LIBADDNS=@LIBADDNS_STATIC@ @LIBADDNS_SHARED@
@@ -2326,6 +2353,7 @@
 	@echo ""
 	@echo "LIBADDNS_SHARED_TARGET        = $(LIBADDNS_SHARED_TARGET)"
 	@echo "LIBADDNS_SOVER                = $(LIBADDNS_SOVER)"
+	@echo "LIBADDNS_FULLVER              = $(LIBADDNS_FULLVER)"
 	@echo "LIBADDNS_SHARED TARGET_SONAME = $(LIBADDNS_SHARED_TARGET_SONAME)"
 	@echo "LIBADDNS_STATIC_TARGET        = $(LIBADDNS_STATIC_TARGET)"
 	@echo "LIBADDNS                      = $(LIBADDNS)"
@@ -2376,6 +2404,7 @@
 
 LIBNETAPI_SHARED_TARGET=@LIBNETAPI_SHARED_TARGET@
 LIBNETAPI_SOVER=@LIBNETAPI_SOVER@
+LIBNETAPI_FULLVER=@LIBNETAPI_FULLVER@
 LIBNETAPI_SHARED_TARGET_SONAME=$(LIBNETAPI_SHARED_TARGET).$(LIBNETAPI_SOVER)
 LIBNETAPI_STATIC_TARGET=@LIBNETAPI_STATIC_TARGET@
 LIBNETAPI_SYMS=$(srcdir)/exports/libnetapi. at SYMSEXT@
@@ -2440,6 +2469,7 @@
 	@echo ""
 	@echo "LIBNETAPI_SHARED_TARGET        = $(LIBNETAPI_SHARED_TARGET)"
 	@echo "LIBNETAPI_SOVER                = $(LIBNETAPI_SOVER)"
+	@echo "LIBNETAPI_FULLVER              = $(LIBNETAPI_FULLVER)"
 	@echo "LIBNETAPI_SHARED TARGET_SONAME = $(LIBNETAPI_SHARED_TARGET_SONAME)"
 	@echo "LIBNETAPI_STATIC_TARGET        = $(LIBNETAPI_STATIC_TARGET)"
 	@echo "LIBNETAPI                      = $(LIBNETAPI)"
@@ -2454,6 +2484,7 @@
 
 LIBSMBCLIENT_SHARED_TARGET=@LIBSMBCLIENT_SHARED_TARGET@
 LIBSMBCLIENT_SOVER=@LIBSMBCLIENT_SOVER@
+LIBSMBCLIENT_FULLVER=@LIBSMBCLIENT_FULLVER@
 LIBSMBCLIENT_SHARED_TARGET_SONAME=$(LIBSMBCLIENT_SHARED_TARGET).$(LIBSMBCLIENT_SOVER)
 LIBSMBCLIENT_STATIC_TARGET=@LIBSMBCLIENT_STATIC_TARGET@
 LIBSMBCLIENT=@LIBSMBCLIENT_STATIC@ @LIBSMBCLIENT_SHARED@
@@ -2522,6 +2553,7 @@
 	@echo ""
 	@echo "LIBSMBCLIENT_SHARED_TARGET        = $(LIBSMBCLIENT_SHARED_TARGET)"
 	@echo "LIBSMBCLIENT_SOVER                = $(LIBSMBCLIENT_SOVER)"
+	@echo "LIBSMBCLIENT_FULLVER              = $(LIBSMBCLIENT_FULLVER)"
 	@echo "LIBSMBCLIENT_SHARED TARGET_SONAME = $(LIBSMBCLIENT_SHARED_TARGET_SONAME)"
 	@echo "LIBSMBCLIENT_STATIC_TARGET        = $(LIBSMBCLIENT_STATIC_TARGET)"
 	@echo "LIBSMBCLIENT                      = $(LIBSMBCLIENT)"
@@ -2540,6 +2572,7 @@
 
 LIBSMBSHAREMODES_SHARED_TARGET=@LIBSMBSHAREMODES_SHARED_TARGET@
 LIBSMBSHAREMODES_SOVER=@LIBSMBSHAREMODES_SOVER@
+LIBSMBSHAREMODES_FULLVER=@LIBSMBSHAREMODES_FULLVER@
 LIBSMBSHAREMODES_SHARED_TARGET_SONAME=$(LIBSMBSHAREMODES_SHARED_TARGET).$(LIBSMBSHAREMODES_SOVER)
 LIBSMBSHAREMODES_STATIC_TARGET=@LIBSMBSHAREMODES_STATIC_TARGET@
 LIBSMBSHAREMODES=@LIBSMBSHAREMODES_STATIC@ @LIBSMBSHAREMODES_SHARED@
@@ -2604,6 +2637,7 @@
 	@echo ""
 	@echo "LIBSMBSHAREMODES_SHARED_TARGET        = $(LIBSMBSHAREMODES_SHARED_TARGET)"
 	@echo "LIBSMBSHAREMODES_SOVER                = $(LIBSMBSHAREMODES_SOVER)"
+	@echo "LIBSMBSHAREMODES_FULLVER              = $(LIBSMBSHAREMODES_FULLVER)"
 	@echo "LIBSMBSHAREMODES_SHARED TARGET_SONAME = $(LIBSMBSHAREMODES_SHARED_TARGET_SONAME)"
 	@echo "LIBSMBSHAREMODES_STATIC_TARGET        = $(LIBSMBSHAREMODES_STATIC_TARGET)"
 	@echo "LIBSMBSHAREMODES                      = $(LIBSMBSHAREMODES)"
@@ -2967,6 +3001,10 @@
 	@echo "Building plugin $@"
 	@$(SHLD_MODULE) $(VFS_GPFS_OBJ)
 
+bin/gpfs_hsm_notify. at SHLIBEXT@: $(BINARY_PREREQS) $(VFS_GPFS_HSM_NOTIFY_OBJ)
+	@echo "Building plugin $@"
+	@$(SHLD_MODULE) $(VFS_GPFS_HSM_NOTIFY_OBJ)
+
 bin/notify_fam. at SHLIBEXT@: $(BINARY_PREREQS) $(VFS_NOTIFY_FAM_OBJ)
 	@echo "Building plugin $@"
 	@$(SHLD_MODULE) $(VFS_NOTIFY_FAM_OBJ) @SMB_FAM_LIBS@

Modified: branches/samba/experimental/source3/VERSION
===================================================================
--- branches/samba/experimental/source3/VERSION	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/VERSION	2011-05-19 17:46:26 UTC (rev 3779)
@@ -46,7 +46,7 @@
 # e.g. SAMBA_VERSION_PRE_RELEASE=1                     #
 #  ->  "2.2.9pre1"                                     #
 ########################################################
-SAMBA_VERSION_PRE_RELEASE=3
+SAMBA_VERSION_PRE_RELEASE=
 
 ########################################################
 # For 'rc' releases the version will be                #
@@ -56,7 +56,7 @@
 # e.g. SAMBA_VERSION_RC_RELEASE=1                      #
 #  ->  "3.0.0rc1"                                      #
 ########################################################
-SAMBA_VERSION_RC_RELEASE=
+SAMBA_VERSION_RC_RELEASE=1
 
 ########################################################
 # To mark SVN snapshots this should be set to 'yes'    #

Modified: branches/samba/experimental/source3/auth/auth_domain.c
===================================================================
--- branches/samba/experimental/source3/auth/auth_domain.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/auth/auth_domain.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -26,6 +26,7 @@
 #include "rpc_client/cli_netlogon.h"
 #include "secrets.h"
 #include "passdb.h"
+#include "libsmb/libsmb.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_AUTH

Modified: branches/samba/experimental/source3/auth/auth_sam.c
===================================================================
--- branches/samba/experimental/source3/auth/auth_sam.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/auth/auth_sam.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -22,7 +22,6 @@
 
 #include "includes.h"
 #include "auth.h"
-#include "../libcli/auth/libcli_auth.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_AUTH

Modified: branches/samba/experimental/source3/auth/auth_server.c
===================================================================
--- branches/samba/experimental/source3/auth/auth_server.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/auth/auth_server.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -22,6 +22,7 @@
 #include "auth.h"
 #include "system/passwd.h"
 #include "smbd/smbd.h"
+#include "libsmb/libsmb.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_AUTH

Modified: branches/samba/experimental/source3/auth/auth_unix.c
===================================================================
--- branches/samba/experimental/source3/auth/auth_unix.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/auth/auth_unix.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -20,7 +20,6 @@
 #include "includes.h"
 #include "auth.h"
 #include "system/passwd.h"
-#include "../librpc/gen_ndr/samr.h"
 #include "smbd/globals.h"
 
 #undef DBGC_CLASS

Modified: branches/samba/experimental/source3/auth/auth_util.c
===================================================================
--- branches/samba/experimental/source3/auth/auth_util.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/auth/auth_util.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -23,7 +23,6 @@
 
 #include "includes.h"
 #include "auth.h"
-#include "smbd/globals.h"
 #include "../libcli/auth/libcli_auth.h"
 #include "../lib/crypto/arcfour.h"
 #include "rpc_client/init_lsa.h"

Modified: branches/samba/experimental/source3/auth/server_info_sam.c
===================================================================
--- branches/samba/experimental/source3/auth/server_info_sam.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/auth/server_info_sam.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -23,8 +23,6 @@
 
 #include "includes.h"
 #include "auth.h"
-#include "smbd/globals.h"
-#include "../libcli/auth/libcli_auth.h"
 #include "nsswitch/winbind_client.h"
 #include "passdb.h"
 

Modified: branches/samba/experimental/source3/auth/token_util.c
===================================================================
--- branches/samba/experimental/source3/auth/token_util.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/auth/token_util.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -31,7 +31,6 @@
 #include "../librpc/gen_ndr/netlogon.h"
 #include "../libcli/security/security.h"
 #include "../lib/util/util_pw.h"
-#include "lib/winbind_util.h"
 #include "passdb.h"
 #include "lib/privileges.h"
 

Modified: branches/samba/experimental/source3/build/dynconfig.py
===================================================================
--- branches/samba/experimental/source3/build/dynconfig.py	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/build/dynconfig.py	2011-05-19 17:46:26 UTC (rev 3779)
@@ -30,6 +30,7 @@
     'CONFIGFILE'                     : '${SYSCONFDIR}/smb.conf',
     'DATADIR'                        : '${DATADIR}',
     'LIBDIR'                         : '${LIBDIR}',
+    'LOCALEDIR'                      : '${LOCALEDIR}',
     'LMHOSTSFILE'                    : '${SYSCONFDIR}/lmhosts',
     'LOCKDIR'                        : '${LOCALSTATEDIR}/locks',
     'LOGFILEBASE'                    : '${LOCALSTATEDIR}',

Modified: branches/samba/experimental/source3/build/wscript
===================================================================
--- branches/samba/experimental/source3/build/wscript	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/build/wscript	2011-05-19 17:46:26 UTC (rev 3779)
@@ -45,9 +45,6 @@
                         '../dynconfig.c',
                         deps='replace talloc tdb popt',
                         cflags=cflags)
-    bld.SAMBA3_SUBSYSTEM('LOCALE_DIR',
-                        '../localedir.c',
-                        cflags='-DLOCALEDIR=\"%s\"' % bld.env.LOCALEDIR)
 
 
 def dynconfig_cflags(bld):

Modified: branches/samba/experimental/source3/client/client.c
===================================================================
--- branches/samba/experimental/source3/client/client.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/client/client.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -32,6 +32,7 @@
 #include "../libcli/smbreadline/smbreadline.h"
 #include "../libcli/security/security.h"
 #include "system/select.h"
+#include "libsmb/libsmb.h"
 #include "libsmb/clirap.h"
 #include "trans2.h"
 #include "libsmb/nmblib.h"
@@ -505,7 +506,7 @@
 		return false;
 	}
 
-	if (finfo->mode & aDIR) {
+	if (finfo->mode & FILE_ATTRIBUTE_DIRECTORY) {
 		return true;
 	}
 
@@ -520,7 +521,7 @@
 		return false;
 	}
 
-	if ((archive_level==1 || archive_level==2) && !(finfo->mode & aARCH)) {
+	if ((archive_level==1 || archive_level==2) && !(finfo->mode & FILE_ATTRIBUTE_ARCHIVE)) {
 		DEBUG(3,("archive %s failed\n", finfo->name));
 		return false;
 	}
@@ -752,7 +753,7 @@
 		*dir_end = '\0';
 	}
 
-	if (f->mode & aDIR) {
+	if (f->mode & FILE_ATTRIBUTE_DIRECTORY) {
 		if (do_list_dirs && do_this_one(f)) {
 			status = do_list_fn(cli_state, f, dir);
 			if (!NT_STATUS_IS_OK(status)) {
@@ -924,7 +925,7 @@
 static int cmd_dir(void)
 {
 	TALLOC_CTX *ctx = talloc_tos();
-	uint16 attribute = aDIR | aSYSTEM | aHIDDEN;
+	uint16 attribute = FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN;
 	char *mask = NULL;
 	char *buf = NULL;
 	int rc = 1;
@@ -974,7 +975,7 @@
 static int cmd_du(void)
 {
 	TALLOC_CTX *ctx = talloc_tos();
-	uint16 attribute = aDIR | aSYSTEM | aHIDDEN;
+	uint16 attribute = FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN;
 	char *mask = NULL;
 	char *buf = NULL;
 	NTSTATUS status;
@@ -1147,8 +1148,8 @@
 		close(handle);
 	}
 
-	if (archive_level >= 2 && (attr & aARCH)) {
-		cli_setatr(cli, rname, attr & ~(uint16)aARCH, 0);
+	if (archive_level >= 2 && (attr & FILE_ATTRIBUTE_ARCHIVE)) {
+		cli_setatr(cli, rname, attr & ~(uint16)FILE_ATTRIBUTE_ARCHIVE, 0);
 	}
 
 	{
@@ -1233,7 +1234,7 @@
 		return NT_STATUS_UNSUCCESSFUL;
 	}
 
-	if (finfo->mode & aDIR) {
+	if (finfo->mode & FILE_ATTRIBUTE_DIRECTORY) {
 		if (asprintf(&quest,
 			 "Get directory %s? ",finfo->name) < 0) {
 			return NT_STATUS_NO_MEMORY;
@@ -1251,7 +1252,7 @@
 	}
 	SAFE_FREE(quest);
 
-	if (!(finfo->mode & aDIR)) {
+	if (!(finfo->mode & FILE_ATTRIBUTE_DIRECTORY)) {
 		rname = talloc_asprintf(ctx,
 				"%s%s",
 				client_get_cur_dir(),
@@ -1306,7 +1307,7 @@
 		return NT_STATUS_NO_MEMORY;
 	}
 
-	status = do_list(mget_mask, aSYSTEM | aHIDDEN | aDIR,do_mget,false, true);
+	status = do_list(mget_mask, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_DIRECTORY,do_mget,false, true);
 	if (!NT_STATUS_IS_OK(status)) {
 		return status;
 	}
@@ -1395,13 +1396,13 @@
 static int cmd_mget(void)
 {
 	TALLOC_CTX *ctx = talloc_tos();
-	uint16 attribute = aSYSTEM | aHIDDEN;
+	uint16 attribute = FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN;
 	char *mget_mask = NULL;
 	char *buf = NULL;
 	NTSTATUS status = NT_STATUS_OK;
 
 	if (recurse) {
-		attribute |= aDIR;
+		attribute |= FILE_ATTRIBUTE_DIRECTORY;
 	}
 
 	abort_mget = false;
@@ -2306,12 +2307,12 @@
 		return NT_STATUS_NO_MEMORY;
 	}
 
-	if (finfo->mode & aDIR) {
+	if (finfo->mode & FILE_ATTRIBUTE_DIRECTORY) {
 		TALLOC_FREE(mask);
 		return NT_STATUS_OK;
 	}
 
-	status = cli_unlink(cli_state, mask, aSYSTEM | aHIDDEN);
+	status = cli_unlink(cli_state, mask, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 	if (!NT_STATUS_IS_OK(status)) {
 		d_printf("%s deleting remote file %s\n",
 			 nt_errstr(status), mask);
@@ -2330,10 +2331,10 @@
 	char *mask = NULL;
 	char *buf = NULL;
 	NTSTATUS status = NT_STATUS_OK;
-	uint16 attribute = aSYSTEM | aHIDDEN;
+	uint16 attribute = FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN;
 
 	if (recurse) {
-		attribute |= aDIR;
+		attribute |= FILE_ATTRIBUTE_DIRECTORY;
 	}
 
 	mask = talloc_strdup(ctx, client_get_cur_dir());
@@ -4516,7 +4517,7 @@
 		return NT_STATUS_OK;
 	}
 
-	if ((info->dirmask[0] == 0) && !(f->mode & aDIR))
+	if ((info->dirmask[0] == 0) && !(f->mode & FILE_ATTRIBUTE_DIRECTORY))
 		info->matches[info->count] = SMB_STRDUP(f->name);
 	else {
 		TALLOC_CTX *ctx = talloc_stackframe();
@@ -4532,7 +4533,7 @@
 			TALLOC_FREE(ctx);
 			return NT_STATUS_NO_MEMORY;
 		}
-		if (f->mode & aDIR) {
+		if (f->mode & FILE_ATTRIBUTE_DIRECTORY) {
 			tmp = talloc_asprintf_append(tmp, "%s",
 						     CLI_DIRSEP_STR);
 		}
@@ -4546,7 +4547,7 @@
 	if (info->matches[info->count] == NULL) {
 		return NT_STATUS_OK;
 	}
-	if (f->mode & aDIR) {
+	if (f->mode & FILE_ATTRIBUTE_DIRECTORY) {
 		smb_readline_ca_char(0);
 	}
 	if (info->count == 1) {
@@ -4629,7 +4630,7 @@
 	if (!cli_resolve_path(ctx, "", auth_info, cli, dirmask, &targetcli, &targetpath)) {
 		goto cleanup;
 	}
-	status = cli_list(targetcli, targetpath, aDIR | aSYSTEM | aHIDDEN,
+	status = cli_list(targetcli, targetpath, FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN,
 			  completion_remote_filter, (void *)&info);
 	if (!NT_STATUS_IS_OK(status)) {
 		goto cleanup;

Modified: branches/samba/experimental/source3/client/client_proto.h
===================================================================
--- branches/samba/experimental/source3/client/client_proto.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/client/client_proto.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -23,6 +23,8 @@
 #ifndef _CLIENT_PROTO_H_
 #define _CLIENT_PROTO_H_
 
+struct cli_state;
+struct file_info;
 
 /* The following definitions come from client/client.c  */
 

Modified: branches/samba/experimental/source3/client/clitar.c
===================================================================
--- branches/samba/experimental/source3/client/clitar.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/client/clitar.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -38,6 +38,7 @@
 #include "system/filesys.h"
 #include "clitar.h"
 #include "client/client_proto.h"
+#include "libsmb/libsmb.h"
 
 static int clipfind(char **aret, int ret, char *tok);
 
@@ -70,7 +71,7 @@
 #define ATTRSET 1
 #define ATTRRESET 0
 
-static uint16 attribute = aDIR | aSYSTEM | aHIDDEN;
+static uint16 attribute = FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN;
 
 #ifndef CLIENT_TIMEOUT
 #define CLIENT_TIMEOUT (30*1000)
@@ -294,7 +295,7 @@
 
 	if ((unoct(hb->dbuf.mode, sizeof(hb->dbuf.mode)) & S_IFDIR) ||
 				(*(finfo->name+strlen(finfo->name)-1) == '\\')) {
-		finfo->mode=aDIR;
+		finfo->mode=FILE_ATTRIBUTE_DIRECTORY;
 	} else {
 		finfo->mode=0; /* we don't care about mode at the moment, we'll
 				* just make it a regular file */
@@ -686,13 +687,13 @@
 
 	DEBUG(3,("file %s attrib 0x%X\n",finfo.name,finfo.mode));
 
-	if (tar_inc && !(finfo.mode & aARCH)) {
+	if (tar_inc && !(finfo.mode & FILE_ATTRIBUTE_ARCHIVE)) {
 		DEBUG(4, ("skipping %s - archive bit not set\n", finfo.name));
 		shallitime=0;
-	} else if (!tar_system && (finfo.mode & aSYSTEM)) {
+	} else if (!tar_system && (finfo.mode & FILE_ATTRIBUTE_SYSTEM)) {
 		DEBUG(4, ("skipping %s - system bit is set\n", finfo.name));
 		shallitime=0;
-	} else if (!tar_hidden && (finfo.mode & aHIDDEN)) {
+	} else if (!tar_hidden && (finfo.mode & FILE_ATTRIBUTE_HIDDEN)) {
 		DEBUG(4, ("skipping %s - hidden bit is set\n", finfo.name));
 		shallitime=0;
 	} else {
@@ -784,7 +785,7 @@
 
 		/* if shallitime is true then we didn't skip */
 		if (tar_reset && !dry_run)
-			(void) do_setrattr(finfo.name, aARCH, ATTRRESET);
+			(void) do_setrattr(finfo.name, FILE_ATTRIBUTE_ARCHIVE, ATTRRESET);
 
 		clock_gettime_mono(&tp_end);
 		this_time = (tp_end.tv_sec - tp_start.tv_sec)*1000 + (tp_end.tv_nsec - tp_start.tv_nsec)/1000000;
@@ -852,7 +853,7 @@
 		TALLOC_FREE(exclaim);
 	}
 
-	if (finfo->mode & aDIR) {
+	if (finfo->mode & FILE_ATTRIBUTE_DIRECTORY) {
 		char *saved_curdir = NULL;
 		char *new_cd = NULL;
 		char *mtar_mask = NULL;
@@ -1045,8 +1046,12 @@
 		dsize = MIN(dsize, rsize);  /* Should be only what is left */
 		DEBUG(5, ("writing %i bytes, bpos = %i ...\n", dsize, bpos));
 
-		if (cli_write(cli, fnum, 0, buffer_p + bpos, pos, dsize) != dsize) {
-			DEBUG(0, ("Error writing remote file\n"));
+		status = cli_writeall(cli, fnum, 0,
+				      (uint8_t *)(buffer_p + bpos), pos,
+				      dsize, NULL);
+		if (!NT_STATUS_IS_OK(status)) {
+			DEBUG(0, ("Error writing remote file: %s\n",
+				  nt_errstr(status)));
 			return 0;
 		}
 
@@ -1401,16 +1406,16 @@
 					direct=0;
 					break;
 				case 'r':
-					attra[direct]|=aRONLY;
+					attra[direct]|=FILE_ATTRIBUTE_READONLY;
 					break;
 				case 'h':
-					attra[direct]|=aHIDDEN;
+					attra[direct]|=FILE_ATTRIBUTE_HIDDEN;
 					break;
 				case 's':
-					attra[direct]|=aSYSTEM;
+					attra[direct]|=FILE_ATTRIBUTE_SYSTEM;
 					break;
 				case 'a':
-					attra[direct]|=aARCH;
+					attra[direct]|=FILE_ATTRIBUTE_ARCHIVE;
 					break;
 				default:
 					DEBUG(0, ("setmode <filename> <perm=[+|-]rsha>\n"));

Modified: branches/samba/experimental/source3/client/smbspool.c
===================================================================
--- branches/samba/experimental/source3/client/smbspool.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/client/smbspool.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -25,6 +25,7 @@
 #include "includes.h"
 #include "system/filesys.h"
 #include "system/passwd.h"
+#include "libsmb/libsmb.h"
 
 /*
  * Starting with CUPS 1.3, Kerberos support is provided by cupsd including
@@ -595,14 +596,19 @@
 	tbytes = 0;
 
 	while ((nbytes = fread(buffer, 1, sizeof(buffer), fp)) > 0) {
-		if (cli_write(cli, fnum, 0, buffer, tbytes, nbytes) != nbytes) {
-			int status = get_exit_code(cli, cli_nt_error(cli));
+		NTSTATUS status;
 
-			fprintf(stderr, "ERROR: Error writing spool: %s\n", cli_errstr(cli));
-			fprintf(stderr, "DEBUG: Returning status %d...\n", status);
+		status = cli_writeall(cli, fnum, 0, (uint8_t *)buffer,
+				      tbytes, nbytes, NULL);
+		if (!NT_STATUS_IS_OK(status)) {
+			int ret = get_exit_code(cli, status);
+			fprintf(stderr, "ERROR: Error writing spool: %s\n",
+				nt_errstr(status));
+			fprintf(stderr, "DEBUG: Returning status %d...\n",
+				ret);
 			cli_close(cli, fnum);
 
-			return (status);
+			return (ret);
 		}
 		tbytes += nbytes;
 	}

Modified: branches/samba/experimental/source3/configure
===================================================================
--- branches/samba/experimental/source3/configure	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/configure	2011-05-19 17:46:26 UTC (rev 3779)
@@ -645,6 +645,7 @@
 SMBLDAP
 FAKE_KASERVER_OBJ
 SMB_FAM_LIBS
+LIBADDNS_FULLVER
 LIBADDNS_SOVER
 UNINSTALL_LIBADDNS
 INSTALL_LIBADDNS
@@ -654,6 +655,7 @@
 LIBADDNS_SHARED
 LIBADDNS_STATIC_TARGET
 LIBADDNS_SHARED_TARGET
+LIBSMBSHAREMODES_FULLVER
 LIBSMBSHAREMODES_SOVER
 UNINSTALL_LIBSMBSHAREMODES
 INSTALL_LIBSMBSHAREMODES
@@ -663,6 +665,7 @@
 LIBSMBSHAREMODES_SHARED
 LIBSMBSHAREMODES_STATIC_TARGET
 LIBSMBSHAREMODES_SHARED_TARGET
+LIBSMBCLIENT_FULLVER
 LIBSMBCLIENT_SOVER
 UNINSTALL_LIBSMBCLIENT
 INSTALL_LIBSMBCLIENT
@@ -672,6 +675,7 @@
 LIBSMBCLIENT_SHARED
 LIBSMBCLIENT_STATIC_TARGET
 LIBSMBCLIENT_SHARED_TARGET
+LIBNETAPI_FULLVER
 LIBNETAPI_SOVER
 UNINSTALL_LIBNETAPI
 INSTALL_LIBNETAPI
@@ -686,6 +690,7 @@
 TDBRESTORE
 TDBDUMP
 TDBBACKUP
+LIBTDB_FULLVER
 LIBTDB_SOVER
 UNINSTALL_LIBTDB
 INSTALL_LIBTDB
@@ -704,6 +709,7 @@
 LIBTDB_CFLAGS
 TALLOCTORT
 LIBTALLOC_OBJ0
+LIBTALLOC_FULLVER
 LIBTALLOC_SOVER
 UNINSTALL_LIBTALLOC
 INSTALL_LIBTALLOC
@@ -780,6 +786,7 @@
 LIBSAMBAUTIL_SHARED
 LIBWBCLIENT_LIBS
 LIBWBCLIENT
+LIBWBCLIENT_FULLVER
 LIBWBCLIENT_SOVER
 LIBWBCLIENT_STATIC
 LIBWBCLIENT_STATIC_TARGET
@@ -931,6 +938,7 @@
 enable_nss_wrapper
 enable_swat
 with_profiling_data
+enable_smbtorture4
 enable_cups
 enable_iprint
 with_readline
@@ -1627,6 +1635,7 @@
   --enable-socket-wrapper Turn on socket wrapper library (default=no)
   --enable-nss-wrapper    Turn on nss wrapper library (default=no)
   --enable-swat           Build the SWAT tool (default=yes)
+  --enable-smbtorture4    Enable building smbtorture4 (default=auto)
   --enable-cups           Turn on CUPS support (default=auto)
   --enable-iprint         Turn on iPrint support (default=yes if cups is yes)
   --enable-static=PKGS    build static libraries default=no
@@ -6705,6 +6714,7 @@
 
 
 
+
 # compile with optimization and without debugging by default, but
 # allow people to set their own preference.
 # do this here since AC_CACHE_CHECK apparently sets the CFLAGS to "-g -O2"
@@ -6952,9 +6962,19 @@
 fi
 
 
-smbtorture4_possible=yes
+# Check whether --enable-smbtorture4 was given.
+if test "${enable_smbtorture4+set}" = set; then :
+  enableval=$enable_smbtorture4;
+fi
 
 
+if test x$enable_smbtorture4 != xno; then
+	smbtorture4_possible=yes
+else
+	smbtorture4_possible=no
+fi
+
+
 for ac_prog in gawk mawk nawk awk
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
@@ -8473,6 +8493,8 @@
 $as_echo "no large file support" >&6; }
 				;;
 			5.*)
+			LDFLAGS="$LDFLAGS -lthread"
+			CPPFLAGS="$CPPFLAGS -D_REENTRANT"
 			{ $as_echo "$as_me:${as_lineno-$LINENO}: result: enabling large file support" >&5
 $as_echo "enabling large file support" >&6; }
 			if test "$ac_cv_c_compiler_gnu" = yes; then
@@ -8481,15 +8503,13 @@
 				rm -fr conftest.c
 				case "$ac_cv_gcc_compiler_version_number" in
 					*"gcc version 2.6"*|*"gcc version 2.7"*)
-						CPPFLAGS="$CPPFLAGS -D_LARGEFILE64_SOURCE -D_REENTRANT"
-						LDFLAGS="$LDFLAGS -lthread"
+						CPPFLAGS="$CPPFLAGS -D_LARGEFILE64_SOURCE"
 
 $as_echo "#define _LARGEFILE64_SOURCE 1" >>confdefs.h
 
 						;;
 					*)
-						CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE -D_REENTRANT -D_FILE_OFFSET_BITS=64"
-						LDFLAGS="$LDFLAGS -lthread"
+						CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
 
 $as_echo "#define _LARGEFILE64_SOURCE 1" >>confdefs.h
 
@@ -8499,8 +8519,7 @@
 						;;
 				esac
 			else
-				CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE -D_REENTRANT -D_FILE_OFFSET_BITS=64"
-				LDFLAGS="$LDFLAGS -lthread"
+				CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
 
 $as_echo "#define _LARGEFILE64_SOURCE 1" >>confdefs.h
 
@@ -16596,6 +16615,7 @@
 $as_echo "#define HAVE_GPFS 1" >>confdefs.h
 
     default_shared_modules="$default_shared_modules vfs_gpfs"
+    default_shared_modules="$default_shared_modules vfs_gpfs_hsm_notify"
 fi
 
 #############################################
@@ -20119,7 +20139,10 @@
 
 fi
 
-	LINK_LIBTALLOC=STATIC
+	if test x"$USESHARED" == x"no" ; then
+		LINK_LIBTALLOC=STATIC
+	fi
+	LIBTALLOCVERSION=`grep ^VERSION ${tallocdir}/wscript | sed -e "s/'//g" -e 's/.* //'`
 
 
 
@@ -20135,6 +20158,7 @@
 UNINSTALL_LIBTALLOC=
 
 LIBTALLOC_SOVER=2
+LIBTALLOC_FULLVER=${LIBTALLOCVERSION}
 
 
 
@@ -20146,6 +20170,7 @@
 
 
 
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build the libtalloc shared library" >&5
 $as_echo_n "checking whether to build the libtalloc shared library... " >&6; }
 
@@ -20226,9 +20251,9 @@
 
 # Check whether --enable-external_libtdb was given.
 if test "${enable_external_libtdb+set}" = set; then :
-  enableval=$enable_external_libtdb;  enable_external_libtalloc=$enableval
+  enableval=$enable_external_libtdb;  enable_external_libtdb=$enableval
 else
-   enable_external_libtalloc=auto
+   enable_external_libtdb=auto
 fi
 
 
@@ -20451,7 +20476,10 @@
 
 fi
 
-	LINK_LIBTDB=STATIC
+	if test x"$USESHARED" == x"no" ; then
+		LINK_LIBTDB=STATIC
+	fi
+	LIBTDBVERSION=`grep ^VERSION ${tdbdir}/wscript | sed -e "s/'//g" -e 's/.* //'`
 
 
 
@@ -20467,6 +20495,7 @@
 UNINSTALL_LIBTDB=
 
 LIBTDB_SOVER=1
+LIBTDB_FULLVER=${LIBTDBVERSION}
 
 
 
@@ -20478,6 +20507,7 @@
 
 
 
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build the libtdb shared library" >&5
 $as_echo_n "checking whether to build the libtdb shared library... " >&6; }
 
@@ -20604,6 +20634,7 @@
 UNINSTALL_LIBNETAPI=
 
 LIBNETAPI_SOVER=0
+LIBNETAPI_FULLVER=$LIBNETAPI_SOVER
 
 
 
@@ -20615,6 +20646,7 @@
 
 
 
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build the libnetapi shared library" >&5
 $as_echo_n "checking whether to build the libnetapi shared library... " >&6; }
 
@@ -20695,6 +20727,7 @@
 UNINSTALL_LIBSMBCLIENT=
 
 LIBSMBCLIENT_SOVER=0
+LIBSMBCLIENT_FULLVER=$LIBSMBCLIENT_SOVER
 
 
 
@@ -20706,6 +20739,7 @@
 
 
 
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build the libsmbclient shared library" >&5
 $as_echo_n "checking whether to build the libsmbclient shared library... " >&6; }
 
@@ -20786,6 +20820,7 @@
 UNINSTALL_LIBSMBSHAREMODES=
 
 LIBSMBSHAREMODES_SOVER=0
+LIBSMBSHAREMODES_FULLVER=$LIBSMBSHAREMODES_SOVER
 
 
 
@@ -20797,6 +20832,7 @@
 
 
 
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build the libsmbsharemodes shared library" >&5
 $as_echo_n "checking whether to build the libsmbsharemodes shared library... " >&6; }
 
@@ -20877,6 +20913,7 @@
 UNINSTALL_LIBADDNS=
 
 LIBADDNS_SOVER=0
+LIBADDNS_FULLVER=$LIBADDNS_SOVER
 
 
 
@@ -20888,6 +20925,7 @@
 
 
 
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build the libaddns shared library" >&5
 $as_echo_n "checking whether to build the libaddns shared library... " >&6; }
 
@@ -29986,6 +30024,73 @@
 
 fi
 
+
+    ac_check_func_ext_save_LIBS=$LIBS
+    LIBS="$KRB5_LIBS $LIBS"
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gss_get_name_attribute" >&5
+$as_echo_n "checking for gss_get_name_attribute... " >&6; }
+if test "${ac_cv_func_ext_gss_get_name_attribute+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+/* Define gss_get_name_attribute to an innocuous variant, in case <limits.h> declares gss_get_name_attribute.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define gss_get_name_attribute innocuous_gss_get_name_attribute
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char gss_get_name_attribute (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef gss_get_name_attribute
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char gss_get_name_attribute ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_gss_get_name_attribute || defined __stub___gss_get_name_attribute
+choke me
+#endif
+
+int
+main ()
+{
+return gss_get_name_attribute ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_func_ext_gss_get_name_attribute=yes
+else
+  ac_cv_func_ext_gss_get_name_attribute=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_ext_gss_get_name_attribute" >&5
+$as_echo "$ac_cv_func_ext_gss_get_name_attribute" >&6; }
+    LIBS=$ac_check_func_ext_save_LIBS
+    if test $ac_cv_func_ext_gss_get_name_attribute = yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_GSS_GET_NAME_ATTRIBUTE 1
+_ACEOF
+
+fi
+
   # MIT krb5 1.8 does not expose this call (yet)
   ac_fn_c_check_decl "$LINENO" "krb5_get_credentials_for_user" "ac_cv_have_decl_krb5_get_credentials_for_user" "#include <krb5.h>
 "
@@ -35664,6 +35769,7 @@
 	LIBWBCLIENT_SHARED_TARGET=bin/libwbclient.$SHLIBEXT
 	LIBWBCLIENT_STATIC_TARGET=bin/libwbclient.a
 	LIBWBCLIENT_SOVER=0
+	LIBWBCLIENT_FULLVER=0
 	if test $BLDSHARED = true -a x"$HAVE_WINBIND" = x"yes" -a x"$BUILD_LIBWBCLIENT_SHARED" = x"yes"; then
 		NSS_MODULES="${WINBIND_NSS} ${WINBIND_WINS_NSS}"
 		## Only worry about libwbclient if we have shared
@@ -38887,6 +38993,41 @@
 	fi
 
 
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to build vfs_gpfs_hsm_notify" >&5
+$as_echo_n "checking how to build vfs_gpfs_hsm_notify... " >&6; }
+	if test "$MODULE_vfs_gpfs_hsm_notify"; then
+		DEST=$MODULE_vfs_gpfs_hsm_notify
+	elif test "$MODULE_vfs" -a "$MODULE_DEFAULT_vfs_gpfs_hsm_notify"; then
+		DEST=$MODULE_vfs
+	else
+		DEST=$MODULE_DEFAULT_vfs_gpfs_hsm_notify
+	fi
+
+	if test x"$DEST" = xSHARED; then
+
+$as_echo "#define vfs_gpfs_hsm_notify_init init_samba_module" >>confdefs.h
+
+		VFS_MODULES="$VFS_MODULES "bin/gpfs_hsm_notify.$SHLIBEXT""
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: shared" >&5
+$as_echo "shared" >&6; }
+
+		string_shared_modules="$string_shared_modules vfs_gpfs_hsm_notify"
+	elif test x"$DEST" = xSTATIC; then
+		init_static_modules_vfs="$init_static_modules_vfs  vfs_gpfs_hsm_notify_init();"
+		decl_static_modules_vfs="$decl_static_modules_vfs extern NTSTATUS vfs_gpfs_hsm_notify_init(void);"
+		string_static_modules="$string_static_modules vfs_gpfs_hsm_notify"
+		VFS_STATIC="$VFS_STATIC \$(VFS_GPFS_PREFETCH_OBJ)"
+
+
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: static" >&5
+$as_echo "static" >&6; }
+	else
+	    string_ignored_modules="$string_ignored_modules vfs_gpfs_hsm_notify"
+		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: not" >&5
+$as_echo "not" >&6; }
+	fi
+
+
 	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to build vfs_readahead" >&5
 $as_echo_n "checking how to build vfs_readahead... " >&6; }
 	if test "$MODULE_vfs_readahead"; then

Modified: branches/samba/experimental/source3/configure.in
===================================================================
--- branches/samba/experimental/source3/configure.in	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/configure.in	2011-05-19 17:46:26 UTC (rev 3779)
@@ -73,6 +73,7 @@
 AC_SUBST(LIBWBCLIENT_STATIC_TARGET)
 AC_SUBST(LIBWBCLIENT_STATIC)
 AC_SUBST(LIBWBCLIENT_SOVER)
+AC_SUBST(LIBWBCLIENT_FULLVER)
 AC_SUBST(LIBWBCLIENT)
 AC_SUBST(LIBWBCLIENT_LIBS)
 
@@ -196,8 +197,15 @@
 )
 
 dnl Checks for programs.
-smbtorture4_possible=yes
+AC_ARG_ENABLE(smbtorture4,
+	[AS_HELP_STRING([--enable-smbtorture4], [Enable building smbtorture4 (default=auto)])])
 
+if test x$enable_smbtorture4 != xno; then
+	smbtorture4_possible=yes
+else
+	smbtorture4_possible=no
+fi
+
 AC_PROG_INSTALL
 AC_PROG_AWK
 # Check for GNU make
@@ -518,6 +526,8 @@
 	  			AC_MSG_RESULT([no large file support])
 				;;
 			5.*)
+			LDFLAGS="$LDFLAGS -lthread"
+			CPPFLAGS="$CPPFLAGS -D_REENTRANT"
 			AC_MSG_RESULT([enabling large file support])
 			if test "$ac_cv_prog_gcc" = yes; then
 				${CC-cc} -v >conftest.c 2>&1
@@ -525,20 +535,17 @@
 				rm -fr conftest.c
 				case "$ac_cv_gcc_compiler_version_number" in
 					*"gcc version 2.6"*|*"gcc version 2.7"*)
-						CPPFLAGS="$CPPFLAGS -D_LARGEFILE64_SOURCE -D_REENTRANT"
-						LDFLAGS="$LDFLAGS -lthread"
+						CPPFLAGS="$CPPFLAGS -D_LARGEFILE64_SOURCE"
 						AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
 						;;
 					*)
-						CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE -D_REENTRANT -D_FILE_OFFSET_BITS=64"
-						LDFLAGS="$LDFLAGS -lthread"
+						CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
 						AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
 						AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
 						;;
 				esac
 			else
-				CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE -D_REENTRANT -D_FILE_OFFSET_BITS=64"
-				LDFLAGS="$LDFLAGS -lthread"
+				CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
 				AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
 				AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
 			fi
@@ -1118,6 +1125,7 @@
 if test x"$ac_cv_header_gpfs_gpl_h" = x"yes"; then
     AC_DEFINE(HAVE_GPFS,1,[Whether GPFS GPL headers are available])
     default_shared_modules="$default_shared_modules vfs_gpfs"
+    default_shared_modules="$default_shared_modules vfs_gpfs_hsm_notify"
 fi
 
 #############################################
@@ -2072,8 +2080,11 @@
 #  TODO: for talloc and tdb (at least), these should
 #  be extracted from their respective source directories
 #
-AC_ARG_ENABLE(external_libtalloc, [AS_HELP_STRING([--enable-external-libtalloc], [Enable external talloc [default=auto]])],
-[ enable_external_libtalloc=$enableval ], [ enable_external_libtalloc=auto ])
+AC_ARG_ENABLE(external_libtalloc,
+	[AS_HELP_STRING([--enable-external-libtalloc],
+		[Enable external talloc [default=auto]])],
+	[ enable_external_libtalloc=$enableval ],
+	[ enable_external_libtalloc=auto ])
 
 if test "x$enable_external_libtalloc" != xno
 then
@@ -2090,8 +2101,11 @@
 if test "x$enable_external_libtalloc" = xno
 then
 	m4_include(../lib/talloc/libtalloc.m4)
-	LINK_LIBTALLOC=STATIC
-	SMB_LIBRARY(talloc, 2)
+	if test x"$USESHARED" == x"no" ; then
+		LINK_LIBTALLOC=STATIC
+	fi
+	LIBTALLOCVERSION=`grep ^VERSION ${tallocdir}/wscript | sed -e "s/'//g" -e 's/.* //'`
+	SMB_LIBRARY(talloc, 2, ${LIBTALLOCVERSION})
 	LIBTALLOC_OBJ0=""
 	for obj in ${TALLOC_OBJ}; do
 		LIBTALLOC_OBJ0="${LIBTALLOC_OBJ0} ${tallocdir}/${obj}"
@@ -2108,8 +2122,8 @@
 AC_ARG_ENABLE(external_libtdb,
 	[AS_HELP_STRING([--enable-external-libtdb],
 		[Enable external tdb [default=auto]])],
-		[ enable_external_libtalloc=$enableval ],
-		[ enable_external_libtalloc=auto ])
+		[ enable_external_libtdb=$enableval ],
+		[ enable_external_libtdb=auto ])
 
 if test "x$enable_external_libtdb" != xno
 then
@@ -2128,8 +2142,11 @@
 if test "x$enable_external_libtdb" = xno
 then
 	m4_include(../lib/tdb/libtdb.m4)
-	LINK_LIBTDB=STATIC
-	SMB_LIBRARY(tdb, 1)
+	if test x"$USESHARED" == x"no" ; then
+		LINK_LIBTDB=STATIC
+	fi
+	LIBTDBVERSION=`grep ^VERSION ${tdbdir}/wscript | sed -e "s/'//g" -e 's/.* //'`
+	SMB_LIBRARY(tdb, 1, ${LIBTDBVERSION})
 	LIBTDB_OBJ0=""
 	LIBTDB_LIBS="$LIBTDB_LIBS $TDB_DEPS"
 	for obj in ${TDB_OBJ}; do
@@ -2164,7 +2181,7 @@
 SMB_LIBRARY(netapi, 0)
 SMB_LIBRARY(smbclient, 0)
 SMB_LIBRARY(smbsharemodes, 0)
-SMB_LIBRARY(addns, 0, no, [undefined API])
+SMB_LIBRARY(addns, 0, [], no, [undefined API])
 
 
 
@@ -3860,6 +3877,7 @@
   AC_CHECK_FUNC_EXT(krb5_get_credentials_for_user, $KRB5_LIBS)
   AC_CHECK_FUNC_EXT(krb5_get_host_realm, $KRB5_LIBS)
   AC_CHECK_FUNC_EXT(krb5_free_host_realm, $KRB5_LIBS)
+  AC_CHECK_FUNC_EXT(gss_get_name_attribute, $KRB5_LIBS)
 
   # MIT krb5 1.8 does not expose this call (yet)
   AC_CHECK_DECLS(krb5_get_credentials_for_user, [], [], [#include <krb5.h>])
@@ -6363,6 +6381,7 @@
 	LIBWBCLIENT_SHARED_TARGET=bin/libwbclient.$SHLIBEXT
 	LIBWBCLIENT_STATIC_TARGET=bin/libwbclient.a
 	LIBWBCLIENT_SOVER=0
+	LIBWBCLIENT_FULLVER=0
 	if test $BLDSHARED = true -a x"$HAVE_WINBIND" = x"yes" -a x"$BUILD_LIBWBCLIENT_SHARED" = x"yes"; then
 		NSS_MODULES="${WINBIND_NSS} ${WINBIND_WINS_NSS}"
 		## Only worry about libwbclient if we have shared
@@ -6871,6 +6890,7 @@
 SMB_MODULE(vfs_prealloc, \$(VFS_PREALLOC_OBJ), "bin/prealloc.$SHLIBEXT", VFS)
 SMB_MODULE(vfs_commit, \$(VFS_COMMIT_OBJ), "bin/commit.$SHLIBEXT", VFS)
 SMB_MODULE(vfs_gpfs, \$(VFS_GPFS_OBJ), "bin/gpfs.$SHLIBEXT", VFS)
+SMB_MODULE(vfs_gpfs_hsm_notify, \$(VFS_GPFS_PREFETCH_OBJ), "bin/gpfs_hsm_notify.$SHLIBEXT", VFS)
 SMB_MODULE(vfs_readahead, \$(VFS_READAHEAD_OBJ), "bin/readahead.$SHLIBEXT", VFS)
 SMB_MODULE(vfs_tsmsm, \$(VFS_TSMSM_OBJ), "bin/tsmsm.$SHLIBEXT", VFS)
 SMB_MODULE(vfs_fileid, \$(VFS_FILEID_OBJ), "bin/fileid.$SHLIBEXT", VFS)

Modified: branches/samba/experimental/source3/dynconfig.c
===================================================================
--- branches/samba/experimental/source3/dynconfig.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/dynconfig.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -83,3 +83,4 @@
 DEFINE_DYN_CONFIG_PARAM(NCALRPCDIR)
 DEFINE_DYN_CONFIG_PARAM(SMB_PASSWD_FILE)
 DEFINE_DYN_CONFIG_PARAM(PRIVATE_DIR)
+DEFINE_DYN_CONFIG_PARAM(LOCALEDIR)

Modified: branches/samba/experimental/source3/groupdb/mapping.c
===================================================================
--- branches/samba/experimental/source3/groupdb/mapping.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/groupdb/mapping.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -26,6 +26,7 @@
 #include "groupdb/mapping.h"
 #include "../libcli/security/security.h"
 #include "lib/winbind_util.h"
+#include <tdb.h>
 
 static const struct mapping_backend *backend;
 

Modified: branches/samba/experimental/source3/groupdb/mapping_tdb.c
===================================================================
--- branches/samba/experimental/source3/groupdb/mapping_tdb.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/groupdb/mapping_tdb.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -25,6 +25,7 @@
 #include "passdb.h"
 #include "groupdb/mapping.h"
 #include "dbwrap.h"
+#include "util_tdb.h"
 #include "../libcli/security/security.h"
 
 static struct db_context *db; /* used for driver files */
@@ -900,10 +901,10 @@
 				}
 			} else if (StrCaseCmp(name, "ntname") == 0) {
 				strlcpy(map.nt_name, val,
-					sizeof(map.nt_name) -1);
+					sizeof(map.nt_name));
 			} else if (StrCaseCmp(name, "comment") == 0) {
 				strlcpy(map.comment, val,
-					sizeof(map.comment) -1);
+					sizeof(map.comment));
 			} else if (StrCaseCmp(name, "member") == 0) {
 				if (!string_to_sid(&members[j], val)) {
 					errno = EIO;

Modified: branches/samba/experimental/source3/include/ads.h
===================================================================
--- branches/samba/experimental/source3/include/ads.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/include/ads.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -6,6 +6,7 @@
   basically this is a wrapper around ldap
 */
 
+#include "libads/ads_status.h"
 #include "smb_ldap.h"
 
 struct ads_struct;

Modified: branches/samba/experimental/source3/include/async_smb.h
===================================================================
--- branches/samba/experimental/source3/include/async_smb.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/include/async_smb.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -20,7 +20,7 @@
 #ifndef __ASYNC_SMB_H__
 #define __ASYNC_SMB_H__
 
-#include "includes.h"
+struct cli_state;
 
 /*
  * Fetch an error out of a NBT packet

Modified: branches/samba/experimental/source3/include/client.h
===================================================================
--- branches/samba/experimental/source3/include/client.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/include/client.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -71,7 +71,7 @@
 	int rap_error;
 	int privileges;
 
-	fstring desthost;
+	char *desthost;
 
 	/* The credentials used to open the cli_state connection. */
 	char *domain;
@@ -83,12 +83,12 @@
 	 * ones returned by the server if
 	 * the protocol > NT1.
 	 */
-	fstring server_type;
-	fstring server_os;
-	fstring server_domain;
+	char *server_type;
+	char *server_os;
+	char *server_domain;
 
-	fstring share;
-	fstring dev;
+	char *share;
+	char *dev;
 	struct nmb_name called;
 	struct nmb_name calling;
 	struct sockaddr_storage dest_ss;

Modified: branches/samba/experimental/source3/include/config.h.in
===================================================================
--- branches/samba/experimental/source3/include/config.h.in	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/include/config.h.in	2011-05-19 17:46:26 UTC (rev 3779)
@@ -846,6 +846,9 @@
 /* Define to 1 if you have the `gss_display_status' function. */
 #undef HAVE_GSS_DISPLAY_STATUS
 
+/* Define to 1 if you have the `gss_get_name_attribute' function. */
+#undef HAVE_GSS_GET_NAME_ATTRIBUTE
+
 /* Define to 1 if you have the `gss_wrap_iov' function. */
 #undef HAVE_GSS_WRAP_IOV
 
@@ -3418,6 +3421,9 @@
 /* Whether to build vfs_full_audit as shared module */
 #undef vfs_full_audit_init
 
+/* Whether to build vfs_gpfs_hsm_notify as shared module */
+#undef vfs_gpfs_hsm_notify_init
+
 /* Whether to build vfs_gpfs as shared module */
 #undef vfs_gpfs_init
 

Modified: branches/samba/experimental/source3/include/ctdbd_conn.h
===================================================================
--- branches/samba/experimental/source3/include/ctdbd_conn.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/include/ctdbd_conn.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -20,6 +20,8 @@
 #ifndef _CTDBD_CONN_H
 #define _CTDBD_CONN_H
 
+#include <tdb.h>
+
 struct ctdbd_connection;
 struct messaging_context;
 struct messaging_rec;

Modified: branches/samba/experimental/source3/include/dbwrap.h
===================================================================
--- branches/samba/experimental/source3/include/dbwrap.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/include/dbwrap.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -20,6 +20,8 @@
 #ifndef __DBWRAP_H__
 #define __DBWRAP_H__
 
+#include <tdb.h>
+
 struct db_record {
 	TDB_DATA key, value;
 	NTSTATUS (*store)(struct db_record *rec, TDB_DATA data, int flag);

Modified: branches/samba/experimental/source3/include/dynconfig.h
===================================================================
--- branches/samba/experimental/source3/include/dynconfig.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/include/dynconfig.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -94,3 +94,7 @@
 const char *get_dyn_PRIVATE_DIR(void);
 const char *set_dyn_PRIVATE_DIR(const char *newpath);
 bool is_default_dyn_PRIVATE_DIR(void);
+
+const char *get_dyn_LOCALEDIR(void);
+const char *set_dyn_LOCALEDIR(const char *newpath);
+bool is_default_dyn_LOCALEDIR(void);

Modified: branches/samba/experimental/source3/include/includes.h
===================================================================
--- branches/samba/experimental/source3/include/includes.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/include/includes.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -173,10 +173,6 @@
 #include <aio.h>
 #endif
 
-#ifdef WITH_MADVISE_PROTECTED
-#include <sys/mman.h>
-#endif
-
 /* Special macros that are no-ops except when run under Valgrind on
  * x86.  They've moved a little bit from valgrind 1.0.4 to 1.9.4 */
 #if HAVE_VALGRIND_MEMCHECK_H
@@ -514,22 +510,17 @@
 #include "../lib/util/attr.h"
 #include "../lib/util/tsort.h"
 #include "../lib/util/dlinklist.h"
-#include <tdb.h>
-#include "util_tdb.h"
 
 #include <talloc.h>
 
 #include "event.h"
-#include "../lib/util/tevent_unix.h"
-#include "../lib/util/tevent_ntstatus.h"
-#include "../lib/tsocket/tsocket.h"
 
 #include "../lib/util/data_blob.h"
 #include "../lib/util/time.h"
 #include "../lib/util/debug.h"
 #include "../lib/util/debug_s3.h"
 
-#include "libads/ads_status.h"
+#include "../libcli/util/ntstatus.h"
 #include "../libcli/util/error.h"
 #include "../lib/util/charset/charset.h"
 #include "dynconfig.h"
@@ -538,29 +529,11 @@
 #include "smb.h"
 #include "../lib/util/byteorder.h"
 
-#include "client.h"
-
 #include "module.h"
 #include "../lib/util/talloc_stack.h"
 #include "../lib/util/smb_threads.h"
 #include "../lib/util/smb_threads_internal.h"
 
-/*
- * Reasons for cache flush.
- */
-
-enum flush_reason_enum {
-    SEEK_FLUSH,
-    READ_FLUSH,
-    WRITE_FLUSH,
-    READRAW_FLUSH,
-    OPLOCK_RELEASE_FLUSH,
-    CLOSE_FLUSH,
-    SYNC_FLUSH,
-    SIZECHANGE_FLUSH,
-    /* NUM_FLUSH_REASONS must remain the last value in the enumeration. */
-    NUM_FLUSH_REASONS};
-
 /***** prototypes *****/
 #ifndef NO_PROTO_H
 #include "proto.h"
@@ -605,15 +578,6 @@
 #endif
 
 
-#if HAVE_KERNEL_SHARE_MODES
-#ifndef LOCK_MAND 
-#define LOCK_MAND	32	/* This is a mandatory flock */
-#define LOCK_READ	64	/* ... Which allows concurrent read operations */
-#define LOCK_WRITE	128	/* ... Which allows concurrent write operations */
-#define LOCK_RW		192	/* ... Which allows concurrent read & write ops */
-#endif
-#endif
-
 #define MAX_SEC_CTX_DEPTH 8    /* Maximum number of security contexts */
 
 
@@ -694,11 +658,6 @@
 void exit_server_cleanly(const char *const reason) _NORETURN_;
 void exit_server_fault(void) _NORETURN_;
 
-#if defined(HAVE_IPV6)
-void in6_addr_to_sockaddr_storage(struct sockaddr_storage *ss,
-				  struct in6_addr ip);
-#endif
-
 /* samba3 doesn't use uwrap yet */
 #define uwrap_enabled() 0
 

Modified: branches/samba/experimental/source3/include/krb5_protos.h
===================================================================
--- branches/samba/experimental/source3/include/krb5_protos.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/include/krb5_protos.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -146,3 +146,9 @@
 			time_t *tgs_expire,
 			const char *impersonate_princ_s);
 
+/* The following definitions come from libsmb/clikrb5.c  */
+
+bool unwrap_edata_ntstatus(TALLOC_CTX *mem_ctx,
+			   DATA_BLOB *edata,
+			   DATA_BLOB *edata_out);
+bool unwrap_pac(TALLOC_CTX *mem_ctx, DATA_BLOB *auth_data, DATA_BLOB *unwrapped_pac_data);

Deleted: branches/samba/experimental/source3/include/localedir.h
===================================================================
--- branches/samba/experimental/source3/include/localedir.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/include/localedir.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -1,6 +0,0 @@
-#ifndef __LOCALEDIR_H__
-#define __LOCALEDIR_H__
-
-extern const char *dyn_LOCALEDIR;
-
-#endif

Modified: branches/samba/experimental/source3/include/nss_info.h
===================================================================
--- branches/samba/experimental/source3/include/nss_info.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/include/nss_info.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -95,5 +95,12 @@
 
 NTSTATUS nss_close( const char *parameters );
 
+/* The following definitions come from winbindd/nss_info.c  */
+
+
+/* The following definitions come from winbindd/nss_info_template.c  */
+
+NTSTATUS nss_info_template_init( void );
+
 #endif /* _IDMAP_NSS_H_ */
 

Modified: branches/samba/experimental/source3/include/nt_printing.h
===================================================================
--- branches/samba/experimental/source3/include/nt_printing.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/include/nt_printing.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -23,7 +23,7 @@
 #define NT_PRINTING_H_
 
 #include "client.h"
-#include "../librpc/gen_ndr/srv_spoolss.h"
+#include "../librpc/gen_ndr/spoolss.h"
 
 #ifndef SAMBA_PRINTER_PORT_NAME
 #define SAMBA_PRINTER_PORT_NAME "Samba Printer Port"
@@ -169,11 +169,11 @@
 bool delete_driver_files(const struct auth_serversupplied_info *server_info,
 			 const struct spoolss_DriverInfo8 *r);
 
-WERROR move_driver_to_download_area(struct pipes_struct *p,
+WERROR move_driver_to_download_area(struct auth_serversupplied_info *session_info,
 				    struct spoolss_AddDriverInfoCtr *r);
 
 WERROR clean_up_driver_struct(TALLOC_CTX *mem_ctx,
-			      struct pipes_struct *rpc_pipe,
+			      struct auth_serversupplied_info *session_info,
 			      struct spoolss_AddDriverInfoCtr *r);
 
 void map_printer_permissions(struct security_descriptor *sd);

Modified: branches/samba/experimental/source3/include/ntdomain.h
===================================================================
--- branches/samba/experimental/source3/include/ntdomain.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/include/ntdomain.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -97,20 +97,6 @@
 
 struct gse_context;
 
-/* auth state for all bind types. */
-
-struct pipe_auth_data {
-	enum dcerpc_AuthType auth_type;
-	enum dcerpc_AuthLevel auth_level;
-
-	void *auth_ctx;
-
-	/* Only the client code uses these 3 for now */
-	char *domain;
-	char *user_name;
-	DATA_BLOB user_session_key;
-};
-
 struct dcesrv_ep_entry_list;
 
 /*
@@ -207,4 +193,33 @@
 	bool (*fn) (struct pipes_struct *);
 };
 
+/* The following definitions come from rpc_server/rpc_handles.c  */
+
+size_t num_pipe_handles(struct pipes_struct *p);
+bool init_pipe_handles(struct pipes_struct *p, const struct ndr_syntax_id *syntax);
+bool create_policy_hnd(struct pipes_struct *p, struct policy_handle *hnd, void *data_ptr);
+bool find_policy_by_hnd(struct pipes_struct *p, const struct policy_handle *hnd,
+			void **data_p);
+bool close_policy_hnd(struct pipes_struct *p, struct policy_handle *hnd);
+void close_policy_by_pipe(struct pipes_struct *p);
+bool pipe_access_check(struct pipes_struct *p);
+
+void *_policy_handle_create(struct pipes_struct *p, struct policy_handle *hnd,
+			    uint32_t access_granted, size_t data_size,
+			    const char *type, NTSTATUS *pstatus);
+#define policy_handle_create(_p, _hnd, _access, _type, _pstatus) \
+	(_type *)_policy_handle_create((_p), (_hnd), (_access), sizeof(_type), #_type, \
+				       (_pstatus))
+
+void *_policy_handle_find(struct pipes_struct *p,
+			  const struct policy_handle *hnd,
+			  uint32_t access_required, uint32_t *paccess_granted,
+			  const char *name, const char *location,
+			  NTSTATUS *pstatus);
+#define policy_handle_find(_p, _hnd, _access_required, _access_granted, _type, _pstatus) \
+	(_type *)_policy_handle_find((_p), (_hnd), (_access_required), \
+				     (_access_granted), #_type, __location__, (_pstatus))
+
+#include "rpc_server/srv_pipe_register.h"
+
 #endif /* _NT_DOMAIN_H */

Modified: branches/samba/experimental/source3/include/printing.h
===================================================================
--- branches/samba/experimental/source3/include/printing.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/include/printing.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -158,9 +158,12 @@
 /* There can be this many printing tdb's open, plus any locked ones. */
 #define MAX_PRINT_DBS_OPEN 1
 
+struct TDB_DATA;
+struct tdb_context;
+
 struct tdb_print_db {
 	struct tdb_print_db *next, *prev;
-	TDB_CONTEXT *tdb;
+	struct tdb_context *tdb;
 	int ref_count;
 	fstring printer_name;
 };
@@ -249,7 +252,7 @@
 struct tdb_print_db *get_print_db_byname(const char *printername);
 void release_print_db( struct tdb_print_db *pdb);
 void close_all_print_db(void);
-TDB_DATA get_printer_notify_pid_list(TDB_CONTEXT *tdb, const char *printer_name, bool cleanlist);
+struct TDB_DATA get_printer_notify_pid_list(struct tdb_context *tdb, const char *printer_name, bool cleanlist);
 
 void print_queue_receive(struct messaging_context *msg,
 				void *private_data,

Modified: branches/samba/experimental/source3/include/proto.h
===================================================================
--- branches/samba/experimental/source3/include/proto.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/include/proto.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -405,60 +405,6 @@
 		   SMB_ACL_T acl_d);
 int sys_acl_delete_def_file(vfs_handle_struct *handle,
 			    const char *path);
-SMB_ACL_T sys_acl_get_file(vfs_handle_struct *handle,
-			   const char *path_p, SMB_ACL_TYPE_T type);
-SMB_ACL_T sys_acl_get_fd(vfs_handle_struct *handle, files_struct *fsp);
-int sys_acl_set_file(vfs_handle_struct *handle,
-		     const char *name, SMB_ACL_TYPE_T type, SMB_ACL_T acl_d);
-int sys_acl_set_fd(vfs_handle_struct *handle, files_struct *fsp,
-		   SMB_ACL_T acl_d);
-int sys_acl_delete_def_file(vfs_handle_struct *handle,
-			    const char *path);
-SMB_ACL_T sys_acl_get_file(vfs_handle_struct *handle,
-			   const char *path_p, SMB_ACL_TYPE_T type);
-SMB_ACL_T sys_acl_get_fd(vfs_handle_struct *handle, files_struct *fsp);
-int sys_acl_set_file(vfs_handle_struct *handle,
-		     const char *name, SMB_ACL_TYPE_T type, SMB_ACL_T acl_d);
-int sys_acl_set_fd(vfs_handle_struct *handle, files_struct *fsp,
-		   SMB_ACL_T acl_d);
-int sys_acl_delete_def_file(vfs_handle_struct *handle,
-			    const char *path);
-SMB_ACL_T sys_acl_get_file(vfs_handle_struct *handle,
-			   const char *path_p, SMB_ACL_TYPE_T type);
-SMB_ACL_T sys_acl_get_fd(vfs_handle_struct *handle, files_struct *fsp);
-int sys_acl_set_file(vfs_handle_struct *handle,
-		     const char *name, SMB_ACL_TYPE_T type, SMB_ACL_T acl_d);
-int sys_acl_set_fd(vfs_handle_struct *handle, files_struct *fsp,
-		   SMB_ACL_T acl_d);
-int sys_acl_delete_def_file(vfs_handle_struct *handle,
-			    const char *path);
-SMB_ACL_T sys_acl_get_file(vfs_handle_struct *handle,
-			   const char *path_p, SMB_ACL_TYPE_T type);
-SMB_ACL_T sys_acl_get_fd(vfs_handle_struct *handle, files_struct *fsp);
-int sys_acl_set_file(vfs_handle_struct *handle,
-		     const char *name, SMB_ACL_TYPE_T type, SMB_ACL_T acl_d);
-int sys_acl_set_fd(vfs_handle_struct *handle, files_struct *fsp,
-		   SMB_ACL_T acl_d);
-int sys_acl_delete_def_file(vfs_handle_struct *handle,
-			    const char *path);
-SMB_ACL_T sys_acl_get_file(vfs_handle_struct *handle,
-			   const char *path_p, SMB_ACL_TYPE_T type);
-SMB_ACL_T sys_acl_get_fd(vfs_handle_struct *handle, files_struct *fsp);
-int sys_acl_set_file(vfs_handle_struct *handle,
-		     const char *name, SMB_ACL_TYPE_T type, SMB_ACL_T acl_d);
-int sys_acl_set_fd(vfs_handle_struct *handle, files_struct *fsp,
-		   SMB_ACL_T acl_d);
-int sys_acl_delete_def_file(vfs_handle_struct *handle,
-			    const char *path);
-SMB_ACL_T sys_acl_get_file(vfs_handle_struct *handle,
-			   const char *path_p, SMB_ACL_TYPE_T type);
-SMB_ACL_T sys_acl_get_fd(vfs_handle_struct *handle, files_struct *fsp);
-int sys_acl_set_file(vfs_handle_struct *handle,
-		     const char *name, SMB_ACL_TYPE_T type, SMB_ACL_T acl_d);
-int sys_acl_set_fd(vfs_handle_struct *handle, files_struct *fsp,
-		   SMB_ACL_T acl_d);
-int sys_acl_delete_def_file(vfs_handle_struct *handle,
-			    const char *path);
 int no_acl_syscall_error(int err);
 
 /* The following definitions come from lib/sysquotas.c  */
@@ -561,16 +507,6 @@
 int sys_aio_error(const SMB_STRUCT_AIOCB *aiocb);
 int sys_aio_fsync(int op, SMB_STRUCT_AIOCB *aiocb);
 int sys_aio_suspend(const SMB_STRUCT_AIOCB * const cblist[], int n, const struct timespec *timeout);
-int sys_getpeereid( int s, uid_t *uid);
-int sys_getnameinfo(const struct sockaddr *psa,
-			socklen_t salen,
-			char *host,
-			size_t hostlen,
-			char *service,
-			size_t servlen,
-			int flags);
-int sys_connect(int fd, const struct sockaddr * addr);
-
 /* The following definitions come from lib/system_smbd.c  */
 
 bool getgroups_unix_user(TALLOC_CTX *mem_ctx, const char *user,
@@ -766,6 +702,7 @@
 			      NTSTATUS *status);
 bool any_nt_status_not_ok(NTSTATUS err1, NTSTATUS err2, NTSTATUS *result);
 int timeval_to_msec(struct timeval t);
+char *valid_share_pathname(TALLOC_CTX *ctx, const char *dos_pathname);
 
 /* The following definitions come from lib/util_cmdline.c  */
 
@@ -955,6 +892,7 @@
 int getaddrinfo_recv(struct tevent_req *req, struct addrinfo **res);
 int poll_one_fd(int fd, int events, int timeout, int *revents);
 int poll_intr_one_fd(int fd, int events, int timeout, int *revents);
+struct tstream_context;
 struct tevent_req *tstream_read_packet_send(TALLOC_CTX *mem_ctx,
 					    struct tevent_context *ev,
 					    struct tstream_context *stream,
@@ -1131,744 +1069,6 @@
 struct in_addr wins_srv_ip_tag(const char *tag, struct in_addr src_ip);
 unsigned wins_srv_count_tag(const char *tag);
 
-/* The following definitions come from libsmb/cliconnect.c  */
-
-ADS_STATUS cli_session_setup_spnego(struct cli_state *cli, const char *user, 
-			      const char *pass, const char *user_domain,
-				    const char * dest_realm);
-
-NTSTATUS cli_session_setup(struct cli_state *cli,
-			   const char *user,
-			   const char *pass, int passlen,
-			   const char *ntpass, int ntpasslen,
-			   const char *workgroup);
-struct tevent_req *cli_session_setup_guest_create(TALLOC_CTX *mem_ctx,
-						  struct event_context *ev,
-						  struct cli_state *cli,
-						  struct tevent_req **psmbreq);
-struct tevent_req *cli_session_setup_guest_send(TALLOC_CTX *mem_ctx,
-						struct event_context *ev,
-						struct cli_state *cli);
-NTSTATUS cli_session_setup_guest_recv(struct tevent_req *req);
-struct tevent_req *cli_ulogoff_send(TALLOC_CTX *mem_ctx,
-				    struct tevent_context *ev,
-				    struct cli_state *cli);
-NTSTATUS cli_ulogoff_recv(struct tevent_req *req);
-NTSTATUS cli_ulogoff(struct cli_state *cli);
-struct tevent_req *cli_tcon_andx_create(TALLOC_CTX *mem_ctx,
-					struct event_context *ev,
-					struct cli_state *cli,
-					const char *share, const char *dev,
-					const char *pass, int passlen,
-					struct tevent_req **psmbreq);
-struct tevent_req *cli_tcon_andx_send(TALLOC_CTX *mem_ctx,
-				      struct event_context *ev,
-				      struct cli_state *cli,
-				      const char *share, const char *dev,
-				      const char *pass, int passlen);
-NTSTATUS cli_tcon_andx_recv(struct tevent_req *req);
-NTSTATUS cli_tcon_andx(struct cli_state *cli, const char *share,
-		       const char *dev, const char *pass, int passlen);
-struct tevent_req *cli_tdis_send(TALLOC_CTX *mem_ctx,
-                                 struct tevent_context *ev,
-                                 struct cli_state *cli);
-NTSTATUS cli_tdis_recv(struct tevent_req *req);
-NTSTATUS cli_tdis(struct cli_state *cli);
-NTSTATUS cli_negprot(struct cli_state *cli);
-struct tevent_req *cli_negprot_send(TALLOC_CTX *mem_ctx,
-				    struct event_context *ev,
-				    struct cli_state *cli);
-NTSTATUS cli_negprot_recv(struct tevent_req *req);
-bool cli_session_request(struct cli_state *cli,
-			 struct nmb_name *calling, struct nmb_name *called);
-NTSTATUS cli_connect(struct cli_state *cli,
-		const char *host,
-		struct sockaddr_storage *dest_ss);
-NTSTATUS cli_start_connection(struct cli_state **output_cli, 
-			      const char *my_name, 
-			      const char *dest_host, 
-			      struct sockaddr_storage *dest_ss, int port,
-			      int signing_state, int flags);
-NTSTATUS cli_full_connection(struct cli_state **output_cli, 
-			     const char *my_name, 
-			     const char *dest_host, 
-			     struct sockaddr_storage *dest_ss, int port,
-			     const char *service, const char *service_type,
-			     const char *user, const char *domain, 
-			     const char *password, int flags,
-			     int signing_state);
-bool attempt_netbios_session_request(struct cli_state **ppcli, const char *srchost, const char *desthost,
-                                     struct sockaddr_storage *pdest_ss);
-NTSTATUS cli_raw_tcon(struct cli_state *cli, 
-		      const char *service, const char *pass, const char *dev,
-		      uint16 *max_xmit, uint16 *tid);
-struct cli_state *get_ipc_connect(char *server,
-				struct sockaddr_storage *server_ss,
-				const struct user_auth_info *user_info);
-struct cli_state *get_ipc_connect_master_ip(TALLOC_CTX *ctx,
-				struct ip_service *mb_ip,
-				const struct user_auth_info *user_info,
-				char **pp_workgroup_out);
-struct cli_state *get_ipc_connect_master_ip_bcast(TALLOC_CTX *ctx,
-					const struct user_auth_info *user_info,
-					char **pp_workgroup_out);
-
-/* The following definitions come from libsmb/clidfs.c  */
-
-NTSTATUS cli_cm_force_encryption(struct cli_state *c,
-			const char *username,
-			const char *password,
-			const char *domain,
-			const char *sharename);
-struct cli_state *cli_cm_open(TALLOC_CTX *ctx,
-				struct cli_state *referring_cli,
-				const char *server,
-				const char *share,
-				const struct user_auth_info *auth_info,
-				bool show_hdr,
-				bool force_encrypt,
-				int max_protocol,
-				int port,
-				int name_type);
-void cli_cm_display(const struct cli_state *c);
-struct client_dfs_referral;
-NTSTATUS cli_dfs_get_referral(TALLOC_CTX *ctx,
-			struct cli_state *cli,
-			const char *path,
-			struct client_dfs_referral **refs,
-			size_t *num_refs,
-			size_t *consumed);
-bool cli_resolve_path(TALLOC_CTX *ctx,
-			const char *mountpt,
-			const struct user_auth_info *dfs_auth_info,
-			struct cli_state *rootcli,
-			const char *path,
-			struct cli_state **targetcli,
-			char **pp_targetpath);
-
-bool cli_check_msdfs_proxy(TALLOC_CTX *ctx,
-			struct cli_state *cli,
-			const char *sharename,
-			char **pp_newserver,
-			char **pp_newshare,
-			bool force_encrypt,
-			const char *username,
-			const char *password,
-			const char *domain);
-
-/* The following definitions come from libsmb/clientgen.c  */
-
-int cli_set_message(char *buf,int num_words,int num_bytes,bool zero);
-unsigned int cli_set_timeout(struct cli_state *cli, unsigned int timeout);
-void cli_set_port(struct cli_state *cli, int port);
-bool cli_state_seqnum_persistent(struct cli_state *cli,
-				 uint16_t mid);
-bool cli_state_seqnum_remove(struct cli_state *cli,
-			     uint16_t mid);
-bool cli_receive_smb(struct cli_state *cli);
-bool cli_send_smb(struct cli_state *cli);
-bool cli_send_smb_direct_writeX(struct cli_state *cli,
-				const char *p,
-				size_t extradata);
-void cli_setup_packet_buf(struct cli_state *cli, char *buf);
-void cli_setup_packet(struct cli_state *cli);
-void cli_setup_bcc(struct cli_state *cli, void *p);
-NTSTATUS cli_set_domain(struct cli_state *cli, const char *domain);
-NTSTATUS cli_set_username(struct cli_state *cli, const char *username);
-NTSTATUS cli_set_password(struct cli_state *cli, const char *password);
-NTSTATUS cli_init_creds(struct cli_state *cli, const char *username, const char *domain, const char *password);
-struct cli_state *cli_initialise(void);
-struct cli_state *cli_initialise_ex(int signing_state);
-void cli_nt_pipes_close(struct cli_state *cli);
-void cli_shutdown(struct cli_state *cli);
-void cli_sockopt(struct cli_state *cli, const char *options);
-uint16 cli_setpid(struct cli_state *cli, uint16 pid);
-bool cli_set_case_sensitive(struct cli_state *cli, bool case_sensitive);
-struct tevent_req *cli_echo_send(TALLOC_CTX *mem_ctx, struct event_context *ev,
-				 struct cli_state *cli, uint16_t num_echos,
-				 DATA_BLOB data);
-NTSTATUS cli_echo_recv(struct tevent_req *req);
-NTSTATUS cli_echo(struct cli_state *cli, uint16_t num_echos, DATA_BLOB data);
-bool cli_ucs2(struct cli_state *cli);
-bool is_andx_req(uint8_t cmd);
-NTSTATUS cli_smb(TALLOC_CTX *mem_ctx, struct cli_state *cli,
-		 uint8_t smb_command, uint8_t additional_flags,
-		 uint8_t wct, uint16_t *vwv,
-		 uint32_t num_bytes, const uint8_t *bytes,
-		 struct tevent_req **result_parent,
-		 uint8_t min_wct, uint8_t *pwct, uint16_t **pvwv,
-		 uint32_t *pnum_bytes, uint8_t **pbytes);
-
-/* The following definitions come from libsmb/clierror.c  */
-
-const char *cli_errstr(struct cli_state *cli);
-NTSTATUS cli_nt_error(struct cli_state *cli);
-void cli_dos_error(struct cli_state *cli, uint8 *eclass, uint32 *ecode);
-int cli_errno(struct cli_state *cli);
-bool cli_is_error(struct cli_state *cli);
-bool cli_is_nt_error(struct cli_state *cli);
-bool cli_is_dos_error(struct cli_state *cli);
-NTSTATUS cli_get_nt_error(struct cli_state *cli);
-void cli_set_nt_error(struct cli_state *cli, NTSTATUS status);
-void cli_reset_error(struct cli_state *cli);
-bool cli_state_is_connected(struct cli_state *cli);
-
-/* The following definitions come from libsmb/clifile.c  */
-
-struct tevent_req *cli_setpathinfo_send(TALLOC_CTX *mem_ctx,
-					struct tevent_context *ev,
-					struct cli_state *cli,
-					uint16_t level,
-					const char *path,
-					uint8_t *data,
-					size_t data_len);
-NTSTATUS cli_setpathinfo_recv(struct tevent_req *req);
-NTSTATUS cli_setpathinfo(struct cli_state *cli,
-			 uint16_t level,
-			 const char *path,
-			 uint8_t *data,
-			 size_t data_len);
-
-struct tevent_req *cli_posix_symlink_send(TALLOC_CTX *mem_ctx,
-					struct event_context *ev,
-					struct cli_state *cli,
-					const char *oldname,
-					const char *newname);
-NTSTATUS cli_posix_symlink_recv(struct tevent_req *req);
-NTSTATUS cli_posix_symlink(struct cli_state *cli,
-			const char *oldname,
-			const char *newname);
-struct tevent_req *cli_posix_readlink_send(TALLOC_CTX *mem_ctx,
-					struct event_context *ev,
-					struct cli_state *cli,
-					const char *fname,
-					size_t len);
-NTSTATUS cli_posix_readlink_recv(struct tevent_req *req, struct cli_state *cli,
-				char *retpath, size_t len);
-NTSTATUS cli_posix_readlink(struct cli_state *cli, const char *fname,
-			char *linkpath, size_t len);
-struct tevent_req *cli_posix_hardlink_send(TALLOC_CTX *mem_ctx,
-					struct event_context *ev,
-					struct cli_state *cli,
-					const char *oldname,
-					const char *newname);
-NTSTATUS cli_posix_hardlink_recv(struct tevent_req *req);
-NTSTATUS cli_posix_hardlink(struct cli_state *cli,
-			const char *oldname,
-			const char *newname);
-uint32_t unix_perms_to_wire(mode_t perms);
-mode_t wire_perms_to_unix(uint32_t perms);
-struct tevent_req *cli_posix_getfacl_send(TALLOC_CTX *mem_ctx,
-					struct event_context *ev,
-					struct cli_state *cli,
-					const char *fname);
-NTSTATUS cli_posix_getfacl_recv(struct tevent_req *req,
-				TALLOC_CTX *mem_ctx,
-				size_t *prb_size,
-				char **retbuf);
-NTSTATUS cli_posix_getfacl(struct cli_state *cli,
-			const char *fname,
-			TALLOC_CTX *mem_ctx,
-			size_t *prb_size,
-			char **retbuf);
-struct tevent_req *cli_posix_stat_send(TALLOC_CTX *mem_ctx,
-					struct event_context *ev,
-					struct cli_state *cli,
-					const char *fname);
-NTSTATUS cli_posix_stat_recv(struct tevent_req *req,
-				SMB_STRUCT_STAT *sbuf);
-NTSTATUS cli_posix_stat(struct cli_state *cli,
-			const char *fname,
-			SMB_STRUCT_STAT *sbuf);
-struct tevent_req *cli_posix_chmod_send(TALLOC_CTX *mem_ctx,
-					struct event_context *ev,
-					struct cli_state *cli,
-					const char *fname,
-					mode_t mode);
-NTSTATUS cli_posix_chmod_recv(struct tevent_req *req);
-NTSTATUS cli_posix_chmod(struct cli_state *cli, const char *fname, mode_t mode);
-struct tevent_req *cli_posix_chown_send(TALLOC_CTX *mem_ctx,
-					struct event_context *ev,
-					struct cli_state *cli,
-					const char *fname,
-					uid_t uid,
-					gid_t gid);
-NTSTATUS cli_posix_chown_recv(struct tevent_req *req);
-NTSTATUS cli_posix_chown(struct cli_state *cli,
-			const char *fname,
-			uid_t uid,
-			gid_t gid);
-struct tevent_req *cli_rename_send(TALLOC_CTX *mem_ctx,
-                                struct event_context *ev,
-                                struct cli_state *cli,
-                                const char *fname_src,
-                                const char *fname_dst);
-NTSTATUS cli_rename_recv(struct tevent_req *req);
-NTSTATUS cli_rename(struct cli_state *cli, const char *fname_src, const char *fname_dst);
-struct tevent_req *cli_ntrename_send(TALLOC_CTX *mem_ctx,
-                                struct event_context *ev,
-                                struct cli_state *cli,
-                                const char *fname_src,
-                                const char *fname_dst);
-NTSTATUS cli_ntrename_recv(struct tevent_req *req);
-NTSTATUS cli_ntrename(struct cli_state *cli, const char *fname_src, const char *fname_dst);
-
-struct tevent_req *cli_nt_hardlink_send(TALLOC_CTX *mem_ctx,
-                                struct event_context *ev,
-                                struct cli_state *cli,
-                                const char *fname_src,
-                                const char *fname_dst);
-NTSTATUS cli_nt_hardlink_recv(struct tevent_req *req);
-NTSTATUS cli_nt_hardlink(struct cli_state *cli, const char *fname_src, const char *fname_dst);
-
-struct tevent_req *cli_unlink_send(TALLOC_CTX *mem_ctx,
-                                struct event_context *ev,
-                                struct cli_state *cli,
-                                const char *fname,
-                                uint16_t mayhave_attrs);
-NTSTATUS cli_unlink_recv(struct tevent_req *req);
-NTSTATUS cli_unlink(struct cli_state *cli, const char *fname, uint16_t mayhave_attrs);
-
-struct tevent_req *cli_mkdir_send(TALLOC_CTX *mem_ctx,
-				  struct event_context *ev,
-				  struct cli_state *cli,
-				  const char *dname);
-NTSTATUS cli_mkdir_recv(struct tevent_req *req);
-NTSTATUS cli_mkdir(struct cli_state *cli, const char *dname);
-struct tevent_req *cli_rmdir_send(TALLOC_CTX *mem_ctx,
-				  struct event_context *ev,
-				  struct cli_state *cli,
-				  const char *dname);
-NTSTATUS cli_rmdir_recv(struct tevent_req *req);
-NTSTATUS cli_rmdir(struct cli_state *cli, const char *dname);
-struct tevent_req *cli_nt_delete_on_close_send(TALLOC_CTX *mem_ctx,
-					struct event_context *ev,
-					struct cli_state *cli,
-					uint16_t fnum,
-					bool flag);
-NTSTATUS cli_nt_delete_on_close_recv(struct tevent_req *req);
-NTSTATUS cli_nt_delete_on_close(struct cli_state *cli, uint16_t fnum, bool flag);
-struct tevent_req *cli_ntcreate_send(TALLOC_CTX *mem_ctx,
-				     struct event_context *ev,
-				     struct cli_state *cli,
-				     const char *fname,
-				     uint32_t CreatFlags,
-				     uint32_t DesiredAccess,
-				     uint32_t FileAttributes,
-				     uint32_t ShareAccess,
-				     uint32_t CreateDisposition,
-				     uint32_t CreateOptions,
-				     uint8_t SecurityFlags);
-NTSTATUS cli_ntcreate_recv(struct tevent_req *req, uint16_t *pfnum);
-NTSTATUS cli_ntcreate(struct cli_state *cli,
-		      const char *fname,
-		      uint32_t CreatFlags,
-		      uint32_t DesiredAccess,
-		      uint32_t FileAttributes,
-		      uint32_t ShareAccess,
-		      uint32_t CreateDisposition,
-		      uint32_t CreateOptions,
-		      uint8_t SecurityFlags,
-		      uint16_t *pfid);
-uint8_t *smb_bytes_push_str(uint8_t *buf, bool ucs2, const char *str,
-			    size_t str_len, size_t *pconverted_size);
-uint8_t *smb_bytes_push_bytes(uint8_t *buf, uint8_t prefix,
-			      const uint8_t *bytes, size_t num_bytes);
-struct tevent_req *cli_open_create(TALLOC_CTX *mem_ctx,
-				   struct event_context *ev,
-				   struct cli_state *cli, const char *fname,
-				   int flags, int share_mode,
-				   struct tevent_req **psmbreq);
-struct tevent_req *cli_open_send(TALLOC_CTX *mem_ctx, struct event_context *ev,
-				 struct cli_state *cli, const char *fname,
-				 int flags, int share_mode);
-NTSTATUS cli_open_recv(struct tevent_req *req, uint16_t *fnum);
-NTSTATUS cli_open(struct cli_state *cli, const char *fname, int flags, int share_mode, uint16_t *pfnum);
-struct tevent_req *cli_close_create(TALLOC_CTX *mem_ctx,
-				    struct event_context *ev,
-				    struct cli_state *cli, uint16_t fnum,
-				    struct tevent_req **psubreq);
-struct tevent_req *cli_close_send(TALLOC_CTX *mem_ctx,
-				  struct event_context *ev,
-				  struct cli_state *cli, uint16_t fnum);
-NTSTATUS cli_close_recv(struct tevent_req *req);
-NTSTATUS cli_close(struct cli_state *cli, uint16_t fnum);
-struct tevent_req *cli_ftruncate_send(TALLOC_CTX *mem_ctx,
-					struct event_context *ev,
-					struct cli_state *cli,
-					uint16_t fnum,
-					uint64_t size);
-NTSTATUS cli_ftruncate_recv(struct tevent_req *req);
-NTSTATUS cli_ftruncate(struct cli_state *cli, uint16_t fnum, uint64_t size);
-NTSTATUS cli_locktype(struct cli_state *cli, uint16_t fnum,
-		      uint32_t offset, uint32_t len,
-		      int timeout, unsigned char locktype);
-bool cli_lock(struct cli_state *cli, uint16_t fnum,
-	      uint32_t offset, uint32_t len, int timeout, enum brl_type lock_type);
-struct tevent_req *cli_unlock_send(TALLOC_CTX *mem_ctx,
-                                struct event_context *ev,
-                                struct cli_state *cli,
-                                uint16_t fnum,
-                                uint64_t offset,
-                                uint64_t len);
-NTSTATUS cli_unlock_recv(struct tevent_req *req);
-NTSTATUS cli_unlock(struct cli_state *cli, uint16_t fnum, uint32_t offset, uint32_t len);
-bool cli_lock64(struct cli_state *cli, uint16_t fnum,
-		uint64_t offset, uint64_t len, int timeout, enum brl_type lock_type);
-struct tevent_req *cli_unlock64_send(TALLOC_CTX *mem_ctx,
-                                struct event_context *ev,
-                                struct cli_state *cli,
-                                uint16_t fnum,
-                                uint64_t offset,
-                                uint64_t len);
-NTSTATUS cli_unlock64_recv(struct tevent_req *req);
-NTSTATUS cli_unlock64(struct cli_state *cli, uint16_t fnum, uint64_t offset, uint64_t len);
-struct tevent_req *cli_posix_lock_send(TALLOC_CTX *mem_ctx,
-                                        struct event_context *ev,
-                                        struct cli_state *cli,
-                                        uint16_t fnum,
-                                        uint64_t offset,
-                                        uint64_t len,
-                                        bool wait_lock,
-                                        enum brl_type lock_type);
-NTSTATUS cli_posix_lock_recv(struct tevent_req *req);
-NTSTATUS cli_posix_lock(struct cli_state *cli, uint16_t fnum,
-			uint64_t offset, uint64_t len,
-			bool wait_lock, enum brl_type lock_type);
-struct tevent_req *cli_posix_unlock_send(TALLOC_CTX *mem_ctx,
-                                        struct event_context *ev,
-                                        struct cli_state *cli,
-                                        uint16_t fnum,
-                                        uint64_t offset,
-                                        uint64_t len);
-NTSTATUS cli_posix_unlock_recv(struct tevent_req *req);
-NTSTATUS cli_posix_unlock(struct cli_state *cli, uint16_t fnum, uint64_t offset, uint64_t len);
-struct tevent_req *cli_getattrE_send(TALLOC_CTX *mem_ctx,
-				struct event_context *ev,
-				struct cli_state *cli,
-                                uint16_t fnum);
-NTSTATUS cli_getattrE_recv(struct tevent_req *req,
-                        uint16_t *attr,
-                        SMB_OFF_T *size,
-                        time_t *change_time,
-                        time_t *access_time,
-                        time_t *write_time);
-NTSTATUS cli_getattrE(struct cli_state *cli,
-			uint16_t fnum,
-			uint16_t *attr,
-			SMB_OFF_T *size,
-			time_t *change_time,
-			time_t *access_time,
-			time_t *write_time);
-struct tevent_req *cli_setattrE_send(TALLOC_CTX *mem_ctx,
-				struct event_context *ev,
-				struct cli_state *cli,
-				uint16_t fnum,
-				time_t change_time,
-				time_t access_time,
-				time_t write_time);
-NTSTATUS cli_setattrE_recv(struct tevent_req *req);
-NTSTATUS cli_setattrE(struct cli_state *cli,
-			uint16_t fnum,
-			time_t change_time,
-			time_t access_time,
-			time_t write_time);
-struct tevent_req *cli_getatr_send(TALLOC_CTX *mem_ctx,
-				struct event_context *ev,
-				struct cli_state *cli,
-				const char *fname);
-NTSTATUS cli_getatr_recv(struct tevent_req *req,
-				uint16_t *attr,
-				SMB_OFF_T *size,
-				time_t *write_time);
-NTSTATUS cli_getatr(struct cli_state *cli,
-			const char *fname,
-			uint16_t *attr,
-			SMB_OFF_T *size,
-			time_t *write_time);
-struct tevent_req *cli_setatr_send(TALLOC_CTX *mem_ctx,
-				struct event_context *ev,
-				struct cli_state *cli,
-				const char *fname,
-				uint16_t attr,
-				time_t mtime);
-NTSTATUS cli_setatr_recv(struct tevent_req *req);
-NTSTATUS cli_setatr(struct cli_state *cli,
-                const char *fname,
-                uint16_t attr,
-                time_t mtime);
-struct tevent_req *cli_chkpath_send(TALLOC_CTX *mem_ctx,
-				  struct event_context *ev,
-				  struct cli_state *cli,
-				  const char *fname);
-NTSTATUS cli_chkpath_recv(struct tevent_req *req);
-NTSTATUS cli_chkpath(struct cli_state *cli, const char *path);
-struct tevent_req *cli_dskattr_send(TALLOC_CTX *mem_ctx,
-				  struct event_context *ev,
-				  struct cli_state *cli);
-NTSTATUS cli_dskattr_recv(struct tevent_req *req, int *bsize, int *total,
-			  int *avail);
-NTSTATUS cli_dskattr(struct cli_state *cli, int *bsize, int *total, int *avail);
-struct tevent_req *cli_ctemp_send(TALLOC_CTX *mem_ctx,
-				struct event_context *ev,
-				struct cli_state *cli,
-				const char *path);
-NTSTATUS cli_ctemp_recv(struct tevent_req *req,
-			TALLOC_CTX *ctx,
-			uint16_t *pfnum,
-			char **outfile);
-NTSTATUS cli_ctemp(struct cli_state *cli,
-			TALLOC_CTX *ctx,
-			const char *path,
-			uint16_t *pfnum,
-			char **out_path);
-NTSTATUS cli_raw_ioctl(struct cli_state *cli, uint16_t fnum, uint32_t code, DATA_BLOB *blob);
-NTSTATUS cli_set_ea_path(struct cli_state *cli, const char *path,
-			 const char *ea_name, const char *ea_val,
-			 size_t ea_len);
-NTSTATUS cli_set_ea_fnum(struct cli_state *cli, uint16_t fnum,
-			 const char *ea_name, const char *ea_val,
-			 size_t ea_len);
-struct tevent_req *cli_get_ea_list_path_send(TALLOC_CTX *mem_ctx,
-					     struct tevent_context *ev,
-					     struct cli_state *cli,
-					     const char *fname);
-NTSTATUS cli_get_ea_list_path_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx,
-				   size_t *pnum_eas, struct ea_struct **peas);
-NTSTATUS cli_get_ea_list_path(struct cli_state *cli, const char *path,
-		TALLOC_CTX *ctx,
-		size_t *pnum_eas,
-		struct ea_struct **pea_list);
-struct tevent_req *cli_posix_open_send(TALLOC_CTX *mem_ctx,
-					struct event_context *ev,
-					struct cli_state *cli,
-					const char *fname,
-					int flags,
-					mode_t mode);
-NTSTATUS cli_posix_open_recv(struct tevent_req *req, uint16_t *pfnum);
-NTSTATUS cli_posix_open(struct cli_state *cli, const char *fname,
-			int flags, mode_t mode, uint16_t *fnum);
-struct tevent_req *cli_posix_mkdir_send(TALLOC_CTX *mem_ctx,
-                                        struct event_context *ev,
-                                        struct cli_state *cli,
-                                        const char *fname,
-                                        mode_t mode);
-NTSTATUS cli_posix_mkdir_recv(struct tevent_req *req);
-NTSTATUS cli_posix_mkdir(struct cli_state *cli, const char *fname, mode_t mode);
-
-struct tevent_req *cli_posix_unlink_send(TALLOC_CTX *mem_ctx,
-					struct event_context *ev,
-					struct cli_state *cli,
-					const char *fname);
-NTSTATUS cli_posix_unlink_recv(struct tevent_req *req);
-NTSTATUS cli_posix_unlink(struct cli_state *cli, const char *fname);
-
-struct tevent_req *cli_posix_rmdir_send(TALLOC_CTX *mem_ctx,
-					struct event_context *ev,
-					struct cli_state *cli,
-					const char *fname);
-NTSTATUS cli_posix_rmdir_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx);
-NTSTATUS cli_posix_rmdir(struct cli_state *cli, const char *fname);
-struct tevent_req *cli_notify_send(TALLOC_CTX *mem_ctx,
-				   struct tevent_context *ev,
-				   struct cli_state *cli, uint16_t fnum,
-				   uint32_t buffer_size,
-				   uint32_t completion_filter, bool recursive);
-NTSTATUS cli_notify_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx,
-			 uint32_t *pnum_changes,
-			 struct notify_change **pchanges);
-
-/* The following definitions come from libsmb/clifsinfo.c  */
-
-struct tevent_req *cli_unix_extensions_version_send(TALLOC_CTX *mem_ctx,
-						    struct tevent_context *ev,
-						    struct cli_state *cli);
-NTSTATUS cli_unix_extensions_version_recv(struct tevent_req *req,
-					  uint16_t *pmajor, uint16_t *pminor,
-					  uint32_t *pcaplow,
-					  uint32_t *pcaphigh);
-NTSTATUS cli_unix_extensions_version(struct cli_state *cli, uint16 *pmajor,
-				     uint16 *pminor, uint32 *pcaplow,
-				     uint32 *pcaphigh);
-struct tevent_req *cli_set_unix_extensions_capabilities_send(
-	TALLOC_CTX *mem_ctx, struct tevent_context *ev, struct cli_state *cli,
-	uint16_t major, uint16_t minor, uint32_t caplow, uint32_t caphigh);
-NTSTATUS cli_set_unix_extensions_capabilities_recv(struct tevent_req *req);
-NTSTATUS cli_set_unix_extensions_capabilities(struct cli_state *cli,
-					      uint16 major, uint16 minor,
-					      uint32 caplow, uint32 caphigh);
-struct tevent_req *cli_get_fs_attr_info_send(TALLOC_CTX *mem_ctx,
-					     struct tevent_context *ev,
-					     struct cli_state *cli);
-NTSTATUS cli_get_fs_attr_info_recv(struct tevent_req *req, uint32_t *fs_attr);
-NTSTATUS cli_get_fs_attr_info(struct cli_state *cli, uint32_t *fs_attr);
-NTSTATUS cli_get_fs_volume_info(struct cli_state *cli, fstring volume_name,
-				uint32 *pserial_number, time_t *pdate);
-NTSTATUS cli_get_fs_full_size_info(struct cli_state *cli,
-				   uint64_t *total_allocation_units,
-				   uint64_t *caller_allocation_units,
-				   uint64_t *actual_allocation_units,
-				   uint64_t *sectors_per_allocation_unit,
-				   uint64_t *bytes_per_sector);
-NTSTATUS cli_get_posix_fs_info(struct cli_state *cli,
-			       uint32 *optimal_transfer_size,
-			       uint32 *block_size,
-			       uint64_t *total_blocks,
-			       uint64_t *blocks_available,
-			       uint64_t *user_blocks_available,
-			       uint64_t *total_file_nodes,
-			       uint64_t *free_file_nodes,
-			       uint64_t *fs_identifier);
-NTSTATUS cli_raw_ntlm_smb_encryption_start(struct cli_state *cli, 
-				const char *user,
-				const char *pass,
-				const char *domain);
-NTSTATUS cli_gss_smb_encryption_start(struct cli_state *cli);
-NTSTATUS cli_force_encryption(struct cli_state *c,
-			const char *username,
-			const char *password,
-			const char *domain);
-
-/* The following definitions come from libsmb/clikrb5.c  */
-
-bool unwrap_edata_ntstatus(TALLOC_CTX *mem_ctx, 
-			   DATA_BLOB *edata, 
-			   DATA_BLOB *edata_out);
-bool unwrap_pac(TALLOC_CTX *mem_ctx, DATA_BLOB *auth_data, DATA_BLOB *unwrapped_pac_data);
-
-/* The following definitions come from libsmb/clilist.c  */
-
-NTSTATUS cli_list_old(struct cli_state *cli,const char *Mask,uint16 attribute,
-		      NTSTATUS (*fn)(const char *, struct file_info *,
-				 const char *, void *), void *state);
-NTSTATUS cli_list_trans(struct cli_state *cli, const char *mask,
-			uint16_t attribute, int info_level,
-			NTSTATUS (*fn)(const char *mnt, struct file_info *finfo,
-				   const char *mask, void *private_data),
-			void *private_data);
-struct tevent_req *cli_list_send(TALLOC_CTX *mem_ctx,
-				 struct tevent_context *ev,
-				 struct cli_state *cli,
-				 const char *mask,
-				 uint16_t attribute,
-				 uint16_t info_level);
-NTSTATUS cli_list_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx,
-		       struct file_info **finfo, size_t *num_finfo);
-NTSTATUS cli_list(struct cli_state *cli,const char *Mask,uint16 attribute,
-		  NTSTATUS (*fn)(const char *, struct file_info *, const char *,
-			     void *), void *state);
-
-/* The following definitions come from libsmb/climessage.c  */
-
-struct tevent_req *cli_message_send(TALLOC_CTX *mem_ctx,
-				    struct tevent_context *ev,
-				    struct cli_state *cli,
-				    const char *host, const char *username,
-				    const char *message);
-NTSTATUS cli_message_recv(struct tevent_req *req);
-NTSTATUS cli_message(struct cli_state *cli, const char *host,
-		     const char *username, const char *message);
-
-/* The following definitions come from libsmb/clioplock.c  */
-
-struct tevent_req *cli_oplock_ack_send(TALLOC_CTX *mem_ctx,
-				       struct tevent_context *ev,
-				       struct cli_state *cli,
-				       uint16_t fnum, uint8_t level);
-NTSTATUS cli_oplock_ack_recv(struct tevent_req *req);
-NTSTATUS cli_oplock_ack(struct cli_state *cli, uint16_t fnum, unsigned char level);
-void cli_oplock_handler(struct cli_state *cli, 
-			NTSTATUS (*handler)(struct cli_state *, uint16_t, unsigned char));
-
-/* The following definitions come from libsmb/cliprint.c  */
-
-int cli_print_queue(struct cli_state *cli,
-		    void (*fn)(struct print_job_info *));
-int cli_printjob_del(struct cli_state *cli, int job);
-
-/* The following definitions come from libsmb/cliquota.c  */
-
-NTSTATUS cli_get_quota_handle(struct cli_state *cli, uint16_t *quota_fnum);
-void free_ntquota_list(SMB_NTQUOTA_LIST **qt_list);
-NTSTATUS cli_get_user_quota(struct cli_state *cli, int quota_fnum,
-			    SMB_NTQUOTA_STRUCT *pqt);
-NTSTATUS cli_set_user_quota(struct cli_state *cli, int quota_fnum,
-			    SMB_NTQUOTA_STRUCT *pqt);
-NTSTATUS cli_list_user_quota(struct cli_state *cli, int quota_fnum,
-			     SMB_NTQUOTA_LIST **pqt_list);
-NTSTATUS cli_get_fs_quota_info(struct cli_state *cli, int quota_fnum,
-			       SMB_NTQUOTA_STRUCT *pqt);
-NTSTATUS cli_set_fs_quota_info(struct cli_state *cli, int quota_fnum,
-			       SMB_NTQUOTA_STRUCT *pqt);
-
-/* The following definitions come from libsmb/clireadwrite.c  */
-
-struct tevent_req *cli_read_andx_create(TALLOC_CTX *mem_ctx,
-					struct event_context *ev,
-					struct cli_state *cli, uint16_t fnum,
-					off_t offset, size_t size,
-					struct tevent_req **psmbreq);
-struct tevent_req *cli_read_andx_send(TALLOC_CTX *mem_ctx,
-				      struct event_context *ev,
-				      struct cli_state *cli, uint16_t fnum,
-				      off_t offset, size_t size);
-NTSTATUS cli_read_andx_recv(struct tevent_req *req, ssize_t *received,
-			    uint8_t **rcvbuf);
-struct tevent_req *cli_pull_send(TALLOC_CTX *mem_ctx,
-				 struct event_context *ev,
-				 struct cli_state *cli,
-				 uint16_t fnum, off_t start_offset,
-				 SMB_OFF_T size, size_t window_size,
-				 NTSTATUS (*sink)(char *buf, size_t n,
-						  void *priv),
-				 void *priv);
-NTSTATUS cli_pull_recv(struct tevent_req *req, SMB_OFF_T *received);
-NTSTATUS cli_pull(struct cli_state *cli, uint16_t fnum,
-		  off_t start_offset, SMB_OFF_T size, size_t window_size,
-		  NTSTATUS (*sink)(char *buf, size_t n, void *priv),
-		  void *priv, SMB_OFF_T *received);
-ssize_t cli_read(struct cli_state *cli, uint16_t fnum, char *buf,
-		 off_t offset, size_t size);
-ssize_t cli_write(struct cli_state *cli,
-    	         uint16_t fnum, uint16 write_mode,
-		 const char *buf, off_t offset, size_t size);
-NTSTATUS cli_smbwrite(struct cli_state *cli, uint16_t fnum, char *buf,
-		      off_t offset, size_t size1, size_t *ptotal);
-struct tevent_req *cli_write_andx_create(TALLOC_CTX *mem_ctx,
-					 struct event_context *ev,
-					 struct cli_state *cli, uint16_t fnum,
-					 uint16_t mode, const uint8_t *buf,
-					 off_t offset, size_t size,
-					 struct tevent_req **reqs_before,
-					 int num_reqs_before,
-					 struct tevent_req **psmbreq);
-struct tevent_req *cli_write_andx_send(TALLOC_CTX *mem_ctx,
-				       struct event_context *ev,
-				       struct cli_state *cli, uint16_t fnum,
-				       uint16_t mode, const uint8_t *buf,
-				       off_t offset, size_t size);
-NTSTATUS cli_write_andx_recv(struct tevent_req *req, size_t *pwritten);
-
-struct tevent_req *cli_push_send(TALLOC_CTX *mem_ctx, struct event_context *ev,
-				 struct cli_state *cli,
-				 uint16_t fnum, uint16_t mode,
-				 off_t start_offset, size_t window_size,
-				 size_t (*source)(uint8_t *buf, size_t n,
-						  void *priv),
-				 void *priv);
-NTSTATUS cli_push_recv(struct tevent_req *req);
-NTSTATUS cli_push(struct cli_state *cli, uint16_t fnum, uint16_t mode,
-		  off_t start_offset, size_t window_size,
-		  size_t (*source)(uint8_t *buf, size_t n, void *priv),
-		  void *priv);
-
-/* The following definitions come from libsmb/clisecdesc.c  */
-
-struct security_descriptor *cli_query_secdesc(struct cli_state *cli, uint16_t fnum,
-			    TALLOC_CTX *mem_ctx);
-NTSTATUS cli_set_secdesc(struct cli_state *cli, uint16_t fnum,
-			 struct security_descriptor *sd);
-
 /* The following definitions come from libsmb/clispnego.c  */
 
 DATA_BLOB spnego_gen_negTokenInit(TALLOC_CTX *ctx,
@@ -1912,63 +1112,6 @@
 bool spnego_mech_list_blob(TALLOC_CTX *mem_ctx,
 			   char **oid_list, DATA_BLOB *data);
 
-/* The following definitions come from libsmb/clistr.c  */
-
-size_t clistr_push_fn(const char *function,
-			unsigned int line,
-			struct cli_state *cli,
-			void *dest,
-			const char *src,
-			int dest_len,
-			int flags);
-size_t clistr_pull_fn(const char *function,
-			unsigned int line,
-			const char *inbuf,
-			char *dest,
-			const void *src,
-			int dest_len,
-			int src_len,
-			int flags);
-size_t clistr_pull_talloc_fn(const char *function,
-				unsigned int line,
-				TALLOC_CTX *ctx,
-				const char *base,
-				uint16_t flags2,
-				char **pp_dest,
-				const void *src,
-				int src_len,
-				int flags);
-size_t clistr_align_out(struct cli_state *cli, const void *p, int flags);
-
-/* The following definitions come from libsmb/clitrans.c  */
-
-struct tevent_req *cli_trans_send(
-	TALLOC_CTX *mem_ctx, struct event_context *ev,
-	struct cli_state *cli, uint8_t cmd,
-	const char *pipe_name, uint16_t fid, uint16_t function, int flags,
-	uint16_t *setup, uint8_t num_setup, uint8_t max_setup,
-	uint8_t *param, uint32_t num_param, uint32_t max_param,
-	uint8_t *data, uint32_t num_data, uint32_t max_data);
-NTSTATUS cli_trans_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx,
-			uint16_t *recv_flags2,
-			uint16_t **setup, uint8_t min_setup,
-			uint8_t *num_setup,
-			uint8_t **param, uint32_t min_param,
-			uint32_t *num_param,
-			uint8_t **data, uint32_t min_data,
-			uint32_t *num_data);
-NTSTATUS cli_trans(TALLOC_CTX *mem_ctx, struct cli_state *cli,
-		   uint8_t trans_cmd,
-		   const char *pipe_name, uint16_t fid, uint16_t function,
-		   int flags,
-		   uint16_t *setup, uint8_t num_setup, uint8_t max_setup,
-		   uint8_t *param, uint32_t num_param, uint32_t max_param,
-		   uint8_t *data, uint32_t num_data, uint32_t max_data,
-		   uint16_t *recv_flags2,
-		   uint16_t **rsetup, uint8_t min_rsetup, uint8_t *num_rsetup,
-		   uint8_t **rparam, uint32_t min_rparam, uint32_t *num_rparam,
-		   uint8_t **rdata, uint32_t min_rdata, uint32_t *num_rdata);
-
 /* The following definitions come from libsmb/conncache.c  */
 
 NTSTATUS check_negative_conn_cache( const char *domain, const char *server);
@@ -2058,7 +1201,8 @@
 		    int *num_addrs, uint8_t *flags);
 NTSTATUS name_resolve_bcast(const char *name,
 			int name_type,
-			struct ip_service **return_iplist,
+			TALLOC_CTX *mem_ctx,
+			struct sockaddr_storage **return_iplist,
 			int *return_count);
 NTSTATUS resolve_wins(const char *name,
 		int name_type,
@@ -2146,38 +1290,6 @@
 struct netr_SamInfo3 *netsamlogon_cache_get(TALLOC_CTX *mem_ctx, const struct dom_sid *user_sid);
 bool netsamlogon_cache_have(const struct dom_sid *user_sid);
 
-/* The following definitions come from libsmb/smb_seal.c  */
-
-NTSTATUS get_enc_ctx_num(const uint8_t *buf, uint16 *p_enc_ctx_num);
-bool common_encryption_on(struct smb_trans_enc_state *es);
-NTSTATUS common_ntlm_decrypt_buffer(struct ntlmssp_state *ntlmssp_state, char *buf);
-NTSTATUS common_ntlm_encrypt_buffer(struct ntlmssp_state *ntlmssp_state,
-				uint16 enc_ctx_num,
-				char *buf,
-				char **ppbuf_out);
-NTSTATUS common_encrypt_buffer(struct smb_trans_enc_state *es, char *buffer, char **buf_out);
-NTSTATUS common_decrypt_buffer(struct smb_trans_enc_state *es, char *buf);
-void common_free_encryption_state(struct smb_trans_enc_state **pp_es);
-void common_free_enc_buffer(struct smb_trans_enc_state *es, char *buf);
-bool cli_encryption_on(struct cli_state *cli);
-void cli_free_encryption_context(struct cli_state *cli);
-void cli_free_enc_buffer(struct cli_state *cli, char *buf);
-NTSTATUS cli_decrypt_message(struct cli_state *cli);
-NTSTATUS cli_encrypt_message(struct cli_state *cli, char *buf, char **buf_out);
-
-/* The following definitions come from libsmb/clisigning.c  */
-
-bool cli_simple_set_signing(struct cli_state *cli,
-			    const DATA_BLOB user_session_key,
-			    const DATA_BLOB response);
-bool cli_temp_set_signing(struct cli_state *cli);
-void cli_calculate_sign_mac(struct cli_state *cli, char *buf, uint32_t *seqnum);
-bool cli_check_sign_mac(struct cli_state *cli, const char *buf, uint32_t seqnum);
-bool client_is_signing_on(struct cli_state *cli);
-bool client_is_signing_allowed(struct cli_state *cli);
-bool client_is_signing_mandatory(struct cli_state *cli);
-void cli_set_signing_negotiated(struct cli_state *cli);
-
 /* The following definitions come from libsmb/smberr.c  */
 
 const char *smb_dos_err_name(uint8 e_class, uint16 num);
@@ -2213,12 +1325,6 @@
 				     struct dom_sid **sids );
 NTSTATUS change_trust_account_password( const char *domain, const char *remote_machine);
 
-/* The following definitions come from modules/vfs_default.c  */
-
-ssize_t vfswrap_llistxattr(struct vfs_handle_struct *handle, const char *path, char *list, size_t size);
-ssize_t vfswrap_flistxattr(struct vfs_handle_struct *handle, struct files_struct *fsp, char *list, size_t size);
-NTSTATUS vfs_default_init(void);
-
 /* The following definitions come from param/loadparm.c  */
 
 char *lp_smb_ports(void);
@@ -2634,7 +1740,8 @@
 struct parm_struct *lp_get_parameter(const char *param_name);
 struct parm_struct *lp_next_parameter(int snum, int *i, int allparameters);
 bool lp_snum_ok(int iService);
-void lp_add_one_printer(const char *name, const char *comment, void *pdata);
+void lp_add_one_printer(const char *name, const char *comment,
+			const char *location, void *pdata);
 bool lp_loaded(void);
 void lp_killunused(bool (*snumused) (int));
 void lp_kill_all_services(void);
@@ -2695,6 +1802,7 @@
 bool lp_disable_spoolss( void );
 void lp_set_spoolss_state( uint32 state );
 uint32 lp_get_spoolss_state( void );
+struct smb_signing_state;
 bool lp_use_sendfile(int snum, struct smb_signing_state *signing_state);
 void set_use_sendfile(int snum, bool val);
 void set_store_dos_attributes(int snum, bool val);
@@ -2719,152 +1827,6 @@
 uint32 get_int_param( const char* param );
 char* get_string_param( const char* param );
 
-/* The following definitions come from librpc/rpc/rpc_common.c  */
-struct ndr_interface_table;
-bool smb_register_ndr_interface(const struct ndr_interface_table *interface);
-const struct ndr_interface_table *get_iface_from_syntax(
-	const struct ndr_syntax_id *syntax);
-const char *get_pipe_name_from_syntax(TALLOC_CTX *mem_ctx,
-                                     const struct ndr_syntax_id *syntax);
-
-/* The following definitions come from rpc_server/rpc_ncacn_np.c  */
-struct auth_serversupplied_info;
-struct pipes_struct *make_internal_rpc_pipe_p(TALLOC_CTX *mem_ctx,
-					      const struct ndr_syntax_id *syntax,
-					      struct client_address *client_id,
-					      const struct auth_serversupplied_info *session_info,
-					      struct messaging_context *msg_ctx);
-struct dcerpc_binding_handle;
-NTSTATUS rpcint_binding_handle(TALLOC_CTX *mem_ctx,
-			       const struct ndr_interface_table *ndr_table,
-			       struct client_address *client_id,
-			       const struct auth_serversupplied_info *session_info,
-			       struct messaging_context *msg_ctx,
-			       struct dcerpc_binding_handle **binding_handle);
-NTSTATUS rpc_pipe_open_internal(TALLOC_CTX *mem_ctx,
-				const struct ndr_syntax_id *abstract_syntax,
-				const struct auth_serversupplied_info *serversupplied_info,
-				struct client_address *client_id,
-				struct messaging_context *msg_ctx,
-				struct rpc_pipe_client **presult);
-NTSTATUS rpc_pipe_open_interface(TALLOC_CTX *mem_ctx,
-				 const struct ndr_syntax_id *syntax,
-				 const struct auth_serversupplied_info *session_info,
-				 struct client_address *client_id,
-				 struct messaging_context *msg_ctx,
-				 struct rpc_pipe_client **cli_pipe);
-
-/* The following definitions come from rpc_client/cli_pipe_schannel.c  */
-
-NTSTATUS get_schannel_session_key(struct cli_state *cli,
-				  const char *domain,
-				  uint32 *pneg_flags,
-				  struct rpc_pipe_client **presult);
-
-/* The following definitions come from rpc_server/rpc_handles.c  */
-
-size_t num_pipe_handles(struct pipes_struct *p);
-bool init_pipe_handles(struct pipes_struct *p, const struct ndr_syntax_id *syntax);
-bool create_policy_hnd(struct pipes_struct *p, struct policy_handle *hnd, void *data_ptr);
-bool find_policy_by_hnd(struct pipes_struct *p, const struct policy_handle *hnd,
-			void **data_p);
-bool close_policy_hnd(struct pipes_struct *p, struct policy_handle *hnd);
-void close_policy_by_pipe(struct pipes_struct *p);
-bool pipe_access_check(struct pipes_struct *p);
-
-void *_policy_handle_create(struct pipes_struct *p, struct policy_handle *hnd,
-			    uint32_t access_granted, size_t data_size,
-			    const char *type, NTSTATUS *pstatus);
-#define policy_handle_create(_p, _hnd, _access, _type, _pstatus) \
-	(_type *)_policy_handle_create((_p), (_hnd), (_access), sizeof(_type), #_type, \
-				       (_pstatus))
-
-void *_policy_handle_find(struct pipes_struct *p,
-			  const struct policy_handle *hnd,
-			  uint32_t access_required, uint32_t *paccess_granted,
-			  const char *name, const char *location,
-			  NTSTATUS *pstatus);
-#define policy_handle_find(_p, _hnd, _access_required, _access_granted, _type, _pstatus) \
-	(_type *)_policy_handle_find((_p), (_hnd), (_access_required), \
-				     (_access_granted), #_type, __location__, (_pstatus))
-
-
-/* The following definitions come from rpc_server/srv_rpc_register.c  */
-
-struct rpc_srv_callbacks {
-	bool (*init)(void *private_data);
-	bool (*shutdown)(void *private_data);
-	void *private_data;
-};
-
-struct api_struct;
-NTSTATUS rpc_srv_register(int version, const char *clnt,
-			  const char *srv,
-			  const struct ndr_interface_table *iface,
-			  const struct api_struct *cmds, int size,
-			  const struct rpc_srv_callbacks *rpc_srv_cb);
-
-NTSTATUS rpc_srv_unregister(const struct ndr_interface_table *iface);
-
-/* The following definitions come from rpc_server/srv_pipe.c  */
-struct ncacn_packet;
-bool create_next_pdu(struct pipes_struct *p);
-bool api_pipe_bind_auth3(struct pipes_struct *p, struct ncacn_packet *pkt);
-bool setup_fault_pdu(struct pipes_struct *p, NTSTATUS status);
-NTSTATUS rpc_pipe_register_commands(int version, const char *clnt,
-				    const char *srv,
-				    const struct ndr_syntax_id *interface,
-				    const struct api_struct *cmds, int size);
-bool is_known_pipename(const char *cli_filename, struct ndr_syntax_id *syntax);
-
-/* The following definitions come from rpc_server/srv_pipe_hnd.c  */
-
-struct pipes_struct *get_first_internal_pipe(void);
-struct pipes_struct *get_next_internal_pipe(struct pipes_struct *p);
-bool check_open_pipes(void);
-int close_internal_rpc_pipe_hnd(struct pipes_struct *p);
-
-bool fsp_is_np(struct files_struct *fsp);
-struct tsocket_address;
-NTSTATUS np_open(TALLOC_CTX *mem_ctx, const char *name,
-		 const struct tsocket_address *local_address,
-		 const struct tsocket_address *remote_address,
-		 struct client_address *client_id,
-		 struct auth_serversupplied_info *session_info,
-		 struct messaging_context *msg_ctx,
-		 struct fake_file_handle **phandle);
-bool np_read_in_progress(struct fake_file_handle *handle);
-struct tevent_req *np_write_send(TALLOC_CTX *mem_ctx, struct event_context *ev,
-				 struct fake_file_handle *handle,
-				 const uint8_t *data, size_t len);
-NTSTATUS np_write_recv(struct tevent_req *req, ssize_t *pnwritten);
-struct tevent_req *np_read_send(TALLOC_CTX *mem_ctx, struct event_context *ev,
-				struct fake_file_handle *handle,
-				uint8_t *data, size_t len);
-NTSTATUS np_read_recv(struct tevent_req *req, ssize_t *nread,
-		      bool *is_data_outstanding);
-
-ssize_t process_incoming_data(struct pipes_struct *p, char *data, size_t n);
-
-/* The following definitions come from rpc_server/srv_spoolss_nt.c  */
-void srv_spoolss_cleanup(void);
-
-void do_drv_upgrade_printer(struct messaging_context *msg,
-			    void *private_data,
-			    uint32_t msg_type,
-			    struct server_id server_id,
-			    DATA_BLOB *data);
-void update_monitored_printq_cache(struct messaging_context *msg_ctx);
-
-/* The following definitions come from rpc_server/srv_srvsvc_nt.c  */
-
-char *valid_share_pathname(TALLOC_CTX *ctx, const char *dos_pathname);
-
-/* The following definitions come from rpc_server/srv_svcctl_nt.c  */
-
-bool init_service_op_table( void );
-bool shutdown_service_op_table(void);
-
 /* The following definitions come from lib/server_contexts.c  */
 struct tevent_context *server_event_context(void);
 void server_event_context_free(void);
@@ -2889,13 +1851,6 @@
 char *stdin_new_passwd( void);
 char *get_pass( const char *prompt, bool stdin_get);
 
-/* The following definitions come from winbindd/nss_info.c  */
-
-
-/* The following definitions come from winbindd/nss_info_template.c  */
-
-NTSTATUS nss_info_template_init( void );
-
 /* The following definitions come from lib/avahi.c */
 
 struct AvahiPoll *tevent_avahi_poll(TALLOC_CTX *mem_ctx,

Modified: branches/samba/experimental/source3/include/smb.h
===================================================================
--- branches/samba/experimental/source3/include/smb.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/include/smb.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -83,14 +83,6 @@
 
 #define DIR_STRUCT_SIZE 43
 
-/* these define the attribute byte as seen by DOS */
-#define aRONLY (1L<<0)		/* 0x01 */
-#define aHIDDEN (1L<<1)		/* 0x02 */
-#define aSYSTEM (1L<<2)		/* 0x04 */
-#define aVOLID (1L<<3)		/* 0x08 */
-#define aDIR (1L<<4)		/* 0x10 */
-#define aARCH (1L<<5)		/* 0x20 */
-
 /* deny modes */
 #define DENY_DOS 0
 #define DENY_ALL 1
@@ -1086,6 +1078,7 @@
 #define FILE_ATTRIBUTE_READONLY		0x001L
 #define FILE_ATTRIBUTE_HIDDEN		0x002L
 #define FILE_ATTRIBUTE_SYSTEM		0x004L
+#define FILE_ATTRIBUTE_VOLUME		0x008L
 #define FILE_ATTRIBUTE_DIRECTORY	0x010L
 #define FILE_ATTRIBUTE_ARCHIVE		0x020L
 #define FILE_ATTRIBUTE_NORMAL		0x080L
@@ -1749,4 +1742,20 @@
 /* Used inside aio code. */
 struct aio_extra;
 
+/*
+ * Reasons for cache flush.
+ */
+
+enum flush_reason_enum {
+    SEEK_FLUSH,
+    READ_FLUSH,
+    WRITE_FLUSH,
+    READRAW_FLUSH,
+    OPLOCK_RELEASE_FLUSH,
+    CLOSE_FLUSH,
+    SYNC_FLUSH,
+    SIZECHANGE_FLUSH,
+    /* NUM_FLUSH_REASONS must remain the last value in the enumeration. */
+    NUM_FLUSH_REASONS};
+
 #endif /* _SMB_H */

Modified: branches/samba/experimental/source3/include/smb_macros.h
===================================================================
--- branches/samba/experimental/source3/include/smb_macros.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/include/smb_macros.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -28,11 +28,11 @@
 #define BITSETW(ptr,bit) ((SVAL(ptr,0) & (1<<(bit)))!=0)
 
 /* for readability... */
-#define IS_DOS_READONLY(test_mode) (((test_mode) & aRONLY) != 0)
-#define IS_DOS_DIR(test_mode)      (((test_mode) & aDIR) != 0)
-#define IS_DOS_ARCHIVE(test_mode)  (((test_mode) & aARCH) != 0)
-#define IS_DOS_SYSTEM(test_mode)   (((test_mode) & aSYSTEM) != 0)
-#define IS_DOS_HIDDEN(test_mode)   (((test_mode) & aHIDDEN) != 0)
+#define IS_DOS_READONLY(test_mode) (((test_mode) & FILE_ATTRIBUTE_READONLY) != 0)
+#define IS_DOS_DIR(test_mode)      (((test_mode) & FILE_ATTRIBUTE_DIRECTORY) != 0)
+#define IS_DOS_ARCHIVE(test_mode)  (((test_mode) & FILE_ATTRIBUTE_ARCHIVE) != 0)
+#define IS_DOS_SYSTEM(test_mode)   (((test_mode) & FILE_ATTRIBUTE_SYSTEM) != 0)
+#define IS_DOS_HIDDEN(test_mode)   (((test_mode) & FILE_ATTRIBUTE_HIDDEN) != 0)
 
 #define SMB_WARN(condition, message) \
     ((condition) ? (void)0 : \

Modified: branches/samba/experimental/source3/include/util_tdb.h
===================================================================
--- branches/samba/experimental/source3/include/util_tdb.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/include/util_tdb.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -26,10 +26,6 @@
 #include "../libcli/util/ntstatus.h" /* for map_nt_error_from_tdb() */
 #include "../../lib/util/util_tdb.h"
 
-struct tdb_wrap {
-	struct tdb_context *tdb;
-};
-
 int tdb_chainlock_with_timeout( struct tdb_context *tdb, TDB_DATA key,
 				unsigned int timeout);
 int tdb_lock_bystring_with_timeout(struct tdb_context *tdb, const char *keyval,
@@ -51,10 +47,6 @@
 struct tdb_context *tdb_open_log(const char *name, int hash_size,
 				 int tdb_flags, int open_flags, mode_t mode);
 
-struct tdb_wrap *tdb_wrap_open(TALLOC_CTX *mem_ctx,
-			       const char *name, int hash_size, int tdb_flags,
-			       int open_flags, mode_t mode);
-
 NTSTATUS map_nt_error_from_tdb(enum TDB_ERROR err);
 
 int tdb_data_cmp(TDB_DATA t1, TDB_DATA t2);

Modified: branches/samba/experimental/source3/include/version.h
===================================================================
--- branches/samba/experimental/source3/include/version.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/include/version.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -2,8 +2,8 @@
 #define SAMBA_VERSION_MAJOR 3
 #define SAMBA_VERSION_MINOR 6
 #define SAMBA_VERSION_RELEASE 0
-#define SAMBA_VERSION_PRE_RELEASE 3
-#define SAMBA_VERSION_OFFICIAL_STRING "3.6.0pre3"
+#define SAMBA_VERSION_RC_RELEASE 1
+#define SAMBA_VERSION_OFFICIAL_STRING "3.6.0rc1"
 #ifdef SAMBA_VERSION_VENDOR_FUNCTION
 #  define SAMBA_VERSION_STRING SAMBA_VERSION_VENDOR_FUNCTION
 #else /* SAMBA_VERSION_VENDOR_FUNCTION */

Modified: branches/samba/experimental/source3/intl/lang_tdb.c
===================================================================
--- branches/samba/experimental/source3/intl/lang_tdb.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/intl/lang_tdb.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -20,6 +20,7 @@
 #include "includes.h"
 #include "system/filesys.h"
 #include "intl/lang_tdb.h"
+#include "util_tdb.h"
 
 static TDB_CONTEXT *tdb;
 

Modified: branches/samba/experimental/source3/lib/addrchange.c
===================================================================
--- branches/samba/experimental/source3/lib/addrchange.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/lib/addrchange.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -18,6 +18,7 @@
 
 #include "includes.h"
 #include "lib/addrchange.h"
+#include "../lib/util/tevent_ntstatus.h"
 
 #if HAVE_LINUX_RTNETLINK_H
 

Modified: branches/samba/experimental/source3/lib/ctdbd_conn.c
===================================================================
--- branches/samba/experimental/source3/lib/ctdbd_conn.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/lib/ctdbd_conn.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -19,6 +19,7 @@
 */
 
 #include "includes.h"
+#include "util_tdb.h"
 
 #ifdef CLUSTER_SUPPORT
 

Modified: branches/samba/experimental/source3/lib/dbwrap.c
===================================================================
--- branches/samba/experimental/source3/lib/dbwrap.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/lib/dbwrap.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -21,6 +21,7 @@
 
 #include "includes.h"
 #include "dbwrap.h"
+#include "util_tdb.h"
 #ifdef CLUSTER_SUPPORT
 #include "ctdb_private.h"
 #endif

Modified: branches/samba/experimental/source3/lib/dbwrap_ctdb.c
===================================================================
--- branches/samba/experimental/source3/lib/dbwrap_ctdb.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/lib/dbwrap_ctdb.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -20,6 +20,8 @@
 
 #include "includes.h"
 #include "system/filesys.h"
+#include "lib/util/tdb_wrap.h"
+#include "util_tdb.h"
 #ifdef CLUSTER_SUPPORT
 #include "ctdb.h"
 #include "ctdb_private.h"

Modified: branches/samba/experimental/source3/lib/dbwrap_tdb.c
===================================================================
--- branches/samba/experimental/source3/lib/dbwrap_tdb.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/lib/dbwrap_tdb.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -19,6 +19,7 @@
 
 #include "includes.h"
 #include "dbwrap.h"
+#include "lib/util/tdb_wrap.h"
 
 struct db_tdb_ctx {
 	struct tdb_wrap *wtdb;

Modified: branches/samba/experimental/source3/lib/dbwrap_util.c
===================================================================
--- branches/samba/experimental/source3/lib/dbwrap_util.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/lib/dbwrap_util.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -21,6 +21,7 @@
 
 #include "includes.h"
 #include "dbwrap.h"
+#include "util_tdb.h"
 
 int32_t dbwrap_fetch_int32(struct db_context *db, const char *keystr)
 {

Modified: branches/samba/experimental/source3/lib/eventlog/eventlog.c
===================================================================
--- branches/samba/experimental/source3/lib/eventlog/eventlog.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/lib/eventlog/eventlog.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -24,6 +24,7 @@
 #include "system/filesys.h"
 #include "lib/eventlog/eventlog.h"
 #include "../libcli/security/security.h"
+#include "util_tdb.h"
 
 /* maintain a list of open eventlog tdbs with reference counts */
 

Modified: branches/samba/experimental/source3/lib/eventlog/eventlog.h
===================================================================
--- branches/samba/experimental/source3/lib/eventlog/eventlog.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/lib/eventlog/eventlog.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -17,6 +17,8 @@
  *  along with this program; if not, see <http://www.gnu.org/licenses/>.
  */
 
+#include <tdb.h>
+
 /* Defines for TDB keys */
 #define  EVT_OLDEST_ENTRY  "INFO/oldest_entry"
 #define  EVT_NEXT_RECORD   "INFO/next_record"

Modified: branches/samba/experimental/source3/lib/events.c
===================================================================
--- branches/samba/experimental/source3/lib/events.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/lib/events.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -19,7 +19,7 @@
 */
 
 #include "includes.h"
-#include <tevent_internal.h>
+#include "lib/tevent/tevent_internal.h"
 #include "../lib/util/select.h"
 #include "system/select.h"
 

Modified: branches/samba/experimental/source3/lib/filename_util.c
===================================================================
--- branches/samba/experimental/source3/lib/filename_util.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/lib/filename_util.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -17,7 +17,6 @@
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 #include "includes.h"
-#include "smbd/smbd.h"
 
 /**
  * XXX: This is temporary and there should be no callers of this outside of

Modified: branches/samba/experimental/source3/lib/fncall.c
===================================================================
--- branches/samba/experimental/source3/lib/fncall.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/lib/fncall.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -18,6 +18,7 @@
  */
 
 #include "includes.h"
+#include "../lib/util/tevent_unix.h"
 
 #if WITH_PTHREADPOOL
 

Modified: branches/samba/experimental/source3/lib/g_lock.c
===================================================================
--- branches/samba/experimental/source3/lib/g_lock.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/lib/g_lock.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -20,6 +20,7 @@
 #include "includes.h"
 #include "system/filesys.h"
 #include "g_lock.h"
+#include "util_tdb.h"
 #include "ctdbd_conn.h"
 #include "../lib/util/select.h"
 #include "system/select.h"

Modified: branches/samba/experimental/source3/lib/gencache.c
===================================================================
--- branches/samba/experimental/source3/lib/gencache.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/lib/gencache.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -24,6 +24,7 @@
 #include "includes.h"
 #include "system/filesys.h"
 #include "system/glob.h"
+#include "util_tdb.h"
 
 #undef  DBGC_CLASS
 #define DBGC_CLASS DBGC_TDB

Modified: branches/samba/experimental/source3/lib/messages_ctdbd.c
===================================================================
--- branches/samba/experimental/source3/lib/messages_ctdbd.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/lib/messages_ctdbd.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -19,6 +19,7 @@
 
 #include "includes.h"
 #include "messages.h"
+#include "util_tdb.h"
 
 #ifdef CLUSTER_SUPPORT
 

Modified: branches/samba/experimental/source3/lib/messages_local.c
===================================================================
--- branches/samba/experimental/source3/lib/messages_local.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/lib/messages_local.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -45,6 +45,7 @@
 #include "includes.h"
 #include "system/filesys.h"
 #include "messages.h"
+#include "lib/util/tdb_wrap.h"
 
 struct messaging_tdb_context {
 	struct messaging_context *msg_ctx;

Modified: branches/samba/experimental/source3/lib/netapi/cm.c
===================================================================
--- branches/samba/experimental/source3/lib/netapi/cm.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/lib/netapi/cm.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -22,6 +22,7 @@
 
 #include "lib/netapi/netapi.h"
 #include "lib/netapi/netapi_private.h"
+#include "libsmb/libsmb.h"
 #include "rpc_client/cli_pipe.h"
 
 /********************************************************************

Modified: branches/samba/experimental/source3/lib/netapi/localgroup.c
===================================================================
--- branches/samba/experimental/source3/lib/netapi/localgroup.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/lib/netapi/localgroup.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -1344,7 +1344,7 @@
 	werr = WERR_OK;
 
  done:
-	if (is_valid_policy_hnd(&alias_handle)) {
+	if (b && is_valid_policy_hnd(&alias_handle)) {
 		dcerpc_samr_Close(b, talloc_tos(), &alias_handle, &result);
 	}
 

Modified: branches/samba/experimental/source3/lib/netapi/netapi_private.h
===================================================================
--- branches/samba/experimental/source3/lib/netapi/netapi_private.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/lib/netapi/netapi_private.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -29,6 +29,8 @@
 	} \
 	return fn ## _r(ctx, r);
 
+struct dcerpc_binding_handle;
+
 struct libnetapi_private_ctx {
 	struct {
 		const char *domain_name;

Modified: branches/samba/experimental/source3/lib/netapi/serverinfo.c
===================================================================
--- branches/samba/experimental/source3/lib/netapi/serverinfo.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/lib/netapi/serverinfo.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -540,7 +540,8 @@
 static WERROR NetServerSetInfo_l_1005(struct libnetapi_ctx *ctx,
 				      struct NetServerSetInfo *r)
 {
-	WERROR werr;
+	WERROR werr = WERR_OK;
+	sbcErr err;
 	struct smbconf_ctx *conf_ctx;
 	struct srvsvc_NetSrvInfo1005 *info1005;
 
@@ -563,13 +564,24 @@
 		return WERR_NOT_SUPPORTED;
 	}
 
-	werr = smbconf_init_reg(ctx, &conf_ctx, NULL);
-	if (!W_ERROR_IS_OK(werr)) {
+	err = smbconf_init_reg(ctx, &conf_ctx, NULL);
+	if (!SBC_ERROR_IS_OK(err)) {
+		libnetapi_set_error_string(ctx,
+			"Could not initialize backend: %s",
+			sbcErrorString(err));
+		werr = WERR_NO_SUCH_SERVICE;
 		goto done;
 	}
 
-	werr = smbconf_set_global_parameter(conf_ctx, "server string",
+	err = smbconf_set_global_parameter(conf_ctx, "server string",
 					    info1005->comment);
+	if (!SBC_ERROR_IS_OK(err)) {
+		libnetapi_set_error_string(ctx,
+			"Could not set global parameter: %s",
+			sbcErrorString(err));
+		werr = WERR_NO_SUCH_SERVICE;
+		goto done;
+	}
 
  done:
 	smbconf_shutdown(conf_ctx);

Modified: branches/samba/experimental/source3/lib/pthreadpool/pthreadpool.c
===================================================================
--- branches/samba/experimental/source3/lib/pthreadpool/pthreadpool.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/lib/pthreadpool/pthreadpool.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -120,6 +120,8 @@
 
 	ret = pthread_mutex_init(&pool->mutex, NULL);
 	if (ret != 0) {
+		close(pool->sig_pipe[0]);
+		close(pool->sig_pipe[1]);
 		free(pool);
 		return ret;
 	}
@@ -127,6 +129,8 @@
 	ret = pthread_cond_init(&pool->condvar, NULL);
 	if (ret != 0) {
 		pthread_mutex_destroy(&pool->mutex);
+		close(pool->sig_pipe[0]);
+		close(pool->sig_pipe[1]);
 		free(pool);
 		return ret;
 	}
@@ -143,6 +147,8 @@
 	if (ret != 0) {
 		pthread_cond_destroy(&pool->condvar);
 		pthread_mutex_destroy(&pool->mutex);
+		close(pool->sig_pipe[0]);
+		close(pool->sig_pipe[1]);
 		free(pool);
 		return ret;
 	}

Modified: branches/samba/experimental/source3/lib/server_mutex.c
===================================================================
--- branches/samba/experimental/source3/lib/server_mutex.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/lib/server_mutex.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -20,6 +20,8 @@
 
 #include "includes.h"
 #include "system/filesys.h"
+#include "lib/util/tdb_wrap.h"
+#include "util_tdb.h"
 
 /* For reasons known only to MS, many of their NT/Win2k versions
    need serialised access only.  Two connections at the same time

Modified: branches/samba/experimental/source3/lib/serverid.c
===================================================================
--- branches/samba/experimental/source3/lib/serverid.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/lib/serverid.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -20,7 +20,9 @@
 #include "includes.h"
 #include "system/filesys.h"
 #include "serverid.h"
+#include "util_tdb.h"
 #include "dbwrap.h"
+#include "lib/util/tdb_wrap.h"
 
 struct serverid_key {
 	pid_t pid;

Modified: branches/samba/experimental/source3/lib/sessionid_tdb.c
===================================================================
--- branches/samba/experimental/source3/lib/sessionid_tdb.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/lib/sessionid_tdb.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -21,6 +21,7 @@
 #include "system/filesys.h"
 #include "dbwrap.h"
 #include "session.h"
+#include "util_tdb.h"
 
 static struct db_context *session_db_ctx(void)
 {

Modified: branches/samba/experimental/source3/lib/sharesec.c
===================================================================
--- branches/samba/experimental/source3/lib/sharesec.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/lib/sharesec.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -22,6 +22,7 @@
 #include "../libcli/security/security.h"
 #include "../librpc/gen_ndr/ndr_security.h"
 #include "dbwrap.h"
+#include "util_tdb.h"
 
 /*******************************************************************
  Create the share security tdb.

Modified: branches/samba/experimental/source3/lib/smbconf/smbconf_init.c
===================================================================
--- branches/samba/experimental/source3/lib/smbconf/smbconf_init.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/lib/smbconf/smbconf_init.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -34,28 +34,28 @@
  * -  "registry" or "reg"
  * -  "txt" or "file"
  */
-WERROR smbconf_init(TALLOC_CTX *mem_ctx, struct smbconf_ctx **conf_ctx,
+sbcErr smbconf_init(TALLOC_CTX *mem_ctx, struct smbconf_ctx **conf_ctx,
 		    const char *source)
 {
-	WERROR werr;
+	sbcErr err;
 	char *backend = NULL;
 	char *path = NULL;
 	char *sep;
 	TALLOC_CTX *tmp_ctx = talloc_stackframe();
 
 	if (conf_ctx == NULL) {
-		werr = WERR_INVALID_PARAM;
+		err = SBC_ERR_INVALID_PARAM;
 		goto done;
 	}
 
 	if ((source == NULL) || (*source == '\0')) {
-		werr = WERR_INVALID_PARAM;
+		err = SBC_ERR_INVALID_PARAM;
 		goto done;
 	}
 
 	backend = talloc_strdup(tmp_ctx, source);
 	if (backend == NULL) {
-		werr = WERR_NOMEM;
+		err = SBC_ERR_NOMEM;
 		goto done;
 	}
 
@@ -69,16 +69,16 @@
 	}
 
 	if (strequal(backend, "registry") || strequal(backend, "reg")) {
-		werr = smbconf_init_reg(mem_ctx, conf_ctx, path);
+		err = smbconf_init_reg(mem_ctx, conf_ctx, path);
 	} else if (strequal(backend, "file") || strequal(backend, "txt")) {
-		werr = smbconf_init_txt(mem_ctx, conf_ctx, path);
+		err = smbconf_init_txt(mem_ctx, conf_ctx, path);
 	} else if (sep == NULL) {
 		/*
 		 * If no separator was given in the source, and the string is
 		 * not a known backend, assume file backend and use the source
 		 * string as a path argument.
 		 */
-		werr = smbconf_init_txt(mem_ctx, conf_ctx, backend);
+		err = smbconf_init_txt(mem_ctx, conf_ctx, backend);
 	} else {
 		/*
 		 * Separator was specified but this is not a known backend.
@@ -87,10 +87,10 @@
 		 * This may occur with an include directive like this:
 		 * 'include = /path/to/file.%T'
 		 */
-		werr = smbconf_init_txt(mem_ctx, conf_ctx, source);
+		err = smbconf_init_txt(mem_ctx, conf_ctx, source);
 	}
 
 done:
 	talloc_free(tmp_ctx);
-	return werr;
+	return err;
 }

Modified: branches/samba/experimental/source3/lib/smbconf/smbconf_init.h
===================================================================
--- branches/samba/experimental/source3/lib/smbconf/smbconf_init.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/lib/smbconf/smbconf_init.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -26,7 +26,7 @@
  * intialization dispatcher function.
  * takes source string in the form of "backend:path"
  */
-WERROR smbconf_init(TALLOC_CTX *mem_ctx, struct smbconf_ctx **conf_ctx,
+sbcErr smbconf_init(TALLOC_CTX *mem_ctx, struct smbconf_ctx **conf_ctx,
 		    const char *source);
 
 #endif /*  _LIBSMBCONF_INIT_H_  */

Modified: branches/samba/experimental/source3/lib/smbconf/smbconf_reg.c
===================================================================
--- branches/samba/experimental/source3/lib/smbconf/smbconf_reg.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/lib/smbconf/smbconf_reg.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -83,7 +83,7 @@
 /**
  * Open a subkey of the base key (i.e a service)
  */
-static WERROR smbconf_reg_open_service_key(TALLOC_CTX *mem_ctx,
+static sbcErr smbconf_reg_open_service_key(TALLOC_CTX *mem_ctx,
 					   struct smbconf_ctx *ctx,
 					   const char *servicename,
 					   uint32 desired_access,
@@ -93,16 +93,18 @@
 
 	if (servicename == NULL) {
 		*key = rpd(ctx)->base_key;
-		return WERR_OK;
+		return SBC_ERR_OK;
 	}
 	werr = reg_openkey(mem_ctx, rpd(ctx)->base_key, servicename,
 			   desired_access, key);
-
 	if (W_ERROR_EQUAL(werr, WERR_BADFILE)) {
-		werr = WERR_NO_SUCH_SERVICE;
+		return SBC_ERR_NO_SUCH_SERVICE;
 	}
+	if (!W_ERROR_IS_OK(werr)) {
+		return SBC_ERR_NOMEM;
+	}
 
-	return werr;
+	return SBC_ERR_OK;
 }
 
 /**
@@ -127,12 +129,13 @@
 /**
  * create a subkey of the base key (i.e. a service...)
  */
-static WERROR smbconf_reg_create_service_key(TALLOC_CTX *mem_ctx,
+static sbcErr smbconf_reg_create_service_key(TALLOC_CTX *mem_ctx,
 					     struct smbconf_ctx *ctx,
 					     const char * subkeyname,
 					     struct registry_key **newkey)
 {
-	WERROR werr = WERR_OK;
+	WERROR werr;
+	sbcErr err = SBC_ERR_OK;
 	TALLOC_CTX *create_ctx;
 	enum winreg_CreateAction action = REG_ACTION_NONE;
 
@@ -145,26 +148,28 @@
 			     REG_KEY_WRITE, newkey, &action);
 	if (W_ERROR_IS_OK(werr) && (action != REG_CREATED_NEW_KEY)) {
 		DEBUG(10, ("Key '%s' already exists.\n", subkeyname));
-		werr = WERR_FILE_EXISTS;
+		err = SBC_ERR_FILE_EXISTS;
 	}
 	if (!W_ERROR_IS_OK(werr)) {
 		DEBUG(5, ("Error creating key %s: %s\n",
 			 subkeyname, win_errstr(werr)));
+		err = SBC_ERR_UNKNOWN_FAILURE;
 	}
 
 	talloc_free(create_ctx);
-	return werr;
+	return err;
 }
 
 /**
  * add a value to a key.
  */
-static WERROR smbconf_reg_set_value(struct registry_key *key,
+static sbcErr smbconf_reg_set_value(struct registry_key *key,
 				    const char *valname,
 				    const char *valstr)
 {
 	struct registry_value val;
 	WERROR werr = WERR_OK;
+	sbcErr err;
 	char *subkeyname;
 	const char *canon_valname;
 	const char *canon_valstr;
@@ -180,14 +185,14 @@
 			DEBUG(5, ("invalid value '%s' given for "
 				  "parameter '%s'\n", valstr, valname));
 		}
-		werr = WERR_INVALID_PARAM;
+		err = SBC_ERR_INVALID_PARAM;
 		goto done;
 	}
 
 	if (smbconf_reg_valname_forbidden(canon_valname)) {
 		DEBUG(5, ("Parameter '%s' not allowed in registry.\n",
 			  canon_valname));
-		werr = WERR_INVALID_PARAM;
+		err = SBC_ERR_INVALID_PARAM;
 		goto done;
 	}
 
@@ -195,7 +200,7 @@
 	if ((subkeyname == NULL) || (*(subkeyname +1) == '\0')) {
 		DEBUG(5, ("Invalid registry key '%s' given as "
 			  "smbconf section.\n", key->key->name));
-		werr = WERR_INVALID_PARAM;
+		err = SBC_ERR_INVALID_PARAM;
 		goto done;
 	}
 	subkeyname++;
@@ -205,7 +210,7 @@
 		DEBUG(5, ("Global parameter '%s' not allowed in "
 			  "service definition ('%s').\n", canon_valname,
 			  subkeyname));
-		werr = WERR_INVALID_PARAM;
+		err = SBC_ERR_INVALID_PARAM;
 		goto done;
 	}
 
@@ -213,7 +218,7 @@
 
 	val.type = REG_SZ;
 	if (!push_reg_sz(talloc_tos(), &val.data, canon_valstr)) {
-		werr = WERR_NOMEM;
+		err = SBC_ERR_NOMEM;
 		goto done;
 	}
 
@@ -222,37 +227,41 @@
 		DEBUG(5, ("Error adding value '%s' to "
 			  "key '%s': %s\n",
 			  canon_valname, key->key->name, win_errstr(werr)));
+		err = SBC_ERR_NOMEM;
+		goto done;
 	}
 
+	err = SBC_ERR_OK;
 done:
-	return werr;
+	return err;
 }
 
-static WERROR smbconf_reg_set_multi_sz_value(struct registry_key *key,
+static sbcErr smbconf_reg_set_multi_sz_value(struct registry_key *key,
 					     const char *valname,
 					     const uint32_t num_strings,
 					     const char **strings)
 {
 	WERROR werr;
+	sbcErr err = SBC_ERR_OK;
 	struct registry_value *value;
 	uint32_t count;
 	TALLOC_CTX *tmp_ctx = talloc_stackframe();
 	const char **array;
 
 	if (strings == NULL) {
-		werr = WERR_INVALID_PARAM;
+		err = SBC_ERR_INVALID_PARAM;
 		goto done;
 	}
 
 	array = talloc_zero_array(tmp_ctx, const char *, num_strings + 1);
 	if (array == NULL) {
-		werr = WERR_NOMEM;
+		err = SBC_ERR_NOMEM;
 		goto done;
 	}
 
 	value = TALLOC_ZERO_P(tmp_ctx, struct registry_value);
 	if (value == NULL) {
-		werr = WERR_NOMEM;
+		err = SBC_ERR_NOMEM;
 		goto done;
 	}
 
@@ -261,13 +270,13 @@
 	for (count = 0; count < num_strings; count++) {
 		array[count] = talloc_strdup(value, strings[count]);
 		if (array[count] == NULL) {
-			werr = WERR_NOMEM;
+			err = SBC_ERR_NOMEM;
 			goto done;
 		}
 	}
 
 	if (!push_reg_multi_sz(value, &value->data, array)) {
-		werr = WERR_NOMEM;
+		err = SBC_ERR_NOMEM;
 		goto done;
 	}
 
@@ -275,11 +284,12 @@
 	if (!W_ERROR_IS_OK(werr)) {
 		DEBUG(5, ("Error adding value '%s' to key '%s': %s\n",
 			  valname, key->key->name, win_errstr(werr)));
+		err = SBC_ERR_ACCESS_DENIED;
 	}
 
 done:
 	talloc_free(tmp_ctx);
-	return werr;
+	return err;
 }
 
 /**
@@ -342,12 +352,13 @@
 	return result;
 }
 
-static WERROR smbconf_reg_get_includes_internal(TALLOC_CTX *mem_ctx,
+static sbcErr smbconf_reg_get_includes_internal(TALLOC_CTX *mem_ctx,
 						struct registry_key *key,
 						uint32_t *num_includes,
 						char ***includes)
 {
 	WERROR werr;
+	sbcErr err;
 	uint32_t count;
 	struct registry_value *value = NULL;
 	char **tmp_includes = NULL;
@@ -358,31 +369,33 @@
 		/* no includes */
 		*num_includes = 0;
 		*includes = NULL;
-		werr = WERR_OK;
+		err = SBC_ERR_OK;
 		goto done;
 	}
 
 	werr = reg_queryvalue(tmp_ctx, key, INCLUDES_VALNAME, &value);
 	if (!W_ERROR_IS_OK(werr)) {
+		err = SBC_ERR_ACCESS_DENIED;
 		goto done;
 	}
 
 	if (value->type != REG_MULTI_SZ) {
 		/* wrong type -- ignore */
+		err = SBC_ERR_OK;
 		goto done;
 	}
 
 	if (!pull_reg_multi_sz(tmp_ctx, &value->data, &array)) {
-		werr = WERR_NOMEM;
+		err = SBC_ERR_NOMEM;
 		goto done;
 	}
 
 	for (count = 0; array[count] != NULL; count++) {
-		werr = smbconf_add_string_to_array(tmp_ctx,
+		err = smbconf_add_string_to_array(tmp_ctx,
 					&tmp_includes,
 					count,
 					array[count]);
-		if (!W_ERROR_IS_OK(werr)) {
+		if (!SBC_ERROR_IS_OK(err)) {
 			goto done;
 		}
 	}
@@ -390,7 +403,7 @@
 	if (count > 0) {
 		*includes = talloc_move(mem_ctx, &tmp_includes);
 		if (*includes == NULL) {
-			werr = WERR_NOMEM;
+			err = SBC_ERR_NOMEM;
 			goto done;
 		}
 		*num_includes = count;
@@ -399,16 +412,17 @@
 		*includes = NULL;
 	}
 
+	err = SBC_ERR_OK;
 done:
 	talloc_free(tmp_ctx);
-	return werr;
+	return err;
 }
 
 /**
  * Get the values of a key as a list of value names
  * and a list of value strings (ordered)
  */
-static WERROR smbconf_reg_get_values(TALLOC_CTX *mem_ctx,
+static sbcErr smbconf_reg_get_values(TALLOC_CTX *mem_ctx,
 				     struct registry_key *key,
 				     uint32_t *num_values,
 				     char ***value_names,
@@ -416,6 +430,7 @@
 {
 	TALLOC_CTX *tmp_ctx = NULL;
 	WERROR werr = WERR_OK;
+	sbcErr err;
 	uint32_t count;
 	struct registry_value *valvalue = NULL;
 	char *valname = NULL;
@@ -428,7 +443,7 @@
 	if ((num_values == NULL) || (value_names == NULL) ||
 	    (value_strings == NULL))
 	{
-		werr = WERR_INVALID_PARAM;
+		err = SBC_ERR_INVALID_PARAM;
 		goto done;
 	}
 
@@ -445,42 +460,44 @@
 			continue;
 		}
 
-		werr = smbconf_add_string_to_array(tmp_ctx,
-						   &tmp_valnames,
-						   tmp_num_values, valname);
-		if (!W_ERROR_IS_OK(werr)) {
+		err = smbconf_add_string_to_array(tmp_ctx,
+						  &tmp_valnames,
+						  tmp_num_values, valname);
+		if (!SBC_ERROR_IS_OK(err)) {
 			goto done;
 		}
 
 		valstring = smbconf_format_registry_value(tmp_ctx, valvalue);
-		werr = smbconf_add_string_to_array(tmp_ctx, &tmp_valstrings,
-						   tmp_num_values, valstring);
-		if (!W_ERROR_IS_OK(werr)) {
+		err = smbconf_add_string_to_array(tmp_ctx, &tmp_valstrings,
+						  tmp_num_values, valstring);
+		if (!SBC_ERROR_IS_OK(err)) {
 			goto done;
 		}
 		tmp_num_values++;
 	}
 	if (!W_ERROR_EQUAL(WERR_NO_MORE_ITEMS, werr)) {
+		err = SBC_ERR_NOMEM;
 		goto done;
 	}
 
 	/* now add the includes at the end */
-	werr = smbconf_reg_get_includes_internal(tmp_ctx, key, &num_includes,
+	err = smbconf_reg_get_includes_internal(tmp_ctx, key, &num_includes,
 						 &includes);
-	if (!W_ERROR_IS_OK(werr)) {
+	if (!SBC_ERROR_IS_OK(err)) {
 		goto done;
 	}
+
 	for (count = 0; count < num_includes; count++) {
-		werr = smbconf_add_string_to_array(tmp_ctx, &tmp_valnames,
-						   tmp_num_values, "include");
-		if (!W_ERROR_IS_OK(werr)) {
+		err = smbconf_add_string_to_array(tmp_ctx, &tmp_valnames,
+						  tmp_num_values, "include");
+		if (!SBC_ERROR_IS_OK(err)) {
 			goto done;
 		}
 
-		werr = smbconf_add_string_to_array(tmp_ctx, &tmp_valstrings,
-						   tmp_num_values,
-						   includes[count]);
-		if (!W_ERROR_IS_OK(werr)) {
+		err = smbconf_add_string_to_array(tmp_ctx, &tmp_valstrings,
+						  tmp_num_values,
+						  includes[count]);
+		if (!SBC_ERROR_IS_OK(err)) {
 			goto done;
 		}
 
@@ -498,7 +515,7 @@
 
 done:
 	talloc_free(tmp_ctx);
-	return werr;
+	return err;
 }
 
 static bool smbconf_reg_key_has_values(struct registry_key *key)
@@ -527,9 +544,10 @@
 /**
  * delete all values from a key
  */
-static WERROR smbconf_reg_delete_values(struct registry_key *key)
+static sbcErr smbconf_reg_delete_values(struct registry_key *key)
 {
 	WERROR werr;
+	sbcErr err;
 	char *valname;
 	struct registry_value *valvalue;
 	uint32_t count;
@@ -542,6 +560,7 @@
 	{
 		werr = reg_deletevalue(key, valname);
 		if (!W_ERROR_IS_OK(werr)) {
+			err = SBC_ERR_ACCESS_DENIED;
 			goto done;
 		}
 	}
@@ -550,14 +569,15 @@
 			  "Error enumerating values of %s: %s\n",
 			  key->key->name,
 			  win_errstr(werr)));
+		err = SBC_ERR_ACCESS_DENIED;
 		goto done;
 	}
 
-	werr = WERR_OK;
+	err = SBC_ERR_OK;
 
 done:
 	talloc_free(mem_ctx);
-	return werr;
+	return err;
 }
 
 /**********************************************************************
@@ -569,9 +589,10 @@
 /**
  * initialize the registry smbconf backend
  */
-static WERROR smbconf_reg_init(struct smbconf_ctx *ctx, const char *path)
+static sbcErr smbconf_reg_init(struct smbconf_ctx *ctx, const char *path)
 {
 	WERROR werr = WERR_OK;
+	sbcErr err;
 	struct security_token *token;
 
 	if (path == NULL) {
@@ -579,7 +600,7 @@
 	}
 	ctx->path = talloc_strdup(ctx, path);
 	if (ctx->path == NULL) {
-		werr = WERR_NOMEM;
+		err = SBC_ERR_NOMEM;
 		goto done;
 	}
 
@@ -588,17 +609,19 @@
 	werr = ntstatus_to_werror(registry_create_admin_token(ctx, &token));
 	if (!W_ERROR_IS_OK(werr)) {
 		DEBUG(1, ("Error creating admin token\n"));
+		err = SBC_ERR_UNKNOWN_FAILURE;
 		goto done;
 	}
 	rpd(ctx)->open = false;
 
 	werr = registry_init_smbconf(path);
 	if (!W_ERROR_IS_OK(werr)) {
+		err = SBC_ERR_BADFILE;
 		goto done;
 	}
 
-	werr = ctx->ops->open_conf(ctx);
-	if (!W_ERROR_IS_OK(werr)) {
+	err = ctx->ops->open_conf(ctx);
+	if (!SBC_ERROR_IS_OK(err)) {
 		DEBUG(1, ("Error opening the registry.\n"));
 		goto done;
 	}
@@ -607,11 +630,12 @@
 			     KEY_ENUMERATE_SUB_KEYS | REG_KEY_WRITE,
 			     token, &rpd(ctx)->base_key);
 	if (!W_ERROR_IS_OK(werr)) {
+		err = SBC_ERR_UNKNOWN_FAILURE;
 		goto done;
 	}
 
 done:
-	return werr;
+	return err;
 }
 
 static int smbconf_reg_shutdown(struct smbconf_ctx *ctx)
@@ -640,19 +664,21 @@
 	return true;
 }
 
-static WERROR smbconf_reg_open(struct smbconf_ctx *ctx)
+static sbcErr smbconf_reg_open(struct smbconf_ctx *ctx)
 {
 	WERROR werr;
 
 	if (rpd(ctx)->open) {
-		return WERR_OK;
+		return SBC_ERR_OK;
 	}
 
 	werr = regdb_open();
-	if (W_ERROR_IS_OK(werr)) {
-		rpd(ctx)->open = true;
+	if (!W_ERROR_IS_OK(werr)) {
+		return SBC_ERR_BADFILE;
 	}
-	return werr;
+
+	rpd(ctx)->open = true;
+	return SBC_ERR_OK;
 }
 
 static int smbconf_reg_close(struct smbconf_ctx *ctx)
@@ -682,7 +708,7 @@
 		return;
 	}
 
-	if (!W_ERROR_IS_OK(ctx->ops->open_conf(ctx))) {
+	if (!SBC_ERROR_IS_OK(ctx->ops->open_conf(ctx))) {
 		return;
 	}
 
@@ -692,10 +718,11 @@
 /**
  * Drop the whole configuration (restarting empty) - registry version
  */
-static WERROR smbconf_reg_drop(struct smbconf_ctx *ctx)
+static sbcErr smbconf_reg_drop(struct smbconf_ctx *ctx)
 {
 	char *path, *p;
 	WERROR werr = WERR_OK;
+	sbcErr err = SBC_ERR_OK;
 	struct registry_key *parent_key = NULL;
 	struct registry_key *new_key = NULL;
 	TALLOC_CTX* mem_ctx = talloc_stackframe();
@@ -705,46 +732,51 @@
 	werr = ntstatus_to_werror(registry_create_admin_token(ctx, &token));
 	if (!W_ERROR_IS_OK(werr)) {
 		DEBUG(1, ("Error creating admin token\n"));
+		err = SBC_ERR_UNKNOWN_FAILURE;
 		goto done;
 	}
 
 	path = talloc_strdup(mem_ctx, ctx->path);
 	if (path == NULL) {
-		werr = WERR_NOMEM;
+		err = SBC_ERR_NOMEM;
 		goto done;
 	}
 	p = strrchr(path, '\\');
 	if (p == NULL) {
-		werr = WERR_INVALID_PARAM;
+		err = SBC_ERR_INVALID_PARAM;
 		goto done;
 	}
 	*p = '\0';
 	werr = reg_open_path(mem_ctx, path, REG_KEY_WRITE, token,
 			     &parent_key);
-
 	if (!W_ERROR_IS_OK(werr)) {
+		err = SBC_ERR_IO_FAILURE;
 		goto done;
 	}
 
 	werr = reg_deletekey_recursive(parent_key, p+1);
-
 	if (!W_ERROR_IS_OK(werr)) {
+		err = SBC_ERR_IO_FAILURE;
 		goto done;
 	}
 
 	werr = reg_createkey(mem_ctx, parent_key, p+1, REG_KEY_WRITE,
 			     &new_key, &action);
+	if (!W_ERROR_IS_OK(werr)) {
+		err = SBC_ERR_IO_FAILURE;
+		goto done;
+	}
 
 done:
 	talloc_free(mem_ctx);
-	return werr;
+	return err;
 }
 
 /**
  * get the list of share names defined in the configuration.
  * registry version.
  */
-static WERROR smbconf_reg_get_share_names(struct smbconf_ctx *ctx,
+static sbcErr smbconf_reg_get_share_names(struct smbconf_ctx *ctx,
 					  TALLOC_CTX *mem_ctx,
 					  uint32_t *num_shares,
 					  char ***share_names)
@@ -752,13 +784,13 @@
 	uint32_t count;
 	uint32_t added_count = 0;
 	TALLOC_CTX *tmp_ctx = NULL;
-	WERROR werr = WERR_OK;
+	WERROR werr;
+	sbcErr err = SBC_ERR_OK;
 	char *subkey_name = NULL;
 	char **tmp_share_names = NULL;
 
 	if ((num_shares == NULL) || (share_names == NULL)) {
-		werr = WERR_INVALID_PARAM;
-		goto done;
+		return SBC_ERR_INVALID_PARAM;
 	}
 
 	tmp_ctx = talloc_stackframe();
@@ -766,9 +798,9 @@
 	/* if there are values in the base key, return NULL as share name */
 
 	if (smbconf_reg_key_has_values(rpd(ctx)->base_key)) {
-		werr = smbconf_add_string_to_array(tmp_ctx, &tmp_share_names,
+		err = smbconf_add_string_to_array(tmp_ctx, &tmp_share_names,
 						   0, NULL);
-		if (!W_ERROR_IS_OK(werr)) {
+		if (!SBC_ERROR_IS_OK(err)) {
 			goto done;
 		}
 		added_count++;
@@ -776,9 +808,9 @@
 
 	/* make sure "global" is always listed first */
 	if (smbconf_share_exists(ctx, GLOBAL_NAME)) {
-		werr = smbconf_add_string_to_array(tmp_ctx, &tmp_share_names,
-						   added_count, GLOBAL_NAME);
-		if (!W_ERROR_IS_OK(werr)) {
+		err = smbconf_add_string_to_array(tmp_ctx, &tmp_share_names,
+						  added_count, GLOBAL_NAME);
+		if (!SBC_ERROR_IS_OK(err)) {
 			goto done;
 		}
 		added_count++;
@@ -794,19 +826,20 @@
 			continue;
 		}
 
-		werr = smbconf_add_string_to_array(tmp_ctx,
+		err = smbconf_add_string_to_array(tmp_ctx,
 						   &tmp_share_names,
 						   added_count,
 						   subkey_name);
-		if (!W_ERROR_IS_OK(werr)) {
+		if (!SBC_ERROR_IS_OK(err)) {
 			goto done;
 		}
 		added_count++;
 	}
 	if (!W_ERROR_EQUAL(WERR_NO_MORE_ITEMS, werr)) {
+		err = SBC_ERR_NO_MORE_ITEMS;
 		goto done;
 	}
-	werr = WERR_OK;
+	err = SBC_ERR_OK;
 
 	*num_shares = added_count;
 	if (added_count > 0) {
@@ -817,7 +850,7 @@
 
 done:
 	talloc_free(tmp_ctx);
-	return werr;
+	return err;
 }
 
 /**
@@ -827,13 +860,13 @@
 				     const char *servicename)
 {
 	bool ret = false;
-	WERROR werr = WERR_OK;
+	sbcErr err;
 	TALLOC_CTX *mem_ctx = talloc_stackframe();
 	struct registry_key *key = NULL;
 
-	werr = smbconf_reg_open_service_key(mem_ctx, ctx, servicename,
-					    REG_KEY_READ, &key);
-	if (W_ERROR_IS_OK(werr)) {
+	err = smbconf_reg_open_service_key(mem_ctx, ctx, servicename,
+					   REG_KEY_READ, &key);
+	if (SBC_ERROR_IS_OK(err)) {
 		ret = true;
 	}
 
@@ -844,286 +877,330 @@
 /**
  * Add a service if it does not already exist - registry version
  */
-static WERROR smbconf_reg_create_share(struct smbconf_ctx *ctx,
+static sbcErr smbconf_reg_create_share(struct smbconf_ctx *ctx,
 				       const char *servicename)
 {
-	WERROR werr;
+	sbcErr err;
 	struct registry_key *key = NULL;
 
 	if (servicename == NULL) {
-		return WERR_OK;
+		return SBC_ERR_OK;
 	}
 
-	werr = smbconf_reg_create_service_key(talloc_tos(), ctx,
-					      servicename, &key);
+	err = smbconf_reg_create_service_key(talloc_tos(), ctx,
+					     servicename, &key);
 
 	talloc_free(key);
-	return werr;
+	return err;
 }
 
 /**
  * get a definition of a share (service) from configuration.
  */
-static WERROR smbconf_reg_get_share(struct smbconf_ctx *ctx,
+static sbcErr smbconf_reg_get_share(struct smbconf_ctx *ctx,
 				    TALLOC_CTX *mem_ctx,
 				    const char *servicename,
 				    struct smbconf_service **service)
 {
-	WERROR werr = WERR_OK;
+	sbcErr err;
 	struct registry_key *key = NULL;
 	struct smbconf_service *tmp_service = NULL;
 	TALLOC_CTX *tmp_ctx = talloc_stackframe();
 
-	werr = smbconf_reg_open_service_key(tmp_ctx, ctx, servicename,
-					    REG_KEY_READ, &key);
-	if (!W_ERROR_IS_OK(werr)) {
+	err = smbconf_reg_open_service_key(tmp_ctx, ctx, servicename,
+					   REG_KEY_READ, &key);
+	if (!SBC_ERROR_IS_OK(err)) {
 		goto done;
 	}
 
 	tmp_service = TALLOC_ZERO_P(tmp_ctx, struct smbconf_service);
 	if (tmp_service == NULL) {
-		werr =  WERR_NOMEM;
+		err = SBC_ERR_NOMEM;
 		goto done;
 	}
 
 	if (servicename != NULL) {
 		tmp_service->name = talloc_strdup(tmp_service, servicename);
 		if (tmp_service->name == NULL) {
-			werr = WERR_NOMEM;
+			err = SBC_ERR_NOMEM;
 			goto done;
 		}
 	}
 
-	werr = smbconf_reg_get_values(tmp_service, key,
-				      &(tmp_service->num_params),
-				      &(tmp_service->param_names),
-				      &(tmp_service->param_values));
-
-	if (W_ERROR_IS_OK(werr)) {
+	err = smbconf_reg_get_values(tmp_service, key,
+				     &(tmp_service->num_params),
+				     &(tmp_service->param_names),
+				     &(tmp_service->param_values));
+	if (SBC_ERROR_IS_OK(err)) {
 		*service = talloc_move(mem_ctx, &tmp_service);
 	}
 
 done:
 	talloc_free(tmp_ctx);
-	return werr;
+	return err;
 }
 
 /**
  * delete a service from configuration
  */
-static WERROR smbconf_reg_delete_share(struct smbconf_ctx *ctx,
+static sbcErr smbconf_reg_delete_share(struct smbconf_ctx *ctx,
 				       const char *servicename)
 {
-	WERROR werr = WERR_OK;
+	WERROR werr;
+	sbcErr err = SBC_ERR_OK;
 	TALLOC_CTX *mem_ctx = talloc_stackframe();
 
 	if (servicename != NULL) {
 		werr = reg_deletekey_recursive(rpd(ctx)->base_key, servicename);
+		if (!W_ERROR_IS_OK(werr)) {
+			err = SBC_ERR_ACCESS_DENIED;
+		}
 	} else {
-		werr = smbconf_reg_delete_values(rpd(ctx)->base_key);
+		err = smbconf_reg_delete_values(rpd(ctx)->base_key);
 	}
 
 	talloc_free(mem_ctx);
-	return werr;
+	return err;
 }
 
 /**
  * set a configuration parameter to the value provided.
  */
-static WERROR smbconf_reg_set_parameter(struct smbconf_ctx *ctx,
+static sbcErr smbconf_reg_set_parameter(struct smbconf_ctx *ctx,
 					const char *service,
 					const char *param,
 					const char *valstr)
 {
-	WERROR werr;
+	sbcErr err;
 	struct registry_key *key = NULL;
 	TALLOC_CTX *mem_ctx = talloc_stackframe();
 
-	werr = smbconf_reg_open_service_key(mem_ctx, ctx, service,
-					    REG_KEY_WRITE, &key);
-	if (!W_ERROR_IS_OK(werr)) {
+	err = smbconf_reg_open_service_key(mem_ctx, ctx, service,
+					   REG_KEY_WRITE, &key);
+	if (!SBC_ERROR_IS_OK(err)) {
 		goto done;
 	}
 
-	werr = smbconf_reg_set_value(key, param, valstr);
+	err = smbconf_reg_set_value(key, param, valstr);
 
 done:
 	talloc_free(mem_ctx);
-	return werr;
+	return err;
 }
 
 /**
  * get the value of a configuration parameter as a string
  */
-static WERROR smbconf_reg_get_parameter(struct smbconf_ctx *ctx,
+static sbcErr smbconf_reg_get_parameter(struct smbconf_ctx *ctx,
 					TALLOC_CTX *mem_ctx,
 					const char *service,
 					const char *param,
 					char **valstr)
 {
 	WERROR werr = WERR_OK;
+	sbcErr err;
 	struct registry_key *key = NULL;
 	struct registry_value *value = NULL;
 
-	werr = smbconf_reg_open_service_key(mem_ctx, ctx, service,
-					    REG_KEY_READ, &key);
-	if (!W_ERROR_IS_OK(werr)) {
+	err = smbconf_reg_open_service_key(mem_ctx, ctx, service,
+					   REG_KEY_READ, &key);
+	if (!SBC_ERROR_IS_OK(err)) {
 		goto done;
 	}
 
 	if (!smbconf_reg_valname_valid(param)) {
-		werr = WERR_INVALID_PARAM;
+		err = SBC_ERR_INVALID_PARAM;
 		goto done;
 	}
 
 	if (!smbconf_value_exists(key, param)) {
-		werr = WERR_INVALID_PARAM;
+		err = SBC_ERR_INVALID_PARAM;
 		goto done;
 	}
 
 	werr = reg_queryvalue(mem_ctx, key, param, &value);
 	if (!W_ERROR_IS_OK(werr)) {
+		err = SBC_ERR_NOMEM;
 		goto done;
 	}
 
 	*valstr = smbconf_format_registry_value(mem_ctx, value);
-
 	if (*valstr == NULL) {
-		werr = WERR_NOMEM;
+		err = SBC_ERR_NOMEM;
 	}
 
 done:
 	talloc_free(key);
 	talloc_free(value);
-	return werr;
+	return err;
 }
 
 /**
  * delete a parameter from configuration
  */
-static WERROR smbconf_reg_delete_parameter(struct smbconf_ctx *ctx,
+static sbcErr smbconf_reg_delete_parameter(struct smbconf_ctx *ctx,
 					   const char *service,
 					   const char *param)
 {
 	struct registry_key *key = NULL;
-	WERROR werr = WERR_OK;
+	WERROR werr;
+	sbcErr err;
 	TALLOC_CTX *mem_ctx = talloc_stackframe();
 
-	werr = smbconf_reg_open_service_key(mem_ctx, ctx, service,
-					    REG_KEY_ALL, &key);
-	if (!W_ERROR_IS_OK(werr)) {
+	err = smbconf_reg_open_service_key(mem_ctx, ctx, service,
+					   REG_KEY_ALL, &key);
+	if (!SBC_ERROR_IS_OK(err)) {
 		goto done;
 	}
 
 	if (!smbconf_reg_valname_valid(param)) {
-		werr = WERR_INVALID_PARAM;
+		err = SBC_ERR_INVALID_PARAM;
 		goto done;
 	}
 
 	if (!smbconf_value_exists(key, param)) {
-		werr = WERR_INVALID_PARAM;
+		err = SBC_ERR_OK;
 		goto done;
 	}
 
 	werr = reg_deletevalue(key, param);
+	if (!W_ERROR_IS_OK(werr)) {
+		err = SBC_ERR_ACCESS_DENIED;
+	}
 
 done:
 	talloc_free(mem_ctx);
-	return werr;
+	return err;
 }
 
-static WERROR smbconf_reg_get_includes(struct smbconf_ctx *ctx,
+static sbcErr smbconf_reg_get_includes(struct smbconf_ctx *ctx,
 				       TALLOC_CTX *mem_ctx,
 				       const char *service,
 				       uint32_t *num_includes,
 				       char ***includes)
 {
-	WERROR werr;
+	sbcErr err;
 	struct registry_key *key = NULL;
 	TALLOC_CTX *tmp_ctx = talloc_stackframe();
 
-	werr = smbconf_reg_open_service_key(tmp_ctx, ctx, service,
-					    REG_KEY_READ, &key);
-	if (!W_ERROR_IS_OK(werr)) {
+	err = smbconf_reg_open_service_key(tmp_ctx, ctx, service,
+					   REG_KEY_READ, &key);
+	if (!SBC_ERROR_IS_OK(err)) {
 		goto done;
 	}
 
-	werr = smbconf_reg_get_includes_internal(mem_ctx, key, num_includes,
+	err = smbconf_reg_get_includes_internal(mem_ctx, key, num_includes,
 						 includes);
+	if (!SBC_ERROR_IS_OK(err)) {
+		goto done;
+	}
 
 done:
 	talloc_free(tmp_ctx);
-	return werr;
+	return err;
 }
 
-static WERROR smbconf_reg_set_includes(struct smbconf_ctx *ctx,
+static sbcErr smbconf_reg_set_includes(struct smbconf_ctx *ctx,
 				       const char *service,
 				       uint32_t num_includes,
 				       const char **includes)
 {
 	WERROR werr = WERR_OK;
+	sbcErr err;
 	struct registry_key *key = NULL;
 	TALLOC_CTX *tmp_ctx = talloc_stackframe();
 
-	werr = smbconf_reg_open_service_key(tmp_ctx, ctx, service,
-					    REG_KEY_ALL, &key);
-	if (!W_ERROR_IS_OK(werr)) {
+	err = smbconf_reg_open_service_key(tmp_ctx, ctx, service,
+					   REG_KEY_ALL, &key);
+	if (!SBC_ERROR_IS_OK(err)) {
 		goto done;
 	}
 
 	if (num_includes == 0) {
 		if (!smbconf_value_exists(key, INCLUDES_VALNAME)) {
+			err = SBC_ERR_OK;
 			goto done;
 		}
 		werr = reg_deletevalue(key, INCLUDES_VALNAME);
+		if (!W_ERROR_IS_OK(werr)) {
+			err = SBC_ERR_ACCESS_DENIED;
+			goto done;
+		}
 	} else {
-		werr = smbconf_reg_set_multi_sz_value(key, INCLUDES_VALNAME,
+		err = smbconf_reg_set_multi_sz_value(key, INCLUDES_VALNAME,
 						      num_includes, includes);
 	}
 
 done:
 	talloc_free(tmp_ctx);
-	return werr;
+	return err;
 }
 
-static WERROR smbconf_reg_delete_includes(struct smbconf_ctx *ctx,
+static sbcErr smbconf_reg_delete_includes(struct smbconf_ctx *ctx,
 					  const char *service)
 {
-	WERROR werr = WERR_OK;
+	WERROR werr;
+	sbcErr err;
 	struct registry_key *key = NULL;
 	TALLOC_CTX *tmp_ctx = talloc_stackframe();
 
-	werr = smbconf_reg_open_service_key(tmp_ctx, ctx, service,
-					    REG_KEY_ALL, &key);
-	if (!W_ERROR_IS_OK(werr)) {
+	err = smbconf_reg_open_service_key(tmp_ctx, ctx, service,
+					   REG_KEY_ALL, &key);
+	if (!SBC_ERROR_IS_OK(err)) {
 		goto done;
 	}
 
 	if (!smbconf_value_exists(key, INCLUDES_VALNAME)) {
+		err = SBC_ERR_OK;
 		goto done;
 	}
 
 	werr = reg_deletevalue(key, INCLUDES_VALNAME);
+	if (!W_ERROR_IS_OK(werr)) {
+		err = SBC_ERR_ACCESS_DENIED;
+		goto done;
+	}
 
-
+	err = SBC_ERR_OK;
 done:
 	talloc_free(tmp_ctx);
-	return werr;
+	return err;
 }
 
-static WERROR smbconf_reg_transaction_start(struct smbconf_ctx *ctx)
+static sbcErr smbconf_reg_transaction_start(struct smbconf_ctx *ctx)
 {
-	return regdb_transaction_start();
+	WERROR werr;
+
+	werr = regdb_transaction_start();
+	if (!W_ERROR_IS_OK(werr)) {
+		return SBC_ERR_IO_FAILURE;
+	}
+
+	return SBC_ERR_OK;
 }
 
-static WERROR smbconf_reg_transaction_commit(struct smbconf_ctx *ctx)
+static sbcErr smbconf_reg_transaction_commit(struct smbconf_ctx *ctx)
 {
-	return regdb_transaction_commit();
+	WERROR werr;
+
+	werr = regdb_transaction_commit();
+	if (!W_ERROR_IS_OK(werr)) {
+		return SBC_ERR_IO_FAILURE;
+	}
+
+	return SBC_ERR_OK;
 }
 
-static WERROR smbconf_reg_transaction_cancel(struct smbconf_ctx *ctx)
+static sbcErr smbconf_reg_transaction_cancel(struct smbconf_ctx *ctx)
 {
-	return regdb_transaction_cancel();
+	WERROR werr;
+
+	werr = regdb_transaction_cancel();
+	if (!W_ERROR_IS_OK(werr)) {
+		return SBC_ERR_IO_FAILURE;
+	}
+
+	return SBC_ERR_OK;
 }
 
 struct smbconf_ops smbconf_ops_reg = {
@@ -1156,7 +1233,7 @@
  * initialize the smbconf registry backend
  * the only function that is exported from this module
  */
-WERROR smbconf_init_reg(TALLOC_CTX *mem_ctx, struct smbconf_ctx **conf_ctx,
+sbcErr smbconf_init_reg(TALLOC_CTX *mem_ctx, struct smbconf_ctx **conf_ctx,
 			const char *path)
 {
 	return smbconf_init_internal(mem_ctx, conf_ctx, path, &smbconf_ops_reg);

Modified: branches/samba/experimental/source3/lib/smbconf/smbconf_reg.h
===================================================================
--- branches/samba/experimental/source3/lib/smbconf/smbconf_reg.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/lib/smbconf/smbconf_reg.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -26,7 +26,7 @@
  * initialization functions for the registry backend modules
  */
 
-WERROR smbconf_init_reg(TALLOC_CTX *mem_ctx, struct smbconf_ctx **conf_ctx,
+sbcErr smbconf_init_reg(TALLOC_CTX *mem_ctx, struct smbconf_ctx **conf_ctx,
 			const char *path);
 
 

Modified: branches/samba/experimental/source3/lib/smbconf/testsuite.c
===================================================================
--- branches/samba/experimental/source3/lib/smbconf/testsuite.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/lib/smbconf/testsuite.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -40,17 +40,17 @@
 
 static bool test_get_includes(struct smbconf_ctx *ctx)
 {
-	WERROR werr;
+	sbcErr err;
 	bool ret = false;
 	uint32_t num_includes = 0;
 	char **includes = NULL;
 	TALLOC_CTX *mem_ctx = talloc_stackframe();
 
 	printf("TEST: get_includes\n");
-	werr = smbconf_get_global_includes(ctx, mem_ctx,
-					   &num_includes, &includes);
-	if (!W_ERROR_IS_OK(werr)) {
-		printf("FAIL: get_includes - %s\n", win_errstr(werr));
+	err = smbconf_get_global_includes(ctx, mem_ctx,
+					  &num_includes, &includes);
+	if (!SBC_ERROR_IS_OK(err)) {
+		printf("FAIL: get_includes - %s\n", sbcErrorString(err));
 		goto done;
 	}
 
@@ -68,7 +68,7 @@
 
 static bool test_set_get_includes(struct smbconf_ctx *ctx)
 {
-	WERROR werr;
+	sbcErr err;
 	uint32_t count;
 	bool ret = false;
 	const char *set_includes[] = {
@@ -82,18 +82,18 @@
 
 	printf("TEST: set_get_includes\n");
 
-	werr = smbconf_set_global_includes(ctx, set_num_includes, set_includes);
-	if (!W_ERROR_IS_OK(werr)) {
+	err = smbconf_set_global_includes(ctx, set_num_includes, set_includes);
+	if (!SBC_ERROR_IS_OK(err)) {
 		printf("FAIL: get_set_includes (setting includes) - %s\n",
-		       win_errstr(werr));
+		       sbcErrorString(err));
 		goto done;
 	}
 
-	werr = smbconf_get_global_includes(ctx, mem_ctx, &get_num_includes,
-					   &get_includes);
-	if (!W_ERROR_IS_OK(werr)) {
+	err = smbconf_get_global_includes(ctx, mem_ctx, &get_num_includes,
+					  &get_includes);
+	if (!SBC_ERROR_IS_OK(err)) {
 		printf("FAIL: get_set_includes (getting includes) - %s\n",
-		       win_errstr(werr));
+		       sbcErrorString(err));
 		goto done;
 	}
 
@@ -125,7 +125,7 @@
 
 static bool test_delete_includes(struct smbconf_ctx *ctx)
 {
-	WERROR werr;
+	sbcErr err;
 	bool ret = false;
 	const char *set_includes[] = {
 		"/path/to/include",
@@ -137,25 +137,25 @@
 
 	printf("TEST: delete_includes\n");
 
-	werr = smbconf_set_global_includes(ctx, set_num_includes, set_includes);
-	if (!W_ERROR_IS_OK(werr)) {
+	err = smbconf_set_global_includes(ctx, set_num_includes, set_includes);
+	if (!SBC_ERROR_IS_OK(err)) {
 		printf("FAIL: delete_includes (setting includes) - %s\n",
-		       win_errstr(werr));
+		       sbcErrorString(err));
 		goto done;
 	}
 
-	werr = smbconf_delete_global_includes(ctx);
-	if (!W_ERROR_IS_OK(werr)) {
+	err = smbconf_delete_global_includes(ctx);
+	if (!SBC_ERROR_IS_OK(err)) {
 		printf("FAIL: delete_includes (deleting includes) - %s\n",
-		       win_errstr(werr));
+		       sbcErrorString(err));
 		goto done;
 	}
 
-	werr = smbconf_get_global_includes(ctx, mem_ctx, &get_num_includes,
-					   &get_includes);
-	if (!W_ERROR_IS_OK(werr)) {
+	err = smbconf_get_global_includes(ctx, mem_ctx, &get_num_includes,
+					  &get_includes);
+	if (!SBC_ERROR_IS_OK(err)) {
 		printf("FAIL: delete_includes (getting includes) - %s\n",
-		       win_errstr(werr));
+		       sbcErrorString(err));
 		goto done;
 	}
 
@@ -164,10 +164,10 @@
 		goto done;
 	}
 
-	werr = smbconf_delete_global_includes(ctx);
-	if (!W_ERROR_IS_OK(werr)) {
+	err = smbconf_delete_global_includes(ctx);
+	if (!SBC_ERROR_IS_OK(err)) {
 		printf("FAIL: delete_includes (delete empty includes) - "
-		       "%s\n", win_errstr(werr));
+		       "%s\n", sbcErrorString(err));
 		goto done;
 	}
 
@@ -203,7 +203,7 @@
 
 static bool torture_smbconf_txt(void)
 {
-	WERROR werr;
+	sbcErr err;
 	bool ret = true;
 	const char *filename = "/tmp/smb.conf.smbconf_testsuite";
 	struct smbconf_ctx *conf_ctx = NULL;
@@ -217,9 +217,9 @@
 	}
 
 	printf("TEST: init\n");
-	werr = smbconf_init_txt(mem_ctx, &conf_ctx, filename);
-	if (!W_ERROR_IS_OK(werr)) {
-		printf("FAIL: text backend failed: %s\n", win_errstr(werr));
+	err = smbconf_init_txt(mem_ctx, &conf_ctx, filename);
+	if (!SBC_ERROR_IS_OK(err)) {
+		printf("FAIL: text backend failed: %s\n", sbcErrorString(err));
 		ret = false;
 		goto done;
 	}
@@ -245,7 +245,7 @@
 
 static bool torture_smbconf_reg(void)
 {
-	WERROR werr;
+	sbcErr err;
 	bool ret = true;
 	struct smbconf_ctx *conf_ctx = NULL;
 	TALLOC_CTX *mem_ctx = talloc_stackframe();
@@ -253,9 +253,9 @@
 	printf("test: registry backend\n");
 
 	printf("TEST: init\n");
-	werr = smbconf_init_reg(mem_ctx, &conf_ctx, NULL);
-	if (!W_ERROR_IS_OK(werr)) {
-		printf("FAIL: init failed: %s\n", win_errstr(werr));
+	err = smbconf_init_reg(mem_ctx, &conf_ctx, NULL);
+	if (!SBC_ERROR_IS_OK(err)) {
+		printf("FAIL: init failed: %s\n", sbcErrorString(err));
 		ret = false;
 		goto done;
 	}

Modified: branches/samba/experimental/source3/lib/system.c
===================================================================
--- branches/samba/experimental/source3/lib/system.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/lib/system.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -833,6 +833,15 @@
 }
 
 
+#if HAVE_KERNEL_SHARE_MODES
+#ifndef LOCK_MAND
+#define LOCK_MAND	32	/* This is a mandatory flock */
+#define LOCK_READ	64	/* ... Which allows concurrent read operations */
+#define LOCK_WRITE	128	/* ... Which allows concurrent write operations */
+#define LOCK_RW		192	/* ... Which allows concurrent read & write ops */
+#endif
+#endif
+
 /*******************************************************************
  A flock() wrapper that will perform the kernel flock.
 ********************************************************************/
@@ -2633,74 +2642,3 @@
 	return -1;
 }
 #endif /* WITH_AIO */
-
-int sys_getpeereid( int s, uid_t *uid)
-{
-#if defined(HAVE_PEERCRED)
-	struct ucred cred;
-	socklen_t cred_len = sizeof(struct ucred);
-	int ret;
-
-	ret = getsockopt(s, SOL_SOCKET, SO_PEERCRED, (void *)&cred, &cred_len);
-	if (ret != 0) {
-		return -1;
-	}
-
-	if (cred_len != sizeof(struct ucred)) {
-		errno = EINVAL;
-		return -1;
-	}
-
-	*uid = cred.uid;
-	return 0;
-#else
-#if defined(HAVE_GETPEEREID)
-	gid_t gid;
-	return getpeereid(s, uid, &gid);
-#endif
-	errno = ENOSYS;
-	return -1;
-#endif
-}
-
-int sys_getnameinfo(const struct sockaddr *psa,
-			socklen_t salen,
-			char *host,
-			size_t hostlen,
-			char *service,
-			size_t servlen,
-			int flags)
-{
-	/*
-	 * For Solaris we must make sure salen is the
-	 * correct length for the incoming sa_family.
-	 */
-
-	if (salen == sizeof(struct sockaddr_storage)) {
-		salen = sizeof(struct sockaddr_in);
-#if defined(HAVE_IPV6)
-		if (psa->sa_family == AF_INET6) {
-			salen = sizeof(struct sockaddr_in6);
-		}
-#endif
-	}
-	return getnameinfo(psa, salen, host, hostlen, service, servlen, flags);
-}
-
-int sys_connect(int fd, const struct sockaddr * addr)
-{
-	socklen_t salen = (socklen_t)-1;
-
-	if (addr->sa_family == AF_INET) {
-	    salen = sizeof(struct sockaddr_in);
-	} else if (addr->sa_family == AF_UNIX) {
-	    salen = sizeof(struct sockaddr_un);
-	}
-#if defined(HAVE_IPV6)
-	else if (addr->sa_family == AF_INET6) {
-	    salen = sizeof(struct sockaddr_in6);
-	}
-#endif
-
-	return connect(fd, addr, salen);
-}

Modified: branches/samba/experimental/source3/lib/talloc_dict.c
===================================================================
--- branches/samba/experimental/source3/lib/talloc_dict.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/lib/talloc_dict.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -20,6 +20,7 @@
 #include "includes.h"
 #include "dbwrap.h"
 #include "talloc_dict.h"
+#include "util_tdb.h"
 
 struct talloc_dict {
 	struct db_context *db;

Modified: branches/samba/experimental/source3/lib/tdb_validate.c
===================================================================
--- branches/samba/experimental/source3/lib/tdb_validate.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/lib/tdb_validate.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -21,6 +21,7 @@
 
 #include "includes.h"
 #include "system/filesys.h"
+#include "util_tdb.h"
 #include "tdb_validate.h"
 
 /*

Modified: branches/samba/experimental/source3/lib/tldap.c
===================================================================
--- branches/samba/experimental/source3/lib/tldap.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/lib/tldap.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -20,6 +20,8 @@
 #include "includes.h"
 #include "tldap.h"
 #include "../lib/util/asn1.h"
+#include "../lib/tsocket/tsocket.h"
+#include "../lib/util/tevent_unix.h"
 
 static int tldap_simple_recv(struct tevent_req *req);
 

Modified: branches/samba/experimental/source3/lib/util.c
===================================================================
--- branches/samba/experimental/source3/lib/util.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/lib/util.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -24,6 +24,7 @@
 #include "includes.h"
 #include "system/passwd.h"
 #include "system/filesys.h"
+#include "util_tdb.h"
 #include "ctdbd_conn.h"
 #include "../lib/util/util_pw.h"
 #include "messages.h"
@@ -308,12 +309,12 @@
 
 	attrstr[0] = 0;
 
-	if (mode & aVOLID) fstrcat(attrstr,"V");
-	if (mode & aDIR) fstrcat(attrstr,"D");
-	if (mode & aARCH) fstrcat(attrstr,"A");
-	if (mode & aHIDDEN) fstrcat(attrstr,"H");
-	if (mode & aSYSTEM) fstrcat(attrstr,"S");
-	if (mode & aRONLY) fstrcat(attrstr,"R");	  
+	if (mode & FILE_ATTRIBUTE_VOLUME) fstrcat(attrstr,"V");
+	if (mode & FILE_ATTRIBUTE_DIRECTORY) fstrcat(attrstr,"D");
+	if (mode & FILE_ATTRIBUTE_ARCHIVE) fstrcat(attrstr,"A");
+	if (mode & FILE_ATTRIBUTE_HIDDEN) fstrcat(attrstr,"H");
+	if (mode & FILE_ATTRIBUTE_SYSTEM) fstrcat(attrstr,"S");
+	if (mode & FILE_ATTRIBUTE_READONLY) fstrcat(attrstr,"R");
 
 	return talloc_strdup(talloc_tos(), attrstr);
 }
@@ -2687,3 +2688,37 @@
 {
 	return t.tv_sec * 1000 + (t.tv_usec+999) / 1000;
 }
+
+/*******************************************************************
+ Check a given DOS pathname is valid for a share.
+********************************************************************/
+
+char *valid_share_pathname(TALLOC_CTX *ctx, const char *dos_pathname)
+{
+	char *ptr = NULL;
+
+	if (!dos_pathname) {
+		return NULL;
+	}
+
+	ptr = talloc_strdup(ctx, dos_pathname);
+	if (!ptr) {
+		return NULL;
+	}
+	/* Convert any '\' paths to '/' */
+	unix_format(ptr);
+	ptr = unix_clean_name(ctx, ptr);
+	if (!ptr) {
+		return NULL;
+	}
+
+	/* NT is braindead - it wants a C: prefix to a pathname ! So strip it. */
+	if (strlen(ptr) > 2 && ptr[1] == ':' && ptr[0] != '/')
+		ptr += 2;
+
+	/* Only absolute paths allowed. */
+	if (*ptr != '/')
+		return NULL;
+
+	return ptr;
+}

Modified: branches/samba/experimental/source3/lib/util_builtin.c
===================================================================
--- branches/samba/experimental/source3/lib/util_builtin.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/lib/util_builtin.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -18,7 +18,6 @@
 */
 
 #include "includes.h"
-#include "passdb.h"
 #include "../libcli/security/security.h"
 
 struct rid_name_map {

Modified: branches/samba/experimental/source3/lib/util_sid.c
===================================================================
--- branches/samba/experimental/source3/lib/util_sid.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/lib/util_sid.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -121,7 +121,7 @@
 	if (!buf)
 		return NULL;
 	sid_linearize(buf, len, sid);
-	hex_encode(buf, len, &s);
+	hex_encode((const unsigned char *)buf, len, &s);
 	free(buf);
 	return s;
 }

Modified: branches/samba/experimental/source3/lib/util_sock.c
===================================================================
--- branches/samba/experimental/source3/lib/util_sock.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/lib/util_sock.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -25,158 +25,9 @@
 #include "../lib/async_req/async_sock.h"
 #include "../lib/util/select.h"
 #include "interfaces.h"
+#include "../lib/util/tevent_unix.h"
+#include "../lib/util/tevent_ntstatus.h"
 
-/****************************************************************************
- Get a port number in host byte order from a sockaddr_storage.
-****************************************************************************/
-
-uint16_t get_sockaddr_port(const struct sockaddr_storage *pss)
-{
-	uint16_t port = 0;
-
-	if (pss->ss_family != AF_INET) {
-#if defined(HAVE_IPV6)
-		/* IPv6 */
-		const struct sockaddr_in6 *sa6 =
-			(const struct sockaddr_in6 *)pss;
-		port = ntohs(sa6->sin6_port);
-#endif
-	} else {
-		const struct sockaddr_in *sa =
-			(const struct sockaddr_in *)pss;
-		port = ntohs(sa->sin_port);
-	}
-	return port;
-}
-
-/****************************************************************************
- Print out an IPv4 or IPv6 address from a struct sockaddr_storage.
-****************************************************************************/
-
-static char *print_sockaddr_len(char *dest,
-			size_t destlen,
-			const struct sockaddr *psa,
-			socklen_t psalen)
-{
-	if (destlen > 0) {
-		dest[0] = '\0';
-	}
-	(void)sys_getnameinfo(psa,
-			psalen,
-			dest, destlen,
-			NULL, 0,
-			NI_NUMERICHOST);
-	return dest;
-}
-
-/****************************************************************************
- Print out an IPv4 or IPv6 address from a struct sockaddr_storage.
-****************************************************************************/
-
-char *print_sockaddr(char *dest,
-			size_t destlen,
-			const struct sockaddr_storage *psa)
-{
-	return print_sockaddr_len(dest, destlen, (struct sockaddr *)psa,
-			sizeof(struct sockaddr_storage));
-}
-
-/****************************************************************************
- Print out a canonical IPv4 or IPv6 address from a struct sockaddr_storage.
-****************************************************************************/
-
-char *print_canonical_sockaddr(TALLOC_CTX *ctx,
-			const struct sockaddr_storage *pss)
-{
-	char addr[INET6_ADDRSTRLEN];
-	char *dest = NULL;
-	int ret;
-
-	/* Linux getnameinfo() man pages says port is unitialized if
-	   service name is NULL. */
-
-	ret = sys_getnameinfo((const struct sockaddr *)pss,
-			sizeof(struct sockaddr_storage),
-			addr, sizeof(addr),
-			NULL, 0,
-			NI_NUMERICHOST);
-	if (ret != 0) {
-		return NULL;
-	}
-
-	if (pss->ss_family != AF_INET) {
-#if defined(HAVE_IPV6)
-		dest = talloc_asprintf(ctx, "[%s]", addr);
-#else
-		return NULL;
-#endif
-	} else {
-		dest = talloc_asprintf(ctx, "%s", addr);
-	}
-
-	return dest;
-}
-
-/****************************************************************************
- Return the string of an IP address (IPv4 or IPv6).
-****************************************************************************/
-
-static const char *get_socket_addr(int fd, char *addr_buf, size_t addr_len)
-{
-	struct sockaddr_storage sa;
-	socklen_t length = sizeof(sa);
-
-	/* Ok, returning a hard coded IPv4 address
- 	 * is bogus, but it's just as bogus as a
- 	 * zero IPv6 address. No good choice here.
- 	 */
-
-	strlcpy(addr_buf, "0.0.0.0", addr_len);
-
-	if (fd == -1) {
-		return addr_buf;
-	}
-
-	if (getsockname(fd, (struct sockaddr *)&sa, &length) < 0) {
-		DEBUG(0,("getsockname failed. Error was %s\n",
-			strerror(errno) ));
-		return addr_buf;
-	}
-
-	return print_sockaddr_len(addr_buf, addr_len, (struct sockaddr *)&sa, length);
-}
-
-/****************************************************************************
- Return the port number we've bound to on a socket.
-****************************************************************************/
-
-int get_socket_port(int fd)
-{
-	struct sockaddr_storage sa;
-	socklen_t length = sizeof(sa);
-
-	if (fd == -1) {
-		return -1;
-	}
-
-	if (getsockname(fd, (struct sockaddr *)&sa, &length) < 0) {
-		int level = (errno == ENOTCONN) ? 2 : 0;
-		DEBUG(level, ("getsockname failed. Error was %s\n",
-			       strerror(errno)));
-		return -1;
-	}
-
-#if defined(HAVE_IPV6)
-	if (sa.ss_family == AF_INET6) {
-		return ntohs(((struct sockaddr_in6 *)&sa)->sin6_port);
-	}
-#endif
-	if (sa.ss_family == AF_INET) {
-		return ntohs(((struct sockaddr_in *)&sa)->sin_port);
-	}
-	return -1;
-}
-
 const char *client_name(int fd)
 {
 	return get_peer_name(fd,false);
@@ -187,11 +38,6 @@
 	return get_peer_addr(fd,addr,addrlen);
 }
 
-const char *client_socket_addr(int fd, char *addr, size_t addr_len)
-{
-	return get_socket_addr(fd, addr, addr_len);
-}
-
 #if 0
 /* Not currently used. JRA. */
 int client_socket_port(int fd)

Modified: branches/samba/experimental/source3/lib/util_tdb.c
===================================================================
--- branches/samba/experimental/source3/lib/util_tdb.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/lib/util_tdb.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -21,6 +21,8 @@
 
 #include "includes.h"
 #include "system/filesys.h"
+#include "util_tdb.h"
+
 #undef malloc
 #undef realloc
 #undef calloc
@@ -482,165 +484,6 @@
 	return res;
 }
 
-/*
- Log tdb messages via DEBUG().
-*/
-static void tdb_wrap_log(TDB_CONTEXT *tdb, enum tdb_debug_level level, 
-			 const char *format, ...) PRINTF_ATTRIBUTE(3,4);
-
-static void tdb_wrap_log(TDB_CONTEXT *tdb, enum tdb_debug_level level, 
-			 const char *format, ...)
-{
-	va_list ap;
-	char *ptr = NULL;
-	int debuglevel = 0;
-	int ret;
-
-	switch (level) {
-	case TDB_DEBUG_FATAL:
-		debuglevel = 0;
-		break;
-	case TDB_DEBUG_ERROR:
-		debuglevel = 1;
-		break;
-	case TDB_DEBUG_WARNING:
-		debuglevel = 2;
-		break;
-	case TDB_DEBUG_TRACE:
-		debuglevel = 5;
-		break;
-	default:
-		debuglevel = 0;
-	}		
-
-	va_start(ap, format);
-	ret = vasprintf(&ptr, format, ap);
-	va_end(ap);
-
-	if (ret != -1) {
-		const char *name = tdb_name(tdb);
-		DEBUG(debuglevel, ("tdb(%s): %s", name ? name : "unnamed", ptr));
-		free(ptr);
-	}
-}
-
-struct tdb_wrap_private {
-	struct tdb_context *tdb;
-	const char *name;
-	struct tdb_wrap_private *next, *prev;
-};
-
-static struct tdb_wrap_private *tdb_list;
-
-/* destroy the last connection to a tdb */
-static int tdb_wrap_private_destructor(struct tdb_wrap_private *w)
-{
-	tdb_close(w->tdb);
-	DLIST_REMOVE(tdb_list, w);
-	return 0;
-}				 
-
-static struct tdb_wrap_private *tdb_wrap_private_open(TALLOC_CTX *mem_ctx,
-						      const char *name,
-						      int hash_size,
-						      int tdb_flags,
-						      int open_flags,
-						      mode_t mode)
-{
-	struct tdb_wrap_private *result;
-	struct tdb_logging_context log_ctx;
-
-	result = talloc(mem_ctx, struct tdb_wrap_private);
-	if (result == NULL) {
-		return NULL;
-	}
-	result->name = talloc_strdup(result, name);
-	if (result->name == NULL) {
-		goto fail;
-	}
-
-	log_ctx.log_fn = tdb_wrap_log;
-
-	if (!lp_use_mmap()) {
-		tdb_flags |= TDB_NOMMAP;
-	}
-
-	if ((hash_size == 0) && (name != NULL)) {
-		const char *base;
-		base = strrchr_m(name, '/');
-
-		if (base != NULL) {
-			base += 1;
-		} else {
-			base = name;
-		}
-		hash_size = lp_parm_int(-1, "tdb_hashsize", base, 0);
-	}
-
-	result->tdb = tdb_open_ex(name, hash_size, tdb_flags,
-				  open_flags, mode, &log_ctx, NULL);
-	if (result->tdb == NULL) {
-		goto fail;
-	}
-	talloc_set_destructor(result, tdb_wrap_private_destructor);
-	DLIST_ADD(tdb_list, result);
-	return result;
-
-fail:
-	TALLOC_FREE(result);
-	return NULL;
-}
-
-/*
-  wrapped connection to a tdb database
-  to close just talloc_free() the tdb_wrap pointer
- */
-struct tdb_wrap *tdb_wrap_open(TALLOC_CTX *mem_ctx,
-			       const char *name, int hash_size, int tdb_flags,
-			       int open_flags, mode_t mode)
-{
-	struct tdb_wrap *result;
-	struct tdb_wrap_private *w;
-
-	result = talloc(mem_ctx, struct tdb_wrap);
-	if (result == NULL) {
-		return NULL;
-	}
-
-	for (w=tdb_list;w;w=w->next) {
-		if (strcmp(name, w->name) == 0) {
-			break;
-		}
-	}
-
-	if (w == NULL) {
-		w = tdb_wrap_private_open(result, name, hash_size, tdb_flags,
-					  open_flags, mode);
-	} else {
-		/*
-		 * Correctly use talloc_reference: The tdb will be
-		 * closed when "w" is being freed. The caller never
-		 * sees "w", so an incorrect use of talloc_free(w)
-		 * instead of calling talloc_unlink is not possible.
-		 * To avoid having to refcount ourselves, "w" will
-		 * have multiple parents that hang off all the
-		 * tdb_wrap's being returned from here. Those parents
-		 * can be freed without problem.
-		 */
-		if (talloc_reference(result, w) == NULL) {
-			goto fail;
-		}
-	}
-	if (w == NULL) {
-		goto fail;
-	}
-	result->tdb = w->tdb;
-	return result;
-fail:
-	TALLOC_FREE(result);
-	return NULL;
-}
-
 NTSTATUS map_nt_error_from_tdb(enum TDB_ERROR err)
 {
 	NTSTATUS result = NT_STATUS_INTERNAL_ERROR;

Modified: branches/samba/experimental/source3/lib/util_tsock.c
===================================================================
--- branches/samba/experimental/source3/lib/util_tsock.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/lib/util_tsock.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -18,6 +18,8 @@
 */
 
 #include "includes.h"
+#include "../lib/tsocket/tsocket.h"
+#include "../lib/util/tevent_unix.h"
 
 struct tstream_read_packet_state {
 	struct tevent_context *ev;

Modified: branches/samba/experimental/source3/libads/ads_status.c
===================================================================
--- branches/samba/experimental/source3/libads/ads_status.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/libads/ads_status.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -23,6 +23,7 @@
 #include "includes.h"
 #include "smb_krb5.h"
 #include "smb_ldap.h"
+#include "libads/ads_status.h"
 
 /*
   build a ADS_STATUS structure

Modified: branches/samba/experimental/source3/libads/ads_status.h
===================================================================
--- branches/samba/experimental/source3/libads/ads_status.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/libads/ads_status.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -1,3 +1,5 @@
+#ifndef _LIBADS_ADS_STATUS_H_
+#define _LIBADS_ADS_STATUS_H_
 
 /* there are 5 possible types of errors the ads subsystem can produce */
 enum ads_error_type {ENUM_ADS_ERROR_KRB5, ENUM_ADS_ERROR_GSS,
@@ -40,3 +42,5 @@
 NTSTATUS ads_ntstatus(ADS_STATUS status);
 const char *ads_errstr(ADS_STATUS status);
 NTSTATUS gss_err_to_ntstatus(uint32 maj, uint32 min);
+
+#endif /* _LIBADS_ADS_STATUS_H_ */

Modified: branches/samba/experimental/source3/libads/kerberos_proto.h
===================================================================
--- branches/samba/experimental/source3/libads/kerberos_proto.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/libads/kerberos_proto.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -1,5 +1,7 @@
 struct PAC_LOGON_INFO;
 
+#include "libads/ads_status.h"
+
 /* The following definitions come from libads/kerberos_verify.c  */
 
 NTSTATUS ads_verify_ticket(TALLOC_CTX *mem_ctx,

Modified: branches/samba/experimental/source3/libads/ldap_printer.c
===================================================================
--- branches/samba/experimental/source3/libads/ldap_printer.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/libads/ldap_printer.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -22,9 +22,7 @@
 #include "rpc_client/rpc_client.h"
 #include "../librpc/gen_ndr/ndr_spoolss_c.h"
 #include "rpc_client/cli_spoolss.h"
-#include "registry.h"
 #include "registry/reg_objects.h"
-#include "nt_printing.h"
 
 #ifdef HAVE_ADS
 

Modified: branches/samba/experimental/source3/libgpo/gpo_filesync.c
===================================================================
--- branches/samba/experimental/source3/libgpo/gpo_filesync.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/libgpo/gpo_filesync.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -19,6 +19,7 @@
 
 #include "includes.h"
 #include "system/filesys.h"
+#include "libsmb/libsmb.h"
 #include "../libgpo/gpo.h"
 #include "libgpo/gpo_proto.h"
 
@@ -150,7 +151,7 @@
 	DEBUG(5,("gpo_sync_func: got mask: [%s], name: [%s]\n",
 		mask, info->name));
 
-	if (info->mode & aDIR) {
+	if (info->mode & FILE_ATTRIBUTE_DIRECTORY) {
 
 		DEBUG(3,("got dir: [%s]\n", info->name));
 
@@ -228,7 +229,7 @@
 	ctx.cli 	= cli;
 	ctx.remote_path	= CONST_DISCARD(char *, nt_path);
 	ctx.local_path	= CONST_DISCARD(char *, local_path);
-	ctx.attribute 	= (aSYSTEM | aHIDDEN | aDIR);
+	ctx.attribute 	= (FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_DIRECTORY);
 
 	ctx.mask = talloc_asprintf(mem_ctx,
 				"%s\\*",

Modified: branches/samba/experimental/source3/libnet/libnet_dssync_passdb.c
===================================================================
--- branches/samba/experimental/source3/libnet/libnet_dssync_passdb.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/libnet/libnet_dssync_passdb.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -20,10 +20,10 @@
 #include "includes.h"
 #include "system/passwd.h"
 #include "libnet/libnet_dssync.h"
-#include "libnet/libnet_samsync.h"
 #include "../libcli/security/security.h"
 #include "../libds/common/flags.h"
 #include "../librpc/gen_ndr/ndr_drsuapi.h"
+#include "util_tdb.h"
 #include "dbwrap.h"
 #include "../libds/common/flag_mapping.h"
 #include "passdb.h"

Modified: branches/samba/experimental/source3/libnet/libnet_join.c
===================================================================
--- branches/samba/experimental/source3/libnet/libnet_join.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/libnet/libnet_join.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -38,6 +38,7 @@
 #include "krb5_env.h"
 #include "../libcli/security/security.h"
 #include "passdb.h"
+#include "libsmb/libsmb.h"
 
 /****************************************************************
 ****************************************************************/
@@ -1291,7 +1292,7 @@
 	struct samr_Ids user_rids;
 	struct samr_Ids name_types;
 	union samr_UserInfo *info = NULL;
-	struct dcerpc_binding_handle *b;
+	struct dcerpc_binding_handle *b = NULL;
 
 	ZERO_STRUCT(sam_pol);
 	ZERO_STRUCT(domain_pol);
@@ -1432,7 +1433,7 @@
 	dcerpc_samr_Close(b, mem_ctx, &user_pol, &result);
 
 done:
-	if (pipe_hnd) {
+	if (pipe_hnd && b) {
 		if (is_valid_policy_hnd(&domain_pol)) {
 			dcerpc_samr_Close(b, mem_ctx, &domain_pol, &result);
 		}
@@ -1454,40 +1455,61 @@
 
 static WERROR do_join_modify_vals_config(struct libnet_JoinCtx *r)
 {
-	WERROR werr;
+	WERROR werr = WERR_OK;
+	sbcErr err;
 	struct smbconf_ctx *ctx;
 
-	werr = smbconf_init_reg(r, &ctx, NULL);
-	if (!W_ERROR_IS_OK(werr)) {
+	err = smbconf_init_reg(r, &ctx, NULL);
+	if (!SBC_ERROR_IS_OK(err)) {
+		werr = WERR_NO_SUCH_SERVICE;
 		goto done;
 	}
 
 	if (!(r->in.join_flags & WKSSVC_JOIN_FLAGS_JOIN_TYPE)) {
 
-		werr = smbconf_set_global_parameter(ctx, "security", "user");
-		W_ERROR_NOT_OK_GOTO_DONE(werr);
+		err = smbconf_set_global_parameter(ctx, "security", "user");
+		if (!SBC_ERROR_IS_OK(err)) {
+			werr = WERR_NO_SUCH_SERVICE;
+			goto done;
+		}
 
-		werr = smbconf_set_global_parameter(ctx, "workgroup",
-						    r->in.domain_name);
+		err = smbconf_set_global_parameter(ctx, "workgroup",
+						   r->in.domain_name);
+		if (!SBC_ERROR_IS_OK(err)) {
+			werr = WERR_NO_SUCH_SERVICE;
+			goto done;
+		}
 
 		smbconf_delete_global_parameter(ctx, "realm");
 		goto done;
 	}
 
-	werr = smbconf_set_global_parameter(ctx, "security", "domain");
-	W_ERROR_NOT_OK_GOTO_DONE(werr);
+	err = smbconf_set_global_parameter(ctx, "security", "domain");
+	if (!SBC_ERROR_IS_OK(err)) {
+		werr = WERR_NO_SUCH_SERVICE;
+		goto done;
+	}
 
-	werr = smbconf_set_global_parameter(ctx, "workgroup",
-					    r->out.netbios_domain_name);
-	W_ERROR_NOT_OK_GOTO_DONE(werr);
+	err = smbconf_set_global_parameter(ctx, "workgroup",
+					   r->out.netbios_domain_name);
+	if (!SBC_ERROR_IS_OK(err)) {
+		werr = WERR_NO_SUCH_SERVICE;
+		goto done;
+	}
 
 	if (r->out.domain_is_ad) {
-		werr = smbconf_set_global_parameter(ctx, "security", "ads");
-		W_ERROR_NOT_OK_GOTO_DONE(werr);
+		err = smbconf_set_global_parameter(ctx, "security", "ads");
+		if (!SBC_ERROR_IS_OK(err)) {
+			werr = WERR_NO_SUCH_SERVICE;
+			goto done;
+		}
 
-		werr = smbconf_set_global_parameter(ctx, "realm",
-						    r->out.dns_domain_name);
-		W_ERROR_NOT_OK_GOTO_DONE(werr);
+		err = smbconf_set_global_parameter(ctx, "realm",
+						   r->out.dns_domain_name);
+		if (!SBC_ERROR_IS_OK(err)) {
+			werr = WERR_NO_SUCH_SERVICE;
+			goto done;
+		}
 	}
 
  done:
@@ -1501,20 +1523,28 @@
 static WERROR do_unjoin_modify_vals_config(struct libnet_UnjoinCtx *r)
 {
 	WERROR werr = WERR_OK;
+	sbcErr err;
 	struct smbconf_ctx *ctx;
 
-	werr = smbconf_init_reg(r, &ctx, NULL);
-	if (!W_ERROR_IS_OK(werr)) {
+	err = smbconf_init_reg(r, &ctx, NULL);
+	if (!SBC_ERROR_IS_OK(err)) {
+		werr = WERR_NO_SUCH_SERVICE;
 		goto done;
 	}
 
 	if (r->in.unjoin_flags & WKSSVC_JOIN_FLAGS_JOIN_TYPE) {
 
-		werr = smbconf_set_global_parameter(ctx, "security", "user");
-		W_ERROR_NOT_OK_GOTO_DONE(werr);
+		err = smbconf_set_global_parameter(ctx, "security", "user");
+		if (!SBC_ERROR_IS_OK(err)) {
+			werr = WERR_NO_SUCH_SERVICE;
+			goto done;
+		}
 
-		werr = smbconf_delete_global_parameter(ctx, "workgroup");
-		W_ERROR_NOT_OK_GOTO_DONE(werr);
+		err = smbconf_delete_global_parameter(ctx, "workgroup");
+		if (!SBC_ERROR_IS_OK(err)) {
+			werr = WERR_NO_SUCH_SERVICE;
+			goto done;
+		}
 
 		smbconf_delete_global_parameter(ctx, "realm");
 	}

Modified: branches/samba/experimental/source3/libnet/libnet_samsync.c
===================================================================
--- branches/samba/experimental/source3/libnet/libnet_samsync.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/libnet/libnet_samsync.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -23,7 +23,6 @@
 
 #include "includes.h"
 #include "libnet/libnet_samsync.h"
-#include "../lib/crypto/crypto.h"
 #include "../libcli/samsync/samsync.h"
 #include "../libcli/auth/libcli_auth.h"
 #include "rpc_client/rpc_client.h"

Modified: branches/samba/experimental/source3/librpc/crypto/gse.c
===================================================================
--- branches/samba/experimental/source3/librpc/crypto/gse.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/librpc/crypto/gse.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -22,7 +22,10 @@
 #include "includes.h"
 #include "gse.h"
 
-#if defined(HAVE_KRB5) && defined(HAVE_GSSAPI_GSSAPI_EXT_H) && defined(HAVE_GSS_WRAP_IOV)
+#if defined(HAVE_KRB5) \
+	&& defined(HAVE_GSSAPI_GSSAPI_EXT_H) \
+	&& defined(HAVE_GSS_WRAP_IOV) \
+	&& defined(HAVE_GSS_GET_NAME_ATTRIBUTE)
 
 #include "smb_krb5.h"
 #include "gse_krb5.h"
@@ -681,42 +684,62 @@
 	return NT_STATUS_OK;
 }
 
-NTSTATUS gse_get_authtime(struct gse_context *gse_ctx, time_t *authtime)
+NTSTATUS gse_get_pac_blob(struct gse_context *gse_ctx,
+			  TALLOC_CTX *mem_ctx, DATA_BLOB *pac_blob)
 {
 	OM_uint32 gss_min, gss_maj;
-	gss_buffer_set_t set = GSS_C_NO_BUFFER_SET;
-	int32_t	tkttime;
+	gss_buffer_desc pac_buffer;
+	gss_buffer_desc pac_display_buffer;
+	gss_buffer_desc pac_name = {
+		.value = discard_const_p(char, "urn:mspac:"),
+		.length = sizeof("urn:mspac:") - 1
+	};
+	int more = -1;
+	int authenticated = false;
+	int complete = false;
+	NTSTATUS status;
 
 	if (!gse_ctx->authenticated) {
 		return NT_STATUS_ACCESS_DENIED;
 	}
 
-	gss_maj = gss_inquire_sec_context_by_oid(
-				&gss_min, gse_ctx->gss_ctx,
-				&gse_authtime_oid, &set);
-	if (gss_maj) {
-		DEBUG(0, ("gss_inquire_sec_context_by_oid failed [%s]\n",
-			  gse_errstr(talloc_tos(), gss_maj, gss_min)));
-		return NT_STATUS_NOT_FOUND;
-	}
+	gss_maj = gss_get_name_attribute(&gss_min,
+					 gse_ctx->client_name, &pac_name,
+					 &authenticated, &complete,
+					 &pac_buffer, &pac_display_buffer,
+					 &more);
 
-	if ((set == GSS_C_NO_BUFFER_SET) || (set->count != 1) != 0) {
-		DEBUG(0, ("gss_inquire_sec_context_by_oid returned unknown "
-			  "data in results.\n"));
-		return NT_STATUS_INTERNAL_ERROR;
+	if (gss_maj != 0) {
+		DEBUG(0, ("obtaining PAC via GSSAPI gss_get_name_attribute "
+			  "failed: %s\n",
+			  gse_errstr(mem_ctx, gss_maj, gss_min)));
+		return NT_STATUS_ACCESS_DENIED;
 	}
 
-	if (set->elements[0].length != sizeof(int32_t)) {
-		DEBUG(0, ("Invalid authtime size!\n"));
-		return NT_STATUS_INTERNAL_ERROR;
+	if (authenticated && complete) {
+		/* The PAC blob is returned directly */
+		*pac_blob = data_blob_talloc(mem_ctx,
+					     pac_buffer.value,
+					     pac_buffer.length);
+		if (!pac_blob->data) {
+			status = NT_STATUS_NO_MEMORY;
+		} else {
+			status = NT_STATUS_OK;
+		}
+
+		gss_maj = gss_release_buffer(&gss_min, &pac_buffer);
+		gss_maj = gss_release_buffer(&gss_min, &pac_display_buffer);
+
+		return status;
 	}
 
-	tkttime = *((int32_t *)set->elements[0].value);
+	DEBUG(0, ("obtaining PAC via GSSAPI failed: authenticated: %s, "
+		  "complete: %s, more: %s\n",
+		  authenticated ? "true" : "false",
+		  complete ? "true" : "false",
+		  more ? "true" : "false"));
 
-	gss_maj = gss_release_buffer_set(&gss_min, &set);
-
-	*authtime = (time_t)tkttime;
-	return NT_STATUS_OK;
+	return NT_STATUS_ACCESS_DENIED;
 }
 
 size_t gse_get_signature_length(struct gse_context *gse_ctx,
@@ -972,7 +995,8 @@
 	return NT_STATUS_NOT_IMPLEMENTED;
 }
 
-NTSTATUS gse_get_authtime(struct gse_context *gse_ctx, time_t *authtime)
+NTSTATUS gse_get_pac_blob(struct gse_context *gse_ctx,
+			  TALLOC_CTX *mem_ctx, DATA_BLOB *pac)
 {
 	return NT_STATUS_NOT_IMPLEMENTED;
 }

Modified: branches/samba/experimental/source3/librpc/crypto/gse.h
===================================================================
--- branches/samba/experimental/source3/librpc/crypto/gse.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/librpc/crypto/gse.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -57,7 +57,8 @@
 			     TALLOC_CTX *mem_ctx, char **client_name);
 NTSTATUS gse_get_authz_data(struct gse_context *gse_ctx,
 			    TALLOC_CTX *mem_ctx, DATA_BLOB *pac);
-NTSTATUS gse_get_authtime(struct gse_context *gse_ctx, time_t *authtime);
+NTSTATUS gse_get_pac_blob(struct gse_context *gse_ctx,
+			  TALLOC_CTX *mem_ctx, DATA_BLOB *pac);
 
 size_t gse_get_signature_length(struct gse_context *gse_ctx,
 				int seal, size_t payload_size);

Modified: branches/samba/experimental/source3/librpc/gen_ndr/ndr_printcap.c
===================================================================
--- branches/samba/experimental/source3/librpc/gen_ndr/ndr_printcap.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/librpc/gen_ndr/ndr_printcap.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -9,6 +9,7 @@
 		NDR_CHECK(ndr_push_align(ndr, 5));
 		NDR_CHECK(ndr_push_unique_ptr(ndr, r->name));
 		NDR_CHECK(ndr_push_unique_ptr(ndr, r->info));
+		NDR_CHECK(ndr_push_unique_ptr(ndr, r->location));
 		NDR_CHECK(ndr_push_trailer_align(ndr, 5));
 	}
 	if (ndr_flags & NDR_BUFFERS) {
@@ -24,6 +25,12 @@
 			NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, ndr_charset_length(r->info, CH_UTF8)));
 			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->info, ndr_charset_length(r->info, CH_UTF8), sizeof(uint8_t), CH_UTF8));
 		}
+		if (r->location) {
+			NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, ndr_charset_length(r->location, CH_UTF8)));
+			NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, 0));
+			NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, ndr_charset_length(r->location, CH_UTF8)));
+			NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->location, ndr_charset_length(r->location, CH_UTF8), sizeof(uint8_t), CH_UTF8));
+		}
 	}
 	return NDR_ERR_SUCCESS;
 }
@@ -34,6 +41,8 @@
 	TALLOC_CTX *_mem_save_name_0;
 	uint32_t _ptr_info;
 	TALLOC_CTX *_mem_save_info_0;
+	uint32_t _ptr_location;
+	TALLOC_CTX *_mem_save_location_0;
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_pull_align(ndr, 5));
 		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_name));
@@ -48,6 +57,12 @@
 		} else {
 			r->info = NULL;
 		}
+		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_location));
+		if (_ptr_location) {
+			NDR_PULL_ALLOC(ndr, r->location);
+		} else {
+			r->location = NULL;
+		}
 		NDR_CHECK(ndr_pull_trailer_align(ndr, 5));
 	}
 	if (ndr_flags & NDR_BUFFERS) {
@@ -75,6 +90,18 @@
 			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->info, ndr_get_array_length(ndr, &r->info), sizeof(uint8_t), CH_UTF8));
 			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, 0);
 		}
+		if (r->location) {
+			_mem_save_location_0 = NDR_PULL_GET_MEM_CTX(ndr);
+			NDR_PULL_SET_MEM_CTX(ndr, r->location, 0);
+			NDR_CHECK(ndr_pull_array_size(ndr, &r->location));
+			NDR_CHECK(ndr_pull_array_length(ndr, &r->location));
+			if (ndr_get_array_length(ndr, &r->location) > ndr_get_array_size(ndr, &r->location)) {
+				return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->location), ndr_get_array_length(ndr, &r->location));
+			}
+			NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->location), sizeof(uint8_t)));
+			NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->location, ndr_get_array_length(ndr, &r->location), sizeof(uint8_t), CH_UTF8));
+			NDR_PULL_SET_MEM_CTX(ndr, _mem_save_location_0, 0);
+		}
 	}
 	return NDR_ERR_SUCCESS;
 }
@@ -96,7 +123,13 @@
 		ndr_print_string(ndr, "info", r->info);
 	}
 	ndr->depth--;
+	ndr_print_ptr(ndr, "location", r->location);
+	ndr->depth++;
+	if (r->location) {
+		ndr_print_string(ndr, "location", r->location);
+	}
 	ndr->depth--;
+	ndr->depth--;
 }
 
 _PUBLIC_ enum ndr_err_code ndr_push_pcap_data(struct ndr_push *ndr, int ndr_flags, const struct pcap_data *r)

Modified: branches/samba/experimental/source3/librpc/gen_ndr/ndr_rap.c
===================================================================
--- branches/samba/experimental/source3/librpc/gen_ndr/ndr_rap.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/librpc/gen_ndr/ndr_rap.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -6105,6 +6105,72 @@
 	}
 }
 
+_PUBLIC_ enum ndr_err_code ndr_push_rap_TimeOfDayInfo(struct ndr_push *ndr, int ndr_flags, const struct rap_TimeOfDayInfo *r)
+{
+	if (ndr_flags & NDR_SCALARS) {
+		NDR_CHECK(ndr_push_align(ndr, 4));
+		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->TimeSinceJan11970));
+		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->TimeSinceBoot));
+		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->Hours));
+		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->Minutes));
+		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->Seconds));
+		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->Hundreds));
+		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->TimeZone));
+		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->ClockFrequency));
+		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->Day));
+		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->Month));
+		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->Year));
+		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->Weekday));
+		NDR_CHECK(ndr_push_trailer_align(ndr, 4));
+	}
+	if (ndr_flags & NDR_BUFFERS) {
+	}
+	return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ enum ndr_err_code ndr_pull_rap_TimeOfDayInfo(struct ndr_pull *ndr, int ndr_flags, struct rap_TimeOfDayInfo *r)
+{
+	if (ndr_flags & NDR_SCALARS) {
+		NDR_CHECK(ndr_pull_align(ndr, 4));
+		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->TimeSinceJan11970));
+		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->TimeSinceBoot));
+		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->Hours));
+		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->Minutes));
+		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->Seconds));
+		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->Hundreds));
+		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->TimeZone));
+		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->ClockFrequency));
+		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->Day));
+		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->Month));
+		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->Year));
+		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->Weekday));
+		NDR_CHECK(ndr_pull_trailer_align(ndr, 4));
+	}
+	if (ndr_flags & NDR_BUFFERS) {
+	}
+	return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_rap_TimeOfDayInfo(struct ndr_print *ndr, const char *name, const struct rap_TimeOfDayInfo *r)
+{
+	ndr_print_struct(ndr, name, "rap_TimeOfDayInfo");
+	if (r == NULL) { ndr_print_null(ndr); return; }
+	ndr->depth++;
+	ndr_print_uint32(ndr, "TimeSinceJan11970", r->TimeSinceJan11970);
+	ndr_print_uint32(ndr, "TimeSinceBoot", r->TimeSinceBoot);
+	ndr_print_uint8(ndr, "Hours", r->Hours);
+	ndr_print_uint8(ndr, "Minutes", r->Minutes);
+	ndr_print_uint8(ndr, "Seconds", r->Seconds);
+	ndr_print_uint8(ndr, "Hundreds", r->Hundreds);
+	ndr_print_uint16(ndr, "TimeZone", r->TimeZone);
+	ndr_print_uint16(ndr, "ClockFrequency", r->ClockFrequency);
+	ndr_print_uint8(ndr, "Day", r->Day);
+	ndr_print_uint8(ndr, "Month", r->Month);
+	ndr_print_uint16(ndr, "Year", r->Year);
+	ndr_print_uint8(ndr, "Weekday", r->Weekday);
+	ndr->depth--;
+}
+
 _PUBLIC_ enum ndr_err_code ndr_push_rap_NetShareEnum(struct ndr_push *ndr, int flags, const struct rap_NetShareEnum *r)
 {
 	if (flags & NDR_IN) {
@@ -7804,3 +7870,56 @@
 	ndr->depth--;
 }
 
+_PUBLIC_ enum ndr_err_code ndr_push_rap_NetRemoteTOD(struct ndr_push *ndr, int flags, const struct rap_NetRemoteTOD *r)
+{
+	if (flags & NDR_IN) {
+		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->in.bufsize));
+	}
+	if (flags & NDR_OUT) {
+		NDR_CHECK(ndr_push_rap_status(ndr, NDR_SCALARS, r->out.status));
+		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->out.convert));
+		NDR_CHECK(ndr_push_rap_TimeOfDayInfo(ndr, NDR_SCALARS, &r->out.tod));
+	}
+	return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ enum ndr_err_code ndr_pull_rap_NetRemoteTOD(struct ndr_pull *ndr, int flags, struct rap_NetRemoteTOD *r)
+{
+	if (flags & NDR_IN) {
+		ZERO_STRUCT(r->out);
+
+		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->in.bufsize));
+	}
+	if (flags & NDR_OUT) {
+		NDR_CHECK(ndr_pull_rap_status(ndr, NDR_SCALARS, &r->out.status));
+		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->out.convert));
+		NDR_CHECK(ndr_pull_rap_TimeOfDayInfo(ndr, NDR_SCALARS, &r->out.tod));
+	}
+	return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_rap_NetRemoteTOD(struct ndr_print *ndr, const char *name, int flags, const struct rap_NetRemoteTOD *r)
+{
+	ndr_print_struct(ndr, name, "rap_NetRemoteTOD");
+	if (r == NULL) { ndr_print_null(ndr); return; }
+	ndr->depth++;
+	if (flags & NDR_SET_VALUES) {
+		ndr->flags |= LIBNDR_PRINT_SET_VALUES;
+	}
+	if (flags & NDR_IN) {
+		ndr_print_struct(ndr, "in", "rap_NetRemoteTOD");
+		ndr->depth++;
+		ndr_print_uint16(ndr, "bufsize", r->in.bufsize);
+		ndr->depth--;
+	}
+	if (flags & NDR_OUT) {
+		ndr_print_struct(ndr, "out", "rap_NetRemoteTOD");
+		ndr->depth++;
+		ndr_print_rap_status(ndr, "status", r->out.status);
+		ndr_print_uint16(ndr, "convert", r->out.convert);
+		ndr_print_rap_TimeOfDayInfo(ndr, "tod", &r->out.tod);
+		ndr->depth--;
+	}
+	ndr->depth--;
+}
+

Modified: branches/samba/experimental/source3/librpc/gen_ndr/ndr_rap.h
===================================================================
--- branches/samba/experimental/source3/librpc/gen_ndr/ndr_rap.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/librpc/gen_ndr/ndr_rap.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -55,7 +55,9 @@
 
 #define NDR_RAP_NETUSERDELETE (0x17)
 
-#define NDR_RAP_CALL_COUNT (24)
+#define NDR_RAP_NETREMOTETOD (0x18)
+
+#define NDR_RAP_CALL_COUNT (25)
 enum ndr_err_code ndr_push_rap_status(struct ndr_push *ndr, int ndr_flags, enum rap_status r);
 enum ndr_err_code ndr_pull_rap_status(struct ndr_pull *ndr, int ndr_flags, enum rap_status *r);
 void ndr_print_rap_status(struct ndr_print *ndr, const char *name, enum rap_status r);
@@ -120,6 +122,9 @@
 enum ndr_err_code ndr_push_rap_session_info(struct ndr_push *ndr, int ndr_flags, const union rap_session_info *r);
 enum ndr_err_code ndr_pull_rap_session_info(struct ndr_pull *ndr, int ndr_flags, union rap_session_info *r);
 void ndr_print_rap_session_info(struct ndr_print *ndr, const char *name, const union rap_session_info *r);
+enum ndr_err_code ndr_push_rap_TimeOfDayInfo(struct ndr_push *ndr, int ndr_flags, const struct rap_TimeOfDayInfo *r);
+enum ndr_err_code ndr_pull_rap_TimeOfDayInfo(struct ndr_pull *ndr, int ndr_flags, struct rap_TimeOfDayInfo *r);
+void ndr_print_rap_TimeOfDayInfo(struct ndr_print *ndr, const char *name, const struct rap_TimeOfDayInfo *r);
 enum ndr_err_code ndr_push_rap_NetShareEnum(struct ndr_push *ndr, int flags, const struct rap_NetShareEnum *r);
 enum ndr_err_code ndr_pull_rap_NetShareEnum(struct ndr_pull *ndr, int flags, struct rap_NetShareEnum *r);
 void ndr_print_rap_NetShareEnum(struct ndr_print *ndr, const char *name, int flags, const struct rap_NetShareEnum *r);
@@ -192,4 +197,7 @@
 enum ndr_err_code ndr_push_rap_NetUserDelete(struct ndr_push *ndr, int flags, const struct rap_NetUserDelete *r);
 enum ndr_err_code ndr_pull_rap_NetUserDelete(struct ndr_pull *ndr, int flags, struct rap_NetUserDelete *r);
 void ndr_print_rap_NetUserDelete(struct ndr_print *ndr, const char *name, int flags, const struct rap_NetUserDelete *r);
+enum ndr_err_code ndr_push_rap_NetRemoteTOD(struct ndr_push *ndr, int flags, const struct rap_NetRemoteTOD *r);
+enum ndr_err_code ndr_pull_rap_NetRemoteTOD(struct ndr_pull *ndr, int flags, struct rap_NetRemoteTOD *r);
+void ndr_print_rap_NetRemoteTOD(struct ndr_print *ndr, const char *name, int flags, const struct rap_NetRemoteTOD *r);
 #endif /* _HEADER_NDR_rap */

Modified: branches/samba/experimental/source3/librpc/gen_ndr/ndr_rap_c.c
===================================================================
--- branches/samba/experimental/source3/librpc/gen_ndr/ndr_rap_c.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/librpc/gen_ndr/ndr_rap_c.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -1976,3 +1976,85 @@
 	return status;
 }
 
+struct dcerpc_rap_NetRemoteTOD_r_state {
+	TALLOC_CTX *out_mem_ctx;
+};
+
+static void dcerpc_rap_NetRemoteTOD_r_done(struct tevent_req *subreq);
+
+struct tevent_req *dcerpc_rap_NetRemoteTOD_r_send(TALLOC_CTX *mem_ctx,
+	struct tevent_context *ev,
+	struct dcerpc_binding_handle *h,
+	struct rap_NetRemoteTOD *r)
+{
+	struct tevent_req *req;
+	struct dcerpc_rap_NetRemoteTOD_r_state *state;
+	struct tevent_req *subreq;
+
+	req = tevent_req_create(mem_ctx, &state,
+				struct dcerpc_rap_NetRemoteTOD_r_state);
+	if (req == NULL) {
+		return NULL;
+	}
+
+	state->out_mem_ctx = talloc_new(state);
+	if (tevent_req_nomem(state->out_mem_ctx, req)) {
+		return tevent_req_post(req, ev);
+	}
+
+	subreq = dcerpc_binding_handle_call_send(state, ev, h,
+			NULL, &ndr_table_rap,
+			NDR_RAP_NETREMOTETOD, state->out_mem_ctx, r);
+	if (tevent_req_nomem(subreq, req)) {
+		return tevent_req_post(req, ev);
+	}
+	tevent_req_set_callback(subreq, dcerpc_rap_NetRemoteTOD_r_done, req);
+
+	return req;
+}
+
+static void dcerpc_rap_NetRemoteTOD_r_done(struct tevent_req *subreq)
+{
+	struct tevent_req *req =
+		tevent_req_callback_data(subreq,
+		struct tevent_req);
+	NTSTATUS status;
+
+	status = dcerpc_binding_handle_call_recv(subreq);
+	if (!NT_STATUS_IS_OK(status)) {
+		tevent_req_nterror(req, status);
+		return;
+	}
+
+	tevent_req_done(req);
+}
+
+NTSTATUS dcerpc_rap_NetRemoteTOD_r_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx)
+{
+	struct dcerpc_rap_NetRemoteTOD_r_state *state =
+		tevent_req_data(req,
+		struct dcerpc_rap_NetRemoteTOD_r_state);
+	NTSTATUS status;
+
+	if (tevent_req_is_nterror(req, &status)) {
+		tevent_req_received(req);
+		return status;
+	}
+
+	talloc_steal(mem_ctx, state->out_mem_ctx);
+
+	tevent_req_received(req);
+	return NT_STATUS_OK;
+}
+
+NTSTATUS dcerpc_rap_NetRemoteTOD_r(struct dcerpc_binding_handle *h, TALLOC_CTX *mem_ctx, struct rap_NetRemoteTOD *r)
+{
+	NTSTATUS status;
+
+	status = dcerpc_binding_handle_call(h,
+			NULL, &ndr_table_rap,
+			NDR_RAP_NETREMOTETOD, mem_ctx, r);
+
+	return status;
+}
+

Modified: branches/samba/experimental/source3/librpc/gen_ndr/ndr_rap_c.h
===================================================================
--- branches/samba/experimental/source3/librpc/gen_ndr/ndr_rap_c.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/librpc/gen_ndr/ndr_rap_c.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -363,4 +363,19 @@
  * dcerpc_rap_NetUserDelete()
  */
 
+struct tevent_req *dcerpc_rap_NetRemoteTOD_r_send(TALLOC_CTX *mem_ctx,
+	struct tevent_context *ev,
+	struct dcerpc_binding_handle *h,
+	struct rap_NetRemoteTOD *r);
+NTSTATUS dcerpc_rap_NetRemoteTOD_r_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx);
+NTSTATUS dcerpc_rap_NetRemoteTOD_r(struct dcerpc_binding_handle *h, TALLOC_CTX *mem_ctx, struct rap_NetRemoteTOD *r);
+/*
+ * The following functions are skipped because
+ * an [out] argument status is not a pointer or array:
+ *
+ * dcerpc_rap_NetRemoteTOD_send()
+ * dcerpc_rap_NetRemoteTOD_recv()
+ * dcerpc_rap_NetRemoteTOD()
+ */
+
 #endif /* _HEADER_RPC_rap */

Modified: branches/samba/experimental/source3/librpc/gen_ndr/printcap.h
===================================================================
--- branches/samba/experimental/source3/librpc/gen_ndr/printcap.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/librpc/gen_ndr/printcap.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -13,6 +13,7 @@
 struct pcap_printer {
 	const char *name;/* [unique,charset(UTF8)] */
 	const char *info;/* [unique,charset(UTF8)] */
+	const char *location;/* [unique,charset(UTF8)] */
 };
 
 struct pcap_data {

Modified: branches/samba/experimental/source3/librpc/gen_ndr/py_printcap.c
===================================================================
--- branches/samba/experimental/source3/librpc/gen_ndr/py_printcap.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/librpc/gen_ndr/py_printcap.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -87,9 +87,47 @@
 	return 0;
 }
 
+static PyObject *py_pcap_printer_get_location(PyObject *obj, void *closure)
+{
+	struct pcap_printer *object = (struct pcap_printer *)py_talloc_get_ptr(obj);
+	PyObject *py_location;
+	if (object->location == NULL) {
+		py_location = Py_None;
+		Py_INCREF(py_location);
+	} else {
+		if (object->location == NULL) {
+			py_location = Py_None;
+			Py_INCREF(py_location);
+		} else {
+			py_location = PyUnicode_Decode(object->location, strlen(object->location), "utf-8", "ignore");
+		}
+	}
+	return py_location;
+}
+
+static int py_pcap_printer_set_location(PyObject *py_obj, PyObject *value, void *closure)
+{
+	struct pcap_printer *object = (struct pcap_printer *)py_talloc_get_ptr(py_obj);
+	if (value == Py_None) {
+		object->location = NULL;
+	} else {
+		object->location = NULL;
+		if (PyUnicode_Check(value)) {
+			object->location = PyString_AS_STRING(PyUnicode_AsEncodedString(value, "utf-8", "ignore"));
+		} else if (PyString_Check(value)) {
+			object->location = PyString_AS_STRING(value);
+		} else {
+			PyErr_Format(PyExc_TypeError, "Expected string or unicode object, got %s", Py_TYPE(value)->tp_name);
+			return -1;
+		}
+	}
+	return 0;
+}
+
 static PyGetSetDef py_pcap_printer_getsetters[] = {
 	{ discard_const_p(char, "name"), py_pcap_printer_get_name, py_pcap_printer_set_name },
 	{ discard_const_p(char, "info"), py_pcap_printer_get_info, py_pcap_printer_set_info },
+	{ discard_const_p(char, "location"), py_pcap_printer_get_location, py_pcap_printer_set_location },
 	{ NULL }
 };
 

Modified: branches/samba/experimental/source3/librpc/gen_ndr/py_rap.c
===================================================================
--- branches/samba/experimental/source3/librpc/gen_ndr/py_rap.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/librpc/gen_ndr/py_rap.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -37,6 +37,7 @@
 staticforward PyTypeObject rap_NetUserInfo10_Type;
 staticforward PyTypeObject rap_NetUserInfo11_Type;
 staticforward PyTypeObject rap_session_info_2_Type;
+staticforward PyTypeObject rap_TimeOfDayInfo_Type;
 
 void initrap(void);static PyTypeObject *Object_Type;
 
@@ -7077,6 +7078,282 @@
 	return ret;
 }
 
+
+static PyObject *py_rap_TimeOfDayInfo_get_TimeSinceJan11970(PyObject *obj, void *closure)
+{
+	struct rap_TimeOfDayInfo *object = (struct rap_TimeOfDayInfo *)py_talloc_get_ptr(obj);
+	PyObject *py_TimeSinceJan11970;
+	py_TimeSinceJan11970 = PyInt_FromLong(object->TimeSinceJan11970);
+	return py_TimeSinceJan11970;
+}
+
+static int py_rap_TimeOfDayInfo_set_TimeSinceJan11970(PyObject *py_obj, PyObject *value, void *closure)
+{
+	struct rap_TimeOfDayInfo *object = (struct rap_TimeOfDayInfo *)py_talloc_get_ptr(py_obj);
+	PY_CHECK_TYPE(&PyInt_Type, value, return -1;);
+	object->TimeSinceJan11970 = PyInt_AsLong(value);
+	return 0;
+}
+
+static PyObject *py_rap_TimeOfDayInfo_get_TimeSinceBoot(PyObject *obj, void *closure)
+{
+	struct rap_TimeOfDayInfo *object = (struct rap_TimeOfDayInfo *)py_talloc_get_ptr(obj);
+	PyObject *py_TimeSinceBoot;
+	py_TimeSinceBoot = PyInt_FromLong(object->TimeSinceBoot);
+	return py_TimeSinceBoot;
+}
+
+static int py_rap_TimeOfDayInfo_set_TimeSinceBoot(PyObject *py_obj, PyObject *value, void *closure)
+{
+	struct rap_TimeOfDayInfo *object = (struct rap_TimeOfDayInfo *)py_talloc_get_ptr(py_obj);
+	PY_CHECK_TYPE(&PyInt_Type, value, return -1;);
+	object->TimeSinceBoot = PyInt_AsLong(value);
+	return 0;
+}
+
+static PyObject *py_rap_TimeOfDayInfo_get_Hours(PyObject *obj, void *closure)
+{
+	struct rap_TimeOfDayInfo *object = (struct rap_TimeOfDayInfo *)py_talloc_get_ptr(obj);
+	PyObject *py_Hours;
+	py_Hours = PyInt_FromLong(object->Hours);
+	return py_Hours;
+}
+
+static int py_rap_TimeOfDayInfo_set_Hours(PyObject *py_obj, PyObject *value, void *closure)
+{
+	struct rap_TimeOfDayInfo *object = (struct rap_TimeOfDayInfo *)py_talloc_get_ptr(py_obj);
+	PY_CHECK_TYPE(&PyInt_Type, value, return -1;);
+	object->Hours = PyInt_AsLong(value);
+	return 0;
+}
+
+static PyObject *py_rap_TimeOfDayInfo_get_Minutes(PyObject *obj, void *closure)
+{
+	struct rap_TimeOfDayInfo *object = (struct rap_TimeOfDayInfo *)py_talloc_get_ptr(obj);
+	PyObject *py_Minutes;
+	py_Minutes = PyInt_FromLong(object->Minutes);
+	return py_Minutes;
+}
+
+static int py_rap_TimeOfDayInfo_set_Minutes(PyObject *py_obj, PyObject *value, void *closure)
+{
+	struct rap_TimeOfDayInfo *object = (struct rap_TimeOfDayInfo *)py_talloc_get_ptr(py_obj);
+	PY_CHECK_TYPE(&PyInt_Type, value, return -1;);
+	object->Minutes = PyInt_AsLong(value);
+	return 0;
+}
+
+static PyObject *py_rap_TimeOfDayInfo_get_Seconds(PyObject *obj, void *closure)
+{
+	struct rap_TimeOfDayInfo *object = (struct rap_TimeOfDayInfo *)py_talloc_get_ptr(obj);
+	PyObject *py_Seconds;
+	py_Seconds = PyInt_FromLong(object->Seconds);
+	return py_Seconds;
+}
+
+static int py_rap_TimeOfDayInfo_set_Seconds(PyObject *py_obj, PyObject *value, void *closure)
+{
+	struct rap_TimeOfDayInfo *object = (struct rap_TimeOfDayInfo *)py_talloc_get_ptr(py_obj);
+	PY_CHECK_TYPE(&PyInt_Type, value, return -1;);
+	object->Seconds = PyInt_AsLong(value);
+	return 0;
+}
+
+static PyObject *py_rap_TimeOfDayInfo_get_Hundreds(PyObject *obj, void *closure)
+{
+	struct rap_TimeOfDayInfo *object = (struct rap_TimeOfDayInfo *)py_talloc_get_ptr(obj);
+	PyObject *py_Hundreds;
+	py_Hundreds = PyInt_FromLong(object->Hundreds);
+	return py_Hundreds;
+}
+
+static int py_rap_TimeOfDayInfo_set_Hundreds(PyObject *py_obj, PyObject *value, void *closure)
+{
+	struct rap_TimeOfDayInfo *object = (struct rap_TimeOfDayInfo *)py_talloc_get_ptr(py_obj);
+	PY_CHECK_TYPE(&PyInt_Type, value, return -1;);
+	object->Hundreds = PyInt_AsLong(value);
+	return 0;
+}
+
+static PyObject *py_rap_TimeOfDayInfo_get_TimeZone(PyObject *obj, void *closure)
+{
+	struct rap_TimeOfDayInfo *object = (struct rap_TimeOfDayInfo *)py_talloc_get_ptr(obj);
+	PyObject *py_TimeZone;
+	py_TimeZone = PyInt_FromLong(object->TimeZone);
+	return py_TimeZone;
+}
+
+static int py_rap_TimeOfDayInfo_set_TimeZone(PyObject *py_obj, PyObject *value, void *closure)
+{
+	struct rap_TimeOfDayInfo *object = (struct rap_TimeOfDayInfo *)py_talloc_get_ptr(py_obj);
+	PY_CHECK_TYPE(&PyInt_Type, value, return -1;);
+	object->TimeZone = PyInt_AsLong(value);
+	return 0;
+}
+
+static PyObject *py_rap_TimeOfDayInfo_get_ClockFrequency(PyObject *obj, void *closure)
+{
+	struct rap_TimeOfDayInfo *object = (struct rap_TimeOfDayInfo *)py_talloc_get_ptr(obj);
+	PyObject *py_ClockFrequency;
+	py_ClockFrequency = PyInt_FromLong(object->ClockFrequency);
+	return py_ClockFrequency;
+}
+
+static int py_rap_TimeOfDayInfo_set_ClockFrequency(PyObject *py_obj, PyObject *value, void *closure)
+{
+	struct rap_TimeOfDayInfo *object = (struct rap_TimeOfDayInfo *)py_talloc_get_ptr(py_obj);
+	PY_CHECK_TYPE(&PyInt_Type, value, return -1;);
+	object->ClockFrequency = PyInt_AsLong(value);
+	return 0;
+}
+
+static PyObject *py_rap_TimeOfDayInfo_get_Day(PyObject *obj, void *closure)
+{
+	struct rap_TimeOfDayInfo *object = (struct rap_TimeOfDayInfo *)py_talloc_get_ptr(obj);
+	PyObject *py_Day;
+	py_Day = PyInt_FromLong(object->Day);
+	return py_Day;
+}
+
+static int py_rap_TimeOfDayInfo_set_Day(PyObject *py_obj, PyObject *value, void *closure)
+{
+	struct rap_TimeOfDayInfo *object = (struct rap_TimeOfDayInfo *)py_talloc_get_ptr(py_obj);
+	PY_CHECK_TYPE(&PyInt_Type, value, return -1;);
+	object->Day = PyInt_AsLong(value);
+	return 0;
+}
+
+static PyObject *py_rap_TimeOfDayInfo_get_Month(PyObject *obj, void *closure)
+{
+	struct rap_TimeOfDayInfo *object = (struct rap_TimeOfDayInfo *)py_talloc_get_ptr(obj);
+	PyObject *py_Month;
+	py_Month = PyInt_FromLong(object->Month);
+	return py_Month;
+}
+
+static int py_rap_TimeOfDayInfo_set_Month(PyObject *py_obj, PyObject *value, void *closure)
+{
+	struct rap_TimeOfDayInfo *object = (struct rap_TimeOfDayInfo *)py_talloc_get_ptr(py_obj);
+	PY_CHECK_TYPE(&PyInt_Type, value, return -1;);
+	object->Month = PyInt_AsLong(value);
+	return 0;
+}
+
+static PyObject *py_rap_TimeOfDayInfo_get_Year(PyObject *obj, void *closure)
+{
+	struct rap_TimeOfDayInfo *object = (struct rap_TimeOfDayInfo *)py_talloc_get_ptr(obj);
+	PyObject *py_Year;
+	py_Year = PyInt_FromLong(object->Year);
+	return py_Year;
+}
+
+static int py_rap_TimeOfDayInfo_set_Year(PyObject *py_obj, PyObject *value, void *closure)
+{
+	struct rap_TimeOfDayInfo *object = (struct rap_TimeOfDayInfo *)py_talloc_get_ptr(py_obj);
+	PY_CHECK_TYPE(&PyInt_Type, value, return -1;);
+	object->Year = PyInt_AsLong(value);
+	return 0;
+}
+
+static PyObject *py_rap_TimeOfDayInfo_get_Weekday(PyObject *obj, void *closure)
+{
+	struct rap_TimeOfDayInfo *object = (struct rap_TimeOfDayInfo *)py_talloc_get_ptr(obj);
+	PyObject *py_Weekday;
+	py_Weekday = PyInt_FromLong(object->Weekday);
+	return py_Weekday;
+}
+
+static int py_rap_TimeOfDayInfo_set_Weekday(PyObject *py_obj, PyObject *value, void *closure)
+{
+	struct rap_TimeOfDayInfo *object = (struct rap_TimeOfDayInfo *)py_talloc_get_ptr(py_obj);
+	PY_CHECK_TYPE(&PyInt_Type, value, return -1;);
+	object->Weekday = PyInt_AsLong(value);
+	return 0;
+}
+
+static PyGetSetDef py_rap_TimeOfDayInfo_getsetters[] = {
+	{ discard_const_p(char, "TimeSinceJan11970"), py_rap_TimeOfDayInfo_get_TimeSinceJan11970, py_rap_TimeOfDayInfo_set_TimeSinceJan11970 },
+	{ discard_const_p(char, "TimeSinceBoot"), py_rap_TimeOfDayInfo_get_TimeSinceBoot, py_rap_TimeOfDayInfo_set_TimeSinceBoot },
+	{ discard_const_p(char, "Hours"), py_rap_TimeOfDayInfo_get_Hours, py_rap_TimeOfDayInfo_set_Hours },
+	{ discard_const_p(char, "Minutes"), py_rap_TimeOfDayInfo_get_Minutes, py_rap_TimeOfDayInfo_set_Minutes },
+	{ discard_const_p(char, "Seconds"), py_rap_TimeOfDayInfo_get_Seconds, py_rap_TimeOfDayInfo_set_Seconds },
+	{ discard_const_p(char, "Hundreds"), py_rap_TimeOfDayInfo_get_Hundreds, py_rap_TimeOfDayInfo_set_Hundreds },
+	{ discard_const_p(char, "TimeZone"), py_rap_TimeOfDayInfo_get_TimeZone, py_rap_TimeOfDayInfo_set_TimeZone },
+	{ discard_const_p(char, "ClockFrequency"), py_rap_TimeOfDayInfo_get_ClockFrequency, py_rap_TimeOfDayInfo_set_ClockFrequency },
+	{ discard_const_p(char, "Day"), py_rap_TimeOfDayInfo_get_Day, py_rap_TimeOfDayInfo_set_Day },
+	{ discard_const_p(char, "Month"), py_rap_TimeOfDayInfo_get_Month, py_rap_TimeOfDayInfo_set_Month },
+	{ discard_const_p(char, "Year"), py_rap_TimeOfDayInfo_get_Year, py_rap_TimeOfDayInfo_set_Year },
+	{ discard_const_p(char, "Weekday"), py_rap_TimeOfDayInfo_get_Weekday, py_rap_TimeOfDayInfo_set_Weekday },
+	{ NULL }
+};
+
+static PyObject *py_rap_TimeOfDayInfo_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
+{
+	return py_talloc_new(struct rap_TimeOfDayInfo, type);
+}
+
+static PyObject *py_rap_TimeOfDayInfo_ndr_pack(PyObject *py_obj)
+{
+	struct rap_TimeOfDayInfo *object = (struct rap_TimeOfDayInfo *)py_talloc_get_ptr(py_obj);
+	DATA_BLOB blob;
+	enum ndr_err_code err;
+	err = ndr_push_struct_blob(&blob, py_talloc_get_mem_ctx(py_obj), object, (ndr_push_flags_fn_t)ndr_push_rap_TimeOfDayInfo);
+	if (err != NDR_ERR_SUCCESS) {
+		PyErr_SetNdrError(err);
+		return NULL;
+	}
+
+	return PyString_FromStringAndSize((char *)blob.data, blob.length);
+}
+
+static PyObject *py_rap_TimeOfDayInfo_ndr_unpack(PyObject *py_obj, PyObject *args)
+{
+	struct rap_TimeOfDayInfo *object = (struct rap_TimeOfDayInfo *)py_talloc_get_ptr(py_obj);
+	DATA_BLOB blob;
+	enum ndr_err_code err;
+	if (!PyArg_ParseTuple(args, "s#:__ndr_unpack__", &blob.data, &blob.length))
+		return NULL;
+
+	err = ndr_pull_struct_blob_all(&blob, py_talloc_get_mem_ctx(py_obj), object, (ndr_pull_flags_fn_t)ndr_pull_rap_TimeOfDayInfo);
+	if (err != NDR_ERR_SUCCESS) {
+		PyErr_SetNdrError(err);
+		return NULL;
+	}
+
+	Py_RETURN_NONE;
+}
+
+static PyObject *py_rap_TimeOfDayInfo_ndr_print(PyObject *py_obj)
+{
+	struct rap_TimeOfDayInfo *object = (struct rap_TimeOfDayInfo *)py_talloc_get_ptr(py_obj);
+	PyObject *ret;
+	char *retstr;
+
+	retstr = ndr_print_struct_string(py_talloc_get_mem_ctx(py_obj), (ndr_print_fn_t)ndr_print_rap_TimeOfDayInfo, "rap_TimeOfDayInfo", object);
+	ret = PyString_FromString(retstr);
+	talloc_free(retstr);
+
+	return ret;
+}
+
+static PyMethodDef py_rap_TimeOfDayInfo_methods[] = {
+	{ "__ndr_pack__", (PyCFunction)py_rap_TimeOfDayInfo_ndr_pack, METH_NOARGS, "S.ndr_pack(object) -> blob\nNDR pack" },
+	{ "__ndr_unpack__", (PyCFunction)py_rap_TimeOfDayInfo_ndr_unpack, METH_VARARGS, "S.ndr_unpack(class, blob) -> None\nNDR unpack" },
+	{ "__ndr_print__", (PyCFunction)py_rap_TimeOfDayInfo_ndr_print, METH_VARARGS, "S.ndr_print(object) -> None\nNDR print" },
+	{ NULL, NULL, 0, NULL }
+};
+
+
+static PyTypeObject rap_TimeOfDayInfo_Type = {
+	PyObject_HEAD_INIT(NULL) 0,
+	.tp_name = "rap.TimeOfDayInfo",
+	.tp_getset = py_rap_TimeOfDayInfo_getsetters,
+	.tp_methods = py_rap_TimeOfDayInfo_methods,
+	.tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
+	.tp_basicsize = sizeof(py_talloc_Object),
+	.tp_new = py_rap_TimeOfDayInfo_new,
+};
+
 static PyMethodDef rap_methods[] = {
 	{ NULL, NULL, 0, NULL }
 };
@@ -7152,6 +7429,8 @@
 
 	rap_session_info_2_Type.tp_base = Object_Type;
 
+	rap_TimeOfDayInfo_Type.tp_base = Object_Type;
+
 	if (PyType_Ready(&rap_group_info_1_Type) < 0)
 		return;
 	if (PyType_Ready(&rap_user_info_1_Type) < 0)
@@ -7210,6 +7489,8 @@
 		return;
 	if (PyType_Ready(&rap_session_info_2_Type) < 0)
 		return;
+	if (PyType_Ready(&rap_TimeOfDayInfo_Type) < 0)
+		return;
 #ifdef PY_GROUP_INFO_1_PATCH
 	PY_GROUP_INFO_1_PATCH(&rap_group_info_1_Type);
 #endif
@@ -7297,6 +7578,9 @@
 #ifdef PY_SESSION_INFO_2_PATCH
 	PY_SESSION_INFO_2_PATCH(&rap_session_info_2_Type);
 #endif
+#ifdef PY_TIMEOFDAYINFO_PATCH
+	PY_TIMEOFDAYINFO_PATCH(&rap_TimeOfDayInfo_Type);
+#endif
 
 	m = Py_InitModule3("rap", rap_methods, "rap DCE/RPC");
 	if (m == NULL)
@@ -7719,6 +8003,8 @@
 	PyModule_AddObject(m, "NetUserInfo11", (PyObject *)(void *)&rap_NetUserInfo11_Type);
 	Py_INCREF((PyObject *)(void *)&rap_session_info_2_Type);
 	PyModule_AddObject(m, "session_info_2", (PyObject *)(void *)&rap_session_info_2_Type);
+	Py_INCREF((PyObject *)(void *)&rap_TimeOfDayInfo_Type);
+	PyModule_AddObject(m, "TimeOfDayInfo", (PyObject *)(void *)&rap_TimeOfDayInfo_Type);
 #ifdef PY_MOD_RAP_PATCH
 	PY_MOD_RAP_PATCH(m);
 #endif

Modified: branches/samba/experimental/source3/librpc/gen_ndr/rap.h
===================================================================
--- branches/samba/experimental/source3/librpc/gen_ndr/rap.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/librpc/gen_ndr/rap.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -857,7 +857,22 @@
 	struct rap_session_info_2 info2;/* [case(2)] */
 }/* [public,nodiscriminant] */;
 
+struct rap_TimeOfDayInfo {
+	uint32_t TimeSinceJan11970;
+	uint32_t TimeSinceBoot;
+	uint8_t Hours;
+	uint8_t Minutes;
+	uint8_t Seconds;
+	uint8_t Hundreds;
+	uint16_t TimeZone;
+	uint16_t ClockFrequency;
+	uint8_t Day;
+	uint8_t Month;
+	uint16_t Year;
+	uint8_t Weekday;
+}/* [public] */;
 
+
 struct rap_NetShareEnum {
 	struct {
 		uint16_t level;
@@ -1235,5 +1250,19 @@
 
 };
 
+
+struct rap_NetRemoteTOD {
+	struct {
+		uint16_t bufsize;
+	} in;
+
+	struct {
+		enum rap_status status;
+		uint16_t convert;
+		struct rap_TimeOfDayInfo tod;
+	} out;
+
+};
+
 #endif /* _HEADER_rap */
 #endif /* _PIDL_HEADER_rap */

Modified: branches/samba/experimental/source3/librpc/gen_ndr/srv_rap.c
===================================================================
--- branches/samba/experimental/source3/librpc/gen_ndr/srv_rap.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/librpc/gen_ndr/srv_rap.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -1819,7 +1819,81 @@
 	return true;
 }
 
+static bool api_rap_NetRemoteTOD(struct pipes_struct *p)
+{
+	const struct ndr_interface_call *call;
+	struct ndr_pull *pull;
+	struct ndr_push *push;
+	enum ndr_err_code ndr_err;
+	struct rap_NetRemoteTOD *r;
 
+	call = &ndr_table_rap.calls[NDR_RAP_NETREMOTETOD];
+
+	r = talloc(talloc_tos(), struct rap_NetRemoteTOD);
+	if (r == NULL) {
+		return false;
+	}
+
+	pull = ndr_pull_init_blob(&p->in_data.data, r);
+	if (pull == NULL) {
+		talloc_free(r);
+		return false;
+	}
+
+	pull->flags |= LIBNDR_FLAG_REF_ALLOC;
+	if (p->endian) {
+		pull->flags |= LIBNDR_FLAG_BIGENDIAN;
+	}
+	ndr_err = call->ndr_pull(pull, NDR_IN, r);
+	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
+		talloc_free(r);
+		return false;
+	}
+
+	if (DEBUGLEVEL >= 10) {
+		NDR_PRINT_FUNCTION_DEBUG(rap_NetRemoteTOD, NDR_IN, r);
+	}
+
+	ZERO_STRUCT(r->out);
+	_rap_NetRemoteTOD(p, r);
+
+	if (p->rng_fault_state) {
+		talloc_free(r);
+		/* Return true here, srv_pipe_hnd.c will take care */
+		return true;
+	}
+
+	if (DEBUGLEVEL >= 10) {
+		NDR_PRINT_FUNCTION_DEBUG(rap_NetRemoteTOD, NDR_OUT | NDR_SET_VALUES, r);
+	}
+
+	push = ndr_push_init_ctx(r);
+	if (push == NULL) {
+		talloc_free(r);
+		return false;
+	}
+
+	/*
+	 * carry over the pointer count to the reply in case we are
+	 * using full pointer. See NDR specification for full pointers
+	 */
+	push->ptr_count = pull->ptr_count;
+
+	ndr_err = call->ndr_push(push, NDR_OUT, r);
+	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
+		talloc_free(r);
+		return false;
+	}
+
+	p->out_data.rdata = ndr_push_blob(push);
+	talloc_steal(p->mem_ctx, p->out_data.rdata.data);
+
+	talloc_free(r);
+
+	return true;
+}
+
+
 /* Tables */
 static struct api_struct api_rap_cmds[] = 
 {
@@ -1847,6 +1921,7 @@
 	{"RAP_NETSESSIONGETINFO", NDR_RAP_NETSESSIONGETINFO, api_rap_NetSessionGetInfo},
 	{"RAP_NETUSERADD", NDR_RAP_NETUSERADD, api_rap_NetUserAdd},
 	{"RAP_NETUSERDELETE", NDR_RAP_NETUSERDELETE, api_rap_NetUserDelete},
+	{"RAP_NETREMOTETOD", NDR_RAP_NETREMOTETOD, api_rap_NetRemoteTOD},
 };
 
 void rap_get_pipe_fns(struct api_struct **fns, int *n_fns)

Modified: branches/samba/experimental/source3/librpc/gen_ndr/srv_rap.h
===================================================================
--- branches/samba/experimental/source3/librpc/gen_ndr/srv_rap.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/librpc/gen_ndr/srv_rap.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -25,6 +25,7 @@
 void _rap_NetSessionGetInfo(struct pipes_struct *p, struct rap_NetSessionGetInfo *r);
 void _rap_NetUserAdd(struct pipes_struct *p, struct rap_NetUserAdd *r);
 void _rap_NetUserDelete(struct pipes_struct *p, struct rap_NetUserDelete *r);
+void _rap_NetRemoteTOD(struct pipes_struct *p, struct rap_NetRemoteTOD *r);
 void rap_get_pipe_fns(struct api_struct **fns, int *n_fns);
 struct rpc_srv_callbacks;
 NTSTATUS rpc_rap_init(const struct rpc_srv_callbacks *rpc_srv_cb);

Modified: branches/samba/experimental/source3/librpc/rpc/dcerpc.h
===================================================================
--- branches/samba/experimental/source3/librpc/rpc/dcerpc.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/librpc/rpc/dcerpc.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -33,8 +33,21 @@
 #define SMB_RPC_INTERFACE_VERSION 1
 
 struct NL_AUTH_MESSAGE;
-struct pipe_auth_data;
 
+/* auth state for all bind types. */
+
+struct pipe_auth_data {
+	enum dcerpc_AuthType auth_type;
+	enum dcerpc_AuthLevel auth_level;
+
+	void *auth_ctx;
+
+	/* Only the client code uses these 3 for now */
+	char *domain;
+	char *user_name;
+	DATA_BLOB user_session_key;
+};
+
 /* The following definitions come from librpc/rpc/dcerpc_helpers.c  */
 NTSTATUS dcerpc_push_ncacn_packet(TALLOC_CTX *mem_ctx,
 				  enum dcerpc_pkt_type ptype,
@@ -75,4 +88,12 @@
 			   DATA_BLOB *raw_pkt,
 			   size_t *pad_len);
 
+/* The following definitions come from librpc/rpc/rpc_common.c  */
+
+bool smb_register_ndr_interface(const struct ndr_interface_table *interface);
+const struct ndr_interface_table *get_iface_from_syntax(
+	const struct ndr_syntax_id *syntax);
+const char *get_pipe_name_from_syntax(TALLOC_CTX *mem_ctx,
+                                     const struct ndr_syntax_id *syntax);
+
 #endif /* __S3_DCERPC_H__ */

Modified: branches/samba/experimental/source3/librpc/rpc/dcerpc_ep.c
===================================================================
--- branches/samba/experimental/source3/librpc/rpc/dcerpc_ep.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/librpc/rpc/dcerpc_ep.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -23,6 +23,7 @@
 #include "../librpc/gen_ndr/ndr_epmapper_c.h"
 #include "rpc_client/cli_pipe.h"
 #include "auth.h"
+#include "rpc_server/rpc_ncacn_np.h"
 
 #define EPM_MAX_ANNOTATION_SIZE 64
 

Modified: branches/samba/experimental/source3/librpc/rpc/dcerpc_helpers.c
===================================================================
--- branches/samba/experimental/source3/librpc/rpc/dcerpc_helpers.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/librpc/rpc/dcerpc_helpers.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -28,7 +28,6 @@
 #include "ntlmssp_wrap.h"
 #include "librpc/crypto/gse.h"
 #include "librpc/crypto/spnego.h"
-#include "ntdomain.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_RPC_PARSE

Modified: branches/samba/experimental/source3/librpc/rpc/rpc_common.c
===================================================================
--- branches/samba/experimental/source3/librpc/rpc/rpc_common.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/librpc/rpc/rpc_common.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -18,7 +18,7 @@
  */
 
 #include "includes.h"
-#include "../librpc/gen_ndr/ndr_schannel.h"
+#include "librpc/rpc/dcerpc.h"
 #include "../librpc/gen_ndr/ndr_lsa.h"
 #include "../librpc/gen_ndr/ndr_dssetup.h"
 #include "../librpc/gen_ndr/ndr_samr.h"

Modified: branches/samba/experimental/source3/libsmb/async_smb.c
===================================================================
--- branches/samba/experimental/source3/libsmb/async_smb.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/libsmb/async_smb.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -18,7 +18,10 @@
 */
 
 #include "includes.h"
+#include "libsmb/libsmb.h"
 #include "../lib/async_req/async_sock.h"
+#include "../lib/util/tevent_ntstatus.h"
+#include "../lib/util/tevent_unix.h"
 #include "async_smb.h"
 #include "smb_crypt.h"
 #include "libsmb/nmblib.h"
@@ -423,7 +426,8 @@
 	state->iov_count = iov_count + 3;
 
 	if (cli->timeout) {
-		endtime = timeval_current_ofs(0, cli->timeout * 1000);
+		endtime = timeval_current_ofs(cli->timeout / 1000,
+					      (cli->timeout % 1000) * 1000);
 		if (!tevent_req_set_endtime(result, ev, endtime)) {
 			tevent_req_nomem(NULL, result);
 		}

Modified: branches/samba/experimental/source3/libsmb/cli_np_tstream.c
===================================================================
--- branches/samba/experimental/source3/libsmb/cli_np_tstream.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/libsmb/cli_np_tstream.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -19,7 +19,8 @@
 
 #include "includes.h"
 #include "system/network.h"
-#include "../util/tevent_unix.h"
+#include "libsmb/libsmb.h"
+#include "../lib/util/tevent_ntstatus.h"
 #include "../lib/tsocket/tsocket.h"
 #include "../lib/tsocket/tsocket_internal.h"
 #include "cli_np_tstream.h"

Modified: branches/samba/experimental/source3/libsmb/cliconnect.c
===================================================================
--- branches/samba/experimental/source3/libsmb/cliconnect.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/libsmb/cliconnect.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -3,6 +3,8 @@
    client connect/disconnect routines
    Copyright (C) Andrew Tridgell 1994-1998
    Copyright (C) Andrew Bartlett 2001-2003
+   Copyright (C) Volker Lendecke 2011
+   Copyright (C) Jeremy Allison 2011
 
    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
@@ -19,6 +21,7 @@
 */
 
 #include "includes.h"
+#include "libsmb/libsmb.h"
 #include "popt_common.h"
 #include "../libcli/auth/libcli_auth.h"
 #include "../libcli/auth/spnego.h"
@@ -26,6 +29,7 @@
 #include "../libcli/auth/ntlmssp.h"
 #include "libads/kerberos_proto.h"
 #include "krb5_env.h"
+#include "../lib/util/tevent_ntstatus.h"
 #include "async_smb.h"
 #include "libsmb/nmblib.h"
 
@@ -47,6 +51,40 @@
 
 #define STAR_SMBSERVER "*SMBSERVER"
 
+/********************************************************
+ Utility function to ensure we always return at least
+ a valid char * pointer to an empty string for the
+ cli->server_os, cli->server_type and cli->server_domain
+ strings.
+*******************************************************/
+
+static NTSTATUS smb_bytes_talloc_string(struct cli_state *cli,
+					char *inbuf,
+					char **dest,
+					uint8_t *src,
+					size_t srclen,
+					ssize_t *destlen)
+{
+	*destlen = clistr_pull_talloc(cli,
+				inbuf,
+				SVAL(inbuf, smb_flg2),
+				dest,
+				(char *)src,
+				srclen,
+				STR_TERMINATE);
+	if (*destlen == -1) {
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	if (*dest == NULL) {
+		*dest = talloc_strdup(cli, "");
+		if (*dest == NULL) {
+			return NT_STATUS_NO_MEMORY;
+		}
+	}
+	return NT_STATUS_OK;
+}
+
 /**
  * Set the user session key for a connection
  * @param cli The cli structure to add it too
@@ -63,95 +101,269 @@
  Do an old lanman2 style session setup.
 ****************************************************************************/
 
-static NTSTATUS cli_session_setup_lanman2(struct cli_state *cli,
-					  const char *user, 
-					  const char *pass, size_t passlen,
-					  const char *workgroup)
+struct cli_session_setup_lanman2_state {
+	struct cli_state *cli;
+	uint16_t vwv[10];
+	const char *user;
+};
+
+static void cli_session_setup_lanman2_done(struct tevent_req *subreq);
+
+static struct tevent_req *cli_session_setup_lanman2_send(
+	TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+	struct cli_state *cli, const char *user,
+	const char *pass, size_t passlen,
+	const char *workgroup)
 {
-	DATA_BLOB session_key = data_blob_null;
+	struct tevent_req *req, *subreq;
+	struct cli_session_setup_lanman2_state *state;
 	DATA_BLOB lm_response = data_blob_null;
-	NTSTATUS status;
-	fstring pword;
-	char *p;
+	uint16_t *vwv;
+	uint8_t *bytes;
+	char *tmp;
 
-	if (passlen > sizeof(pword)-1) {
-		return NT_STATUS_INVALID_PARAMETER;
+	req = tevent_req_create(mem_ctx, &state,
+				struct cli_session_setup_lanman2_state);
+	if (req == NULL) {
+		return NULL;
 	}
+	state->cli = cli;
+	state->user = user;
+	vwv = state->vwv;
 
-	/* LANMAN servers predate NT status codes and Unicode and ignore those 
-	   smb flags so we must disable the corresponding default capabilities  
-	   that would otherwise cause the Unicode and NT Status flags to be
-	   set (and even returned by the server) */
+	/*
+	 * LANMAN servers predate NT status codes and Unicode and
+	 * ignore those smb flags so we must disable the corresponding
+	 * default capabilities that would otherwise cause the Unicode
+	 * and NT Status flags to be set (and even returned by the
+	 * server)
+	 */
 
 	cli->capabilities &= ~(CAP_UNICODE | CAP_STATUS32);
 
-	/* if in share level security then don't send a password now */
-	if (!(cli->sec_mode & NEGOTIATE_SECURITY_USER_LEVEL))
+	/*
+	 * if in share level security then don't send a password now
+	 */
+	if (!(cli->sec_mode & NEGOTIATE_SECURITY_USER_LEVEL)) {
 		passlen = 0;
+	}
 
-	if (passlen > 0 && (cli->sec_mode & NEGOTIATE_SECURITY_CHALLENGE_RESPONSE) && passlen != 24) {
-		/* Encrypted mode needed, and non encrypted password supplied. */
+	if (passlen > 0
+	    && (cli->sec_mode & NEGOTIATE_SECURITY_CHALLENGE_RESPONSE)
+	    && passlen != 24) {
+		/*
+		 * Encrypted mode needed, and non encrypted password
+		 * supplied.
+		 */
 		lm_response = data_blob(NULL, 24);
-		if (!SMBencrypt(pass, cli->secblob.data,(uchar *)lm_response.data)) {
-			DEBUG(1, ("Password is > 14 chars in length, and is therefore incompatible with Lanman authentication\n"));
-			return NT_STATUS_ACCESS_DENIED;
+		if (tevent_req_nomem(lm_response.data, req)) {
+			return tevent_req_post(req, ev);
 		}
-	} else if ((cli->sec_mode & NEGOTIATE_SECURITY_CHALLENGE_RESPONSE) && passlen == 24) {
-		/* Encrypted mode needed, and encrypted password supplied. */
+
+		if (!SMBencrypt(pass, cli->secblob.data,
+				(uint8_t *)lm_response.data)) {
+			DEBUG(1, ("Password is > 14 chars in length, and is "
+				  "therefore incompatible with Lanman "
+				  "authentication\n"));
+			tevent_req_nterror(req, NT_STATUS_ACCESS_DENIED);
+			return tevent_req_post(req, ev);
+		}
+	} else if ((cli->sec_mode & NEGOTIATE_SECURITY_CHALLENGE_RESPONSE)
+		   && passlen == 24) {
+		/*
+		 * Encrypted mode needed, and encrypted password
+		 * supplied.
+		 */
 		lm_response = data_blob(pass, passlen);
+		if (tevent_req_nomem(lm_response.data, req)) {
+			return tevent_req_post(req, ev);
+		}
 	} else if (passlen > 0) {
-		/* Plaintext mode needed, assume plaintext supplied. */
-		passlen = clistr_push(cli, pword, pass, sizeof(pword), STR_TERMINATE);
+		uint8_t *buf;
+		size_t converted_size;
+		/*
+		 * Plaintext mode needed, assume plaintext supplied.
+		 */
+		buf = talloc_array(talloc_tos(), uint8_t, 0);
+		buf = smb_bytes_push_str(buf, cli_ucs2(cli), pass, passlen+1,
+					 &converted_size);
+		if (tevent_req_nomem(buf, req)) {
+			return tevent_req_post(req, ev);
+		}
 		lm_response = data_blob(pass, passlen);
+		TALLOC_FREE(buf);
+		if (tevent_req_nomem(lm_response.data, req)) {
+			return tevent_req_post(req, ev);
+		}
 	}
 
-	/* send a session setup command */
-	memset(cli->outbuf,'\0',smb_size);
-	cli_set_message(cli->outbuf,10, 0, True);
-	SCVAL(cli->outbuf,smb_com,SMBsesssetupX);
-	cli_setup_packet(cli);
+	SCVAL(vwv+0, 0, 0xff);
+	SCVAL(vwv+0, 1, 0);
+	SSVAL(vwv+1, 0, 0);
+	SSVAL(vwv+2, 0, CLI_BUFFER_SIZE);
+	SSVAL(vwv+3, 0, 2);
+	SSVAL(vwv+4, 0, 1);
+	SIVAL(vwv+5, 0, cli->sesskey);
+	SSVAL(vwv+7, 0, lm_response.length);
 
-	SCVAL(cli->outbuf,smb_vwv0,0xFF);
-	SSVAL(cli->outbuf,smb_vwv2,cli->max_xmit);
-	SSVAL(cli->outbuf,smb_vwv3,2);
-	SSVAL(cli->outbuf,smb_vwv4,1);
-	SIVAL(cli->outbuf,smb_vwv5,cli->sesskey);
-	SSVAL(cli->outbuf,smb_vwv7,lm_response.length);
+	bytes = talloc_array(state, uint8_t, lm_response.length);
+	if (tevent_req_nomem(bytes, req)) {
+		return tevent_req_post(req, ev);
+	}
+	if (lm_response.length != 0) {
+		memcpy(bytes, lm_response.data, lm_response.length);
+	}
+	data_blob_free(&lm_response);
 
-	p = smb_buf(cli->outbuf);
-	memcpy(p,lm_response.data,lm_response.length);
-	p += lm_response.length;
-	p += clistr_push(cli, p, user, -1, STR_TERMINATE|STR_UPPER);
-	p += clistr_push(cli, p, workgroup, -1, STR_TERMINATE|STR_UPPER);
-	p += clistr_push(cli, p, "Unix", -1, STR_TERMINATE);
-	p += clistr_push(cli, p, "Samba", -1, STR_TERMINATE);
-	cli_setup_bcc(cli, p);
+	tmp = talloc_strdup_upper(talloc_tos(), user);
+	if (tevent_req_nomem(tmp, req)) {
+		return tevent_req_post(req, ev);
+	}
+	bytes = smb_bytes_push_str(bytes, cli_ucs2(cli), tmp, strlen(tmp)+1,
+				   NULL);
+	TALLOC_FREE(tmp);
 
-	if (!cli_send_smb(cli) || !cli_receive_smb(cli)) {
-		return cli_nt_error(cli);
+	tmp = talloc_strdup_upper(talloc_tos(), workgroup);
+	if (tevent_req_nomem(tmp, req)) {
+		return tevent_req_post(req, ev);
 	}
+	bytes = smb_bytes_push_str(bytes, cli_ucs2(cli), tmp, strlen(tmp)+1,
+				   NULL);
+	bytes = smb_bytes_push_str(bytes, cli_ucs2(cli), "Unix", 5, NULL);
+	bytes = smb_bytes_push_str(bytes, cli_ucs2(cli), "Samba", 6, NULL);
 
-	show_msg(cli->inbuf);
+	if (tevent_req_nomem(bytes, req)) {
+		return tevent_req_post(req, ev);
+	}
 
-	if (cli_is_error(cli)) {
-		return cli_nt_error(cli);
+	subreq = cli_smb_send(state, ev, cli, SMBsesssetupX, 0, 10, vwv,
+			      talloc_get_size(bytes), bytes);
+	if (tevent_req_nomem(subreq, req)) {
+		return tevent_req_post(req, ev);
 	}
+	tevent_req_set_callback(subreq, cli_session_setup_lanman2_done, req);
+	return req;
+}
 
-	/* use the returned vuid from now on */
-	cli->vuid = SVAL(cli->inbuf,smb_uid);	
-	status = cli_set_username(cli, user);
+static void cli_session_setup_lanman2_done(struct tevent_req *subreq)
+{
+	struct tevent_req *req = tevent_req_callback_data(
+		subreq, struct tevent_req);
+	struct cli_session_setup_lanman2_state *state = tevent_req_data(
+		req, struct cli_session_setup_lanman2_state);
+	struct cli_state *cli = state->cli;
+	uint32_t num_bytes;
+	uint8_t *in;
+	char *inbuf;
+	uint8_t *bytes;
+	uint8_t *p;
+	NTSTATUS status;
+	ssize_t ret;
+
+	status = cli_smb_recv(subreq, state, &in, 0, NULL, NULL,
+			      &num_bytes, &bytes);
+	TALLOC_FREE(subreq);
 	if (!NT_STATUS_IS_OK(status)) {
-		return status;
+		tevent_req_nterror(req, status);
+		return;
 	}
 
-	if (session_key.data) {
-		/* Have plaintext orginal */
-		cli_set_session_key(cli, session_key);
+	inbuf = (char *)in;
+	p = bytes;
+
+	cli->vuid = SVAL(inbuf, smb_uid);
+
+	status = smb_bytes_talloc_string(cli,
+					inbuf,
+					&cli->server_os,
+					p,
+					bytes+num_bytes-p,
+					&ret);
+
+	if (!NT_STATUS_IS_OK(status)) {
+		tevent_req_nterror(req, status);
+		return;
 	}
+	p += ret;
 
-	return NT_STATUS_OK;
+	status = smb_bytes_talloc_string(cli,
+					inbuf,
+					&cli->server_type,
+					p,
+					bytes+num_bytes-p,
+					&ret);
+
+	if (!NT_STATUS_IS_OK(status)) {
+		tevent_req_nterror(req, status);
+		return;
+	}
+	p += ret;
+
+	status = smb_bytes_talloc_string(cli,
+					inbuf,
+					&cli->server_domain,
+					p,
+					bytes+num_bytes-p,
+					&ret);
+
+	if (!NT_STATUS_IS_OK(status)) {
+		tevent_req_nterror(req, status);
+		return;
+	}
+	p += ret;
+
+	if (strstr(cli->server_type, "Samba")) {
+		cli->is_samba = True;
+	}
+	status = cli_set_username(cli, state->user);
+	if (tevent_req_nterror(req, status)) {
+		return;
+	}
+	tevent_req_done(req);
 }
 
+static NTSTATUS cli_session_setup_lanman2_recv(struct tevent_req *req)
+{
+	return tevent_req_simple_recv_ntstatus(req);
+}
+
+static NTSTATUS cli_session_setup_lanman2(struct cli_state *cli, const char *user,
+					  const char *pass, size_t passlen,
+					  const char *workgroup)
+{
+	TALLOC_CTX *frame = talloc_stackframe();
+	struct event_context *ev;
+	struct tevent_req *req;
+	NTSTATUS status = NT_STATUS_NO_MEMORY;
+
+	if (cli_has_async_calls(cli)) {
+		/*
+		 * Can't use sync call while an async call is in flight
+		 */
+		status = NT_STATUS_INVALID_PARAMETER;
+		goto fail;
+	}
+	ev = event_context_init(frame);
+	if (ev == NULL) {
+		goto fail;
+	}
+	req = cli_session_setup_lanman2_send(frame, ev, cli, user, pass, passlen,
+					     workgroup);
+	if (req == NULL) {
+		goto fail;
+	}
+	if (!tevent_req_poll_ntstatus(req, ev, &status)) {
+		goto fail;
+	}
+	status = cli_session_setup_lanman2_recv(req);
+ fail:
+	TALLOC_FREE(frame);
+	if (!NT_STATUS_IS_OK(status)) {
+		cli_set_error(cli, status);
+	}
+	return status;
+}
+
 /****************************************************************************
  Work out suitable capabilities to offer the server.
 ****************************************************************************/
@@ -274,6 +486,7 @@
 	uint8_t *bytes;
 	uint8_t *p;
 	NTSTATUS status;
+	ssize_t ret;
 
 	status = cli_smb_recv(subreq, state, &in, 0, NULL, NULL,
 			      &num_bytes, &bytes);
@@ -288,13 +501,45 @@
 
 	cli->vuid = SVAL(inbuf, smb_uid);
 
-	p += clistr_pull(inbuf, cli->server_os, (char *)p, sizeof(fstring),
-			 bytes+num_bytes-p, STR_TERMINATE);
-	p += clistr_pull(inbuf, cli->server_type, (char *)p, sizeof(fstring),
-			 bytes+num_bytes-p, STR_TERMINATE);
-	p += clistr_pull(inbuf, cli->server_domain, (char *)p, sizeof(fstring),
-			 bytes+num_bytes-p, STR_TERMINATE);
+	status = smb_bytes_talloc_string(cli,
+					inbuf,
+					&cli->server_os,
+					p,
+					bytes+num_bytes-p,
+					&ret);
 
+	if (!NT_STATUS_IS_OK(status)) {
+		tevent_req_nterror(req, status);
+		return;
+	}
+	p += ret;
+
+	status = smb_bytes_talloc_string(cli,
+					inbuf,
+					&cli->server_type,
+					p,
+					bytes+num_bytes-p,
+					&ret);
+
+	if (!NT_STATUS_IS_OK(status)) {
+		tevent_req_nterror(req, status);
+		return;
+	}
+	p += ret;
+
+	status = smb_bytes_talloc_string(cli,
+					inbuf,
+					&cli->server_domain,
+					p,
+					bytes+num_bytes-p,
+					&ret);
+
+	if (!NT_STATUS_IS_OK(status)) {
+		tevent_req_nterror(req, status);
+		return;
+	}
+	p += ret;
+
 	if (strstr(cli->server_type, "Samba")) {
 		cli->is_samba = True;
 	}
@@ -357,84 +602,203 @@
  Do a NT1 plaintext session setup.
 ****************************************************************************/
 
-static NTSTATUS cli_session_setup_plaintext(struct cli_state *cli,
-					    const char *user, const char *pass,
-					    const char *workgroup)
+struct cli_session_setup_plain_state {
+	struct cli_state *cli;
+	uint16_t vwv[13];
+	const char *user;
+};
+
+static void cli_session_setup_plain_done(struct tevent_req *subreq);
+
+static struct tevent_req *cli_session_setup_plain_send(
+	TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+	struct cli_state *cli,
+	const char *user, const char *pass, const char *workgroup)
 {
-	uint32 capabilities = cli_session_setup_capabilities(cli);
-	char *p;
-	NTSTATUS status;
-	fstring lanman;
+	struct tevent_req *req, *subreq;
+	struct cli_session_setup_plain_state *state;
+	uint16_t *vwv;
+	uint8_t *bytes;
+	size_t passlen;
+	char *version;
 
-	fstr_sprintf( lanman, "Samba %s", samba_version_string());
+	req = tevent_req_create(mem_ctx, &state,
+				struct cli_session_setup_plain_state);
+	if (req == NULL) {
+		return NULL;
+	}
+	state->cli = cli;
+	state->user = user;
+	vwv = state->vwv;
 
-	memset(cli->outbuf, '\0', smb_size);
-	cli_set_message(cli->outbuf,13,0,True);
-	SCVAL(cli->outbuf,smb_com,SMBsesssetupX);
-	cli_setup_packet(cli);
+	SCVAL(vwv+0, 0, 0xff);
+	SCVAL(vwv+0, 1, 0);
+	SSVAL(vwv+1, 0, 0);
+	SSVAL(vwv+2, 0, CLI_BUFFER_SIZE);
+	SSVAL(vwv+3, 0, 2);
+	SSVAL(vwv+4, 0, cli->pid);
+	SIVAL(vwv+5, 0, cli->sesskey);
+	SSVAL(vwv+7, 0, 0);
+	SSVAL(vwv+8, 0, 0);
+	SSVAL(vwv+9, 0, 0);
+	SSVAL(vwv+10, 0, 0);
+	SIVAL(vwv+11, 0, cli_session_setup_capabilities(cli));
 
-	SCVAL(cli->outbuf,smb_vwv0,0xFF);
-	SSVAL(cli->outbuf,smb_vwv2,CLI_BUFFER_SIZE);
-	SSVAL(cli->outbuf,smb_vwv3,2);
-	SSVAL(cli->outbuf,smb_vwv4,cli->pid);
-	SIVAL(cli->outbuf,smb_vwv5,cli->sesskey);
-	SSVAL(cli->outbuf,smb_vwv8,0);
-	SIVAL(cli->outbuf,smb_vwv11,capabilities); 
-	p = smb_buf(cli->outbuf);
+	bytes = talloc_array(state, uint8_t, 0);
+	bytes = smb_bytes_push_str(bytes, cli_ucs2(cli), pass, strlen(pass)+1,
+				   &passlen);
+	if (tevent_req_nomem(bytes, req)) {
+		return tevent_req_post(req, ev);
+	}
+	SSVAL(vwv + (cli_ucs2(cli) ? 8 : 7), 0, passlen);
 
-	/* check wether to send the ASCII or UNICODE version of the password */
+	bytes = smb_bytes_push_str(bytes, cli_ucs2(cli),
+				   user, strlen(user)+1, NULL);
+	bytes = smb_bytes_push_str(bytes, cli_ucs2(cli),
+				   workgroup, strlen(workgroup)+1, NULL);
+	bytes = smb_bytes_push_str(bytes, cli_ucs2(cli),
+				   "Unix", 5, NULL);
 
-	if ( (capabilities & CAP_UNICODE) == 0 ) {
-		p += clistr_push(cli, p, pass, -1, STR_TERMINATE); /* password */
-		SSVAL(cli->outbuf,smb_vwv7,PTR_DIFF(p, smb_buf(cli->outbuf)));
+	version = talloc_asprintf(talloc_tos(), "Samba %s",
+				  samba_version_string());
+	if (tevent_req_nomem(version, req)){
+		return tevent_req_post(req, ev);
 	}
-	else {
-		/* For ucs2 passwords clistr_push calls ucs2_align, which causes
-		 * the space taken by the unicode password to be one byte too
-		 * long (as we're on an odd byte boundary here). Reduce the
-		 * count by 1 to cope with this. Fixes smbclient against NetApp
-		 * servers which can't cope. Fix from
-		 * bryan.kolodziej at allenlund.com in bug #3840.
-		 */
-		p += clistr_push(cli, p, pass, -1, STR_UNICODE|STR_TERMINATE); /* unicode password */
-		SSVAL(cli->outbuf,smb_vwv8,PTR_DIFF(p, smb_buf(cli->outbuf))-1);	
+	bytes = smb_bytes_push_str(bytes, cli_ucs2(cli),
+				   version, strlen(version)+1, NULL);
+	TALLOC_FREE(version);
+
+	if (tevent_req_nomem(bytes, req)) {
+		return tevent_req_post(req, ev);
 	}
 
-	p += clistr_push(cli, p, user, -1, STR_TERMINATE); /* username */
-	p += clistr_push(cli, p, workgroup, -1, STR_TERMINATE); /* workgroup */
-	p += clistr_push(cli, p, "Unix", -1, STR_TERMINATE);
-	p += clistr_push(cli, p, lanman, -1, STR_TERMINATE);
-	cli_setup_bcc(cli, p);
+	subreq = cli_smb_send(state, ev, cli, SMBsesssetupX, 0, 13, vwv,
+			      talloc_get_size(bytes), bytes);
+	if (tevent_req_nomem(subreq, req)) {
+		return tevent_req_post(req, ev);
+	}
+	tevent_req_set_callback(subreq, cli_session_setup_plain_done, req);
+	return req;
+}
 
-	if (!cli_send_smb(cli) || !cli_receive_smb(cli)) {
-		return cli_nt_error(cli);
+static void cli_session_setup_plain_done(struct tevent_req *subreq)
+{
+	struct tevent_req *req = tevent_req_callback_data(
+		subreq, struct tevent_req);
+	struct cli_session_setup_plain_state *state = tevent_req_data(
+		req, struct cli_session_setup_plain_state);
+	struct cli_state *cli = state->cli;
+	uint32_t num_bytes;
+	uint8_t *in;
+	char *inbuf;
+	uint8_t *bytes;
+	uint8_t *p;
+	NTSTATUS status;
+	ssize_t ret;
+
+	status = cli_smb_recv(subreq, state, &in, 0, NULL, NULL,
+			      &num_bytes, &bytes);
+	TALLOC_FREE(subreq);
+	if (tevent_req_nterror(req, status)) {
+		return;
 	}
 
-	show_msg(cli->inbuf);
+	inbuf = (char *)in;
+	p = bytes;
 
-	if (cli_is_error(cli)) {
-		return cli_nt_error(cli);
+	cli->vuid = SVAL(inbuf, smb_uid);
+
+	status = smb_bytes_talloc_string(cli,
+					inbuf,
+					&cli->server_os,
+					p,
+					bytes+num_bytes-p,
+					&ret);
+
+	if (!NT_STATUS_IS_OK(status)) {
+		tevent_req_nterror(req, status);
+		return;
 	}
+	p += ret;
 
-	cli->vuid = SVAL(cli->inbuf,smb_uid);
-	p = smb_buf(cli->inbuf);
-	p += clistr_pull(cli->inbuf, cli->server_os, p, sizeof(fstring),
-			 -1, STR_TERMINATE);
-	p += clistr_pull(cli->inbuf, cli->server_type, p, sizeof(fstring),
-			 -1, STR_TERMINATE);
-	p += clistr_pull(cli->inbuf, cli->server_domain, p, sizeof(fstring),
-			 -1, STR_TERMINATE);
-	status = cli_set_username(cli, user);
+	status = smb_bytes_talloc_string(cli,
+					inbuf,
+					&cli->server_type,
+					p,
+					bytes+num_bytes-p,
+					&ret);
+
 	if (!NT_STATUS_IS_OK(status)) {
-		return status;
+		tevent_req_nterror(req, status);
+		return;
 	}
+	p += ret;
+
+	status = smb_bytes_talloc_string(cli,
+					inbuf,
+					&cli->server_domain,
+					p,
+					bytes+num_bytes-p,
+					&ret);
+
+	if (!NT_STATUS_IS_OK(status)) {
+		tevent_req_nterror(req, status);
+		return;
+	}
+	p += ret;
+
+	status = cli_set_username(cli, state->user);
+	if (tevent_req_nterror(req, status)) {
+		return;
+	}
 	if (strstr(cli->server_type, "Samba")) {
 		cli->is_samba = True;
 	}
+	tevent_req_done(req);
+}
 
-	return NT_STATUS_OK;
+static NTSTATUS cli_session_setup_plain_recv(struct tevent_req *req)
+{
+	return tevent_req_simple_recv_ntstatus(req);
 }
 
+static NTSTATUS cli_session_setup_plain(struct cli_state *cli,
+					const char *user, const char *pass,
+					const char *workgroup)
+{
+	TALLOC_CTX *frame = talloc_stackframe();
+	struct event_context *ev;
+	struct tevent_req *req;
+	NTSTATUS status = NT_STATUS_NO_MEMORY;
+
+	if (cli_has_async_calls(cli)) {
+		/*
+		 * Can't use sync call while an async call is in flight
+		 */
+		status = NT_STATUS_INVALID_PARAMETER;
+		goto fail;
+	}
+	ev = event_context_init(frame);
+	if (ev == NULL) {
+		goto fail;
+	}
+	req = cli_session_setup_plain_send(frame, ev, cli, user, pass,
+					   workgroup);
+	if (req == NULL) {
+		goto fail;
+	}
+	if (!tevent_req_poll_ntstatus(req, ev, &status)) {
+		goto fail;
+	}
+	status = cli_session_setup_plain_recv(req);
+ fail:
+	TALLOC_FREE(frame);
+	if (!NT_STATUS_IS_OK(status)) {
+		cli_set_error(cli, status);
+	}
+	return status;
+}
+
 /****************************************************************************
    do a NT1 NTLM/LM encrypted session setup - for when extended security
    is not negotiated.
@@ -445,39 +809,76 @@
    @param workgroup The user's domain.
 ****************************************************************************/
 
-static NTSTATUS cli_session_setup_nt1(struct cli_state *cli, const char *user, 
-				      const char *pass, size_t passlen,
-				      const char *ntpass, size_t ntpasslen,
-				      const char *workgroup)
+struct cli_session_setup_nt1_state {
+	struct cli_state *cli;
+	uint16_t vwv[13];
+	DATA_BLOB response;
+	DATA_BLOB session_key;
+	const char *user;
+};
+
+static void cli_session_setup_nt1_done(struct tevent_req *subreq);
+
+static struct tevent_req *cli_session_setup_nt1_send(
+	TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+	struct cli_state *cli, const char *user,
+	const char *pass, size_t passlen,
+	const char *ntpass, size_t ntpasslen,
+	const char *workgroup)
 {
-	uint32 capabilities = cli_session_setup_capabilities(cli);
+	struct tevent_req *req, *subreq;
+	struct cli_session_setup_nt1_state *state;
 	DATA_BLOB lm_response = data_blob_null;
 	DATA_BLOB nt_response = data_blob_null;
 	DATA_BLOB session_key = data_blob_null;
-	NTSTATUS result;
-	char *p;
-	bool ok;
+	uint16_t *vwv;
+	uint8_t *bytes;
+	char *workgroup_upper;
 
+	req = tevent_req_create(mem_ctx, &state,
+				struct cli_session_setup_nt1_state);
+	if (req == NULL) {
+		return NULL;
+	}
+	state->cli = cli;
+	state->user = user;
+	vwv = state->vwv;
+
 	if (passlen == 0) {
 		/* do nothing - guest login */
 	} else if (passlen != 24) {
 		if (lp_client_ntlmv2_auth()) {
 			DATA_BLOB server_chal;
 			DATA_BLOB names_blob;
-			server_chal = data_blob(cli->secblob.data, MIN(cli->secblob.length, 8)); 
 
-			/* note that the 'workgroup' here is a best guess - we don't know
-			   the server's domain at this point.  The 'server name' is also
-			   dodgy... 
-			*/
-			names_blob = NTLMv2_generate_names_blob(NULL, cli->called.name, workgroup);
+			server_chal = data_blob(cli->secblob.data,
+						MIN(cli->secblob.length, 8));
+			if (tevent_req_nomem(server_chal.data, req)) {
+				return tevent_req_post(req, ev);
+			}
 
-			if (!SMBNTLMv2encrypt(NULL, user, workgroup, pass, &server_chal, 
-					      &names_blob,
-					      &lm_response, &nt_response, NULL, &session_key)) {
+			/*
+			 * note that the 'workgroup' here is a best
+			 * guess - we don't know the server's domain
+			 * at this point.  The 'server name' is also
+			 * dodgy...
+			 */
+			names_blob = NTLMv2_generate_names_blob(
+				NULL, cli->called.name, workgroup);
+
+			if (tevent_req_nomem(names_blob.data, req)) {
+				return tevent_req_post(req, ev);
+			}
+
+			if (!SMBNTLMv2encrypt(NULL, user, workgroup, pass,
+					      &server_chal, &names_blob,
+					      &lm_response, &nt_response,
+					      NULL, &session_key)) {
 				data_blob_free(&names_blob);
 				data_blob_free(&server_chal);
-				return NT_STATUS_ACCESS_DENIED;
+				tevent_req_nterror(
+					req, NT_STATUS_ACCESS_DENIED);
+				return tevent_req_post(req, ev);
 			}
 			data_blob_free(&names_blob);
 			data_blob_free(&server_chal);
@@ -490,23 +891,50 @@
 			nt_response = data_blob_null;
 #else
 			nt_response = data_blob(NULL, 24);
-			SMBNTencrypt(pass,cli->secblob.data,nt_response.data);
+			if (tevent_req_nomem(nt_response.data, req)) {
+				return tevent_req_post(req, ev);
+			}
+
+			SMBNTencrypt(pass, cli->secblob.data,
+				     nt_response.data);
 #endif
 			/* non encrypted password supplied. Ignore ntpass. */
 			if (lp_client_lanman_auth()) {
+
 				lm_response = data_blob(NULL, 24);
-				if (!SMBencrypt(pass,cli->secblob.data, lm_response.data)) {
-					/* Oops, the LM response is invalid, just put 
-					   the NT response there instead */
+				if (tevent_req_nomem(lm_response.data, req)) {
+					return tevent_req_post(req, ev);
+				}
+
+				if (!SMBencrypt(pass,cli->secblob.data,
+						lm_response.data)) {
+					/*
+					 * Oops, the LM response is
+					 * invalid, just put the NT
+					 * response there instead
+					 */
 					data_blob_free(&lm_response);
-					lm_response = data_blob(nt_response.data, nt_response.length);
+					lm_response = data_blob(
+						nt_response.data,
+						nt_response.length);
 				}
 			} else {
-				/* LM disabled, place NT# in LM field instead */
-				lm_response = data_blob(nt_response.data, nt_response.length);
+				/*
+				 * LM disabled, place NT# in LM field
+				 * instead
+				 */
+				lm_response = data_blob(
+					nt_response.data, nt_response.length);
 			}
 
+			if (tevent_req_nomem(lm_response.data, req)) {
+				return tevent_req_post(req, ev);
+			}
+
 			session_key = data_blob(NULL, 16);
+			if (tevent_req_nomem(session_key.data, req)) {
+				return tevent_req_post(req, ev);
+			}
 #ifdef LANMAN_ONLY
 			E_deshash(pass, session_key.data);
 			memset(&session_key.data[8], '\0', 8);
@@ -521,96 +949,221 @@
 		   signing because we don't have original key */
 
 		lm_response = data_blob(pass, passlen);
+		if (tevent_req_nomem(lm_response.data, req)) {
+			return tevent_req_post(req, ev);
+		}
+
 		nt_response = data_blob(ntpass, ntpasslen);
+		if (tevent_req_nomem(nt_response.data, req)) {
+			return tevent_req_post(req, ev);
+		}
 	}
 
-	/* send a session setup command */
-	memset(cli->outbuf,'\0',smb_size);
+#ifdef LANMAN_ONLY
+	state->response = data_blob_talloc(
+		state, lm_response.data, lm_response.length);
+#else
+	state->response = data_blob_talloc(
+		state, nt_response.data, nt_response.length);
+#endif
+	if (tevent_req_nomem(state->response.data, req)) {
+		return tevent_req_post(req, ev);
+	}
 
-	cli_set_message(cli->outbuf,13,0,True);
-	SCVAL(cli->outbuf,smb_com,SMBsesssetupX);
-	cli_setup_packet(cli);
+	if (session_key.data) {
+		state->session_key = data_blob_talloc(
+			state, session_key.data, session_key.length);
+		if (tevent_req_nomem(state->session_key.data, req)) {
+			return tevent_req_post(req, ev);
+		}
+	}
+	data_blob_free(&session_key);
 
-	SCVAL(cli->outbuf,smb_vwv0,0xFF);
-	SSVAL(cli->outbuf,smb_vwv2,CLI_BUFFER_SIZE);
-	SSVAL(cli->outbuf,smb_vwv3,2);
-	SSVAL(cli->outbuf,smb_vwv4,cli->pid);
-	SIVAL(cli->outbuf,smb_vwv5,cli->sesskey);
-	SSVAL(cli->outbuf,smb_vwv7,lm_response.length);
-	SSVAL(cli->outbuf,smb_vwv8,nt_response.length);
-	SIVAL(cli->outbuf,smb_vwv11,capabilities); 
-	p = smb_buf(cli->outbuf);
-	if (lm_response.length) {
-		memcpy(p,lm_response.data, lm_response.length); p += lm_response.length;
+	SCVAL(vwv+0, 0, 0xff);
+	SCVAL(vwv+0, 1, 0);
+	SSVAL(vwv+1, 0, 0);
+	SSVAL(vwv+2, 0, CLI_BUFFER_SIZE);
+	SSVAL(vwv+3, 0, 2);
+	SSVAL(vwv+4, 0, cli->pid);
+	SIVAL(vwv+5, 0, cli->sesskey);
+	SSVAL(vwv+7, 0, lm_response.length);
+	SSVAL(vwv+8, 0, nt_response.length);
+	SSVAL(vwv+9, 0, 0);
+	SSVAL(vwv+10, 0, 0);
+	SIVAL(vwv+11, 0, cli_session_setup_capabilities(cli));
+
+	bytes = talloc_array(state, uint8_t,
+			     lm_response.length + nt_response.length);
+	if (tevent_req_nomem(bytes, req)) {
+		return tevent_req_post(req, ev);
 	}
-	if (nt_response.length) {
-		memcpy(p,nt_response.data, nt_response.length); p += nt_response.length;
+	if (lm_response.length != 0) {
+		memcpy(bytes, lm_response.data, lm_response.length);
 	}
-	p += clistr_push(cli, p, user, -1, STR_TERMINATE);
+	if (nt_response.length != 0) {
+		memcpy(bytes + lm_response.length,
+		       nt_response.data, nt_response.length);
+	}
+	data_blob_free(&lm_response);
+	data_blob_free(&nt_response);
 
-	/* Upper case here might help some NTLMv2 implementations */
-	p += clistr_push(cli, p, workgroup, -1, STR_TERMINATE|STR_UPPER);
-	p += clistr_push(cli, p, "Unix", -1, STR_TERMINATE);
-	p += clistr_push(cli, p, "Samba", -1, STR_TERMINATE);
-	cli_setup_bcc(cli, p);
+	bytes = smb_bytes_push_str(bytes, cli_ucs2(cli),
+				   user, strlen(user)+1, NULL);
 
-	if (!cli_send_smb(cli) || !cli_receive_smb(cli)) {
-		result = cli_nt_error(cli);
-		goto end;
+	/*
+	 * Upper case here might help some NTLMv2 implementations
+	 */
+	workgroup_upper = talloc_strdup_upper(talloc_tos(), workgroup);
+	if (tevent_req_nomem(workgroup_upper, req)) {
+		return tevent_req_post(req, ev);
 	}
+	bytes = smb_bytes_push_str(bytes, cli_ucs2(cli),
+				   workgroup_upper, strlen(workgroup_upper)+1,
+				   NULL);
+	TALLOC_FREE(workgroup_upper);
 
-	/* show_msg(cli->inbuf); */
+	bytes = smb_bytes_push_str(bytes, cli_ucs2(cli), "Unix", 5, NULL);
+	bytes = smb_bytes_push_str(bytes, cli_ucs2(cli), "Samba", 6, NULL);
+	if (tevent_req_nomem(bytes, req)) {
+		return tevent_req_post(req, ev);
+	}
 
-	if (cli_is_error(cli)) {
-		result = cli_nt_error(cli);
-		goto end;
+	subreq = cli_smb_send(state, ev, cli, SMBsesssetupX, 0, 13, vwv,
+			      talloc_get_size(bytes), bytes);
+	if (tevent_req_nomem(subreq, req)) {
+		return tevent_req_post(req, ev);
 	}
+	tevent_req_set_callback(subreq, cli_session_setup_nt1_done, req);
+	return req;
+}
 
-#ifdef LANMAN_ONLY
-	ok = cli_simple_set_signing(cli, session_key, lm_response);
-#else
-	ok = cli_simple_set_signing(cli, session_key, nt_response);
-#endif
-	if (ok) {
-		if (!cli_check_sign_mac(cli, cli->inbuf, 1)) {
-			result = NT_STATUS_ACCESS_DENIED;
-			goto end;
-		}
+static void cli_session_setup_nt1_done(struct tevent_req *subreq)
+{
+	struct tevent_req *req = tevent_req_callback_data(
+		subreq, struct tevent_req);
+	struct cli_session_setup_nt1_state *state = tevent_req_data(
+		req, struct cli_session_setup_nt1_state);
+	struct cli_state *cli = state->cli;
+	uint32_t num_bytes;
+	uint8_t *in;
+	char *inbuf;
+	uint8_t *bytes;
+	uint8_t *p;
+	NTSTATUS status;
+	ssize_t ret;
+
+	status = cli_smb_recv(subreq, state, &in, 0, NULL, NULL,
+			      &num_bytes, &bytes);
+	TALLOC_FREE(subreq);
+	if (!NT_STATUS_IS_OK(status)) {
+		tevent_req_nterror(req, status);
+		return;
 	}
 
-	/* use the returned vuid from now on */
-	cli->vuid = SVAL(cli->inbuf,smb_uid);
+	inbuf = (char *)in;
+	p = bytes;
 
-	p = smb_buf(cli->inbuf);
-	p += clistr_pull(cli->inbuf, cli->server_os, p, sizeof(fstring),
-			 -1, STR_TERMINATE);
-	p += clistr_pull(cli->inbuf, cli->server_type, p, sizeof(fstring),
-			 -1, STR_TERMINATE);
-	p += clistr_pull(cli->inbuf, cli->server_domain, p, sizeof(fstring),
-			 -1, STR_TERMINATE);
+	cli->vuid = SVAL(inbuf, smb_uid);
 
+	status = smb_bytes_talloc_string(cli,
+					inbuf,
+					&cli->server_os,
+					p,
+					bytes+num_bytes-p,
+					&ret);
+	if (!NT_STATUS_IS_OK(status)) {
+		tevent_req_nterror(req, status);
+		return;
+	}
+	p += ret;
+
+	status = smb_bytes_talloc_string(cli,
+					inbuf,
+					&cli->server_type,
+					p,
+					bytes+num_bytes-p,
+					&ret);
+	if (!NT_STATUS_IS_OK(status)) {
+		tevent_req_nterror(req, status);
+		return;
+	}
+	p += ret;
+
+	status = smb_bytes_talloc_string(cli,
+					inbuf,
+					&cli->server_domain,
+					p,
+					bytes+num_bytes-p,
+					&ret);
+	if (!NT_STATUS_IS_OK(status)) {
+		tevent_req_nterror(req, status);
+		return;
+	}
+	p += ret;
+
 	if (strstr(cli->server_type, "Samba")) {
 		cli->is_samba = True;
 	}
 
-	result = cli_set_username(cli, user);
-	if (!NT_STATUS_IS_OK(result)) {
-		goto end;
+	status = cli_set_username(cli, state->user);
+	if (tevent_req_nterror(req, status)) {
+		return;
 	}
-
-	if (session_key.data) {
+	if (cli_simple_set_signing(cli, state->session_key, state->response)
+	    && !cli_check_sign_mac(cli, (char *)in, 1)) {
+		tevent_req_nterror(req, NT_STATUS_ACCESS_DENIED);
+		return;
+	}
+	if (state->session_key.data) {
 		/* Have plaintext orginal */
-		cli_set_session_key(cli, session_key);
+		cli_set_session_key(cli, state->session_key);
 	}
+	tevent_req_done(req);
+}
 
-	result = NT_STATUS_OK;
-end:	
-	data_blob_free(&lm_response);
-	data_blob_free(&nt_response);
-	data_blob_free(&session_key);
-	return result;
+static NTSTATUS cli_session_setup_nt1_recv(struct tevent_req *req)
+{
+	return tevent_req_simple_recv_ntstatus(req);
 }
 
+static NTSTATUS cli_session_setup_nt1(struct cli_state *cli, const char *user,
+				      const char *pass, size_t passlen,
+				      const char *ntpass, size_t ntpasslen,
+				      const char *workgroup)
+{
+	TALLOC_CTX *frame = talloc_stackframe();
+	struct event_context *ev;
+	struct tevent_req *req;
+	NTSTATUS status = NT_STATUS_NO_MEMORY;
+
+	if (cli_has_async_calls(cli)) {
+		/*
+		 * Can't use sync call while an async call is in flight
+		 */
+		status = NT_STATUS_INVALID_PARAMETER;
+		goto fail;
+	}
+	ev = event_context_init(frame);
+	if (ev == NULL) {
+		goto fail;
+	}
+	req = cli_session_setup_nt1_send(frame, ev, cli, user, pass, passlen,
+					 ntpass, ntpasslen, workgroup);
+	if (req == NULL) {
+		goto fail;
+	}
+	if (!tevent_req_poll_ntstatus(req, ev, &status)) {
+		goto fail;
+	}
+	status = cli_session_setup_nt1_recv(req);
+ fail:
+	TALLOC_FREE(frame);
+	if (!NT_STATUS_IS_OK(status)) {
+		cli_set_error(cli, status);
+	}
+	return status;
+}
+
 /* The following is calculated from :
  * (smb_size-4) = 35
  * (smb_wcnt * 2) = 24 (smb_wcnt == 12 in cli_session_setup_blob_send() )
@@ -736,6 +1289,7 @@
 	uint8_t *p;
 	uint16_t blob_length;
 	uint8_t *inbuf;
+	ssize_t ret;
 
 	status = cli_smb_recv(subreq, state, &inbuf, 1, &wct, &vwv,
 			      &num_bytes, &bytes);
@@ -761,16 +1315,45 @@
 
 	p = bytes + blob_length;
 
-	p += clistr_pull(state->inbuf, cli->server_os,
-			 (char *)p, sizeof(fstring),
-			 bytes+num_bytes-p, STR_TERMINATE);
-	p += clistr_pull(state->inbuf, cli->server_type,
-			 (char *)p, sizeof(fstring),
-			 bytes+num_bytes-p, STR_TERMINATE);
-	p += clistr_pull(state->inbuf, cli->server_domain,
-			 (char *)p, sizeof(fstring),
-			 bytes+num_bytes-p, STR_TERMINATE);
+	status = smb_bytes_talloc_string(cli,
+					(char *)inbuf,
+					&cli->server_os,
+					p,
+					bytes+num_bytes-p,
+					&ret);
 
+	if (!NT_STATUS_IS_OK(status)) {
+		tevent_req_nterror(req, status);
+		return;
+	}
+	p += ret;
+
+	status = smb_bytes_talloc_string(cli,
+					(char *)inbuf,
+					&cli->server_type,
+					p,
+					bytes+num_bytes-p,
+					&ret);
+
+	if (!NT_STATUS_IS_OK(status)) {
+		tevent_req_nterror(req, status);
+		return;
+	}
+	p += ret;
+
+	status = smb_bytes_talloc_string(cli,
+					(char *)inbuf,
+					&cli->server_domain,
+					p,
+					bytes+num_bytes-p,
+					&ret);
+
+	if (!NT_STATUS_IS_OK(status)) {
+		tevent_req_nterror(req, status);
+		return;
+	}
+	p += ret;
+
 	if (strstr(cli->server_type, "Samba")) {
 		cli->is_samba = True;
 	}
@@ -1070,8 +1653,14 @@
 
 	if (NT_STATUS_IS_OK(status)) {
 		if (state->cli->server_domain[0] == '\0') {
-			fstrcpy(state->cli->server_domain,
-				state->ntlmssp_state->server.netbios_domain);
+			TALLOC_FREE(state->cli->server_domain);
+			state->cli->server_domain = talloc_strdup(state->cli,
+						state->ntlmssp_state->server.netbios_domain);
+			if (state->cli->server_domain == NULL) {
+				TALLOC_FREE(subreq);
+				tevent_req_nterror(req, NT_STATUS_NO_MEMORY);
+				return;
+			}
 		}
 		cli_set_session_key(
 			state->cli, state->ntlmssp_state->session_key);
@@ -1368,13 +1957,16 @@
 			   const char *workgroup)
 {
 	char *p;
-	fstring user2;
+	char *user2;
 
 	if (user) {
-		fstrcpy(user2, user);
+		user2 = talloc_strdup(talloc_tos(), user);
 	} else {
-		user2[0] ='\0';
+		user2 = talloc_strdup(talloc_tos(), "");
 	}
+	if (user2 == NULL) {
+		return NT_STATUS_NO_MEMORY;
+	}
 
 	if (!workgroup) {
 		workgroup = "";
@@ -1385,6 +1977,7 @@
 	    (p=strchr_m(user2,*lp_winbind_separator()))) {
 		*p = 0;
 		user = p+1;
+		strupper_m(user2);
 		workgroup = user2;
 	}
 
@@ -1427,7 +2020,7 @@
            connect */
 
 	if ((cli->sec_mode & NEGOTIATE_SECURITY_USER_LEVEL) == 0) 
-		return cli_session_setup_plaintext(cli, user, "", workgroup);
+		return cli_session_setup_plain(cli, user, "", workgroup);
 
 	/* if the server doesn't support encryption then we have to use 
 	   plaintext. The second password is ignored */
@@ -1438,7 +2031,7 @@
 				  " or 'client ntlmv2 auth = yes'\n"));
 			return NT_STATUS_ACCESS_DENIED;
 		}
-		return cli_session_setup_plaintext(cli, user, pass, workgroup);
+		return cli_session_setup_plain(cli, user, pass, workgroup);
 	}
 
 	/* if the server supports extended security then use SPNEGO */
@@ -1579,7 +2172,7 @@
 {
 	struct tevent_req *req, *subreq;
 	struct cli_tcon_andx_state *state;
-	fstring pword;
+	uint8_t p24[24];
 	uint16_t *vwv;
 	char *tmp = NULL;
 	uint8_t *bytes;
@@ -1593,7 +2186,10 @@
 	state->cli = cli;
 	vwv = state->vwv;
 
-	fstrcpy(cli->share, share);
+	cli->share = talloc_strdup(cli, share);
+	if (!cli->share) {
+		return NULL;
+	}
 
 	/* in user level security don't send a password now */
 	if (cli->sec_mode & NEGOTIATE_SECURITY_USER_LEVEL) {
@@ -1618,12 +2214,15 @@
 		 * Non-encrypted passwords - convert to DOS codepage before
 		 * encryption.
 		 */
+		SMBencrypt(pass, cli->secblob.data, p24);
 		passlen = 24;
-		SMBencrypt(pass, cli->secblob.data, (uchar *)pword);
+		pass = (const char *)p24;
 	} else {
 		if((cli->sec_mode & (NEGOTIATE_SECURITY_USER_LEVEL
 				     |NEGOTIATE_SECURITY_CHALLENGE_RESPONSE))
 		   == 0) {
+			char *tmp_pass;
+
 			if (!lp_client_plaintext_auth() && (*pass)) {
 				DEBUG(1, ("Server requested plaintext "
 					  "password but "
@@ -1635,16 +2234,21 @@
 			 * Non-encrypted passwords - convert to DOS codepage
 			 * before using.
 			 */
-			passlen = clistr_push(cli, pword, pass, sizeof(pword),
-					      STR_TERMINATE);
+			tmp_pass = talloc_array(talloc_tos(), char, 128);
+			if (tmp_pass == NULL) {
+				tevent_req_nterror(req, NT_STATUS_NO_MEMORY);
+				return tevent_req_post(req, ev);
+			}
+			passlen = clistr_push(cli,
+					tmp_pass,
+					pass,
+					talloc_get_size(tmp_pass),
+					STR_TERMINATE);
 			if (passlen == -1) {
-				DEBUG(1, ("clistr_push(pword) failed\n"));
-				goto access_denied;
+				tevent_req_nterror(req, NT_STATUS_NO_MEMORY);
+				return tevent_req_post(req, ev);
 			}
-		} else {
-			if (passlen) {
-				memcpy(pword, pass, passlen);
-			}
+			pass = tmp_pass;
 		}
 	}
 
@@ -1654,8 +2258,8 @@
 	SSVAL(vwv+2, 0, TCONX_FLAG_EXTENDED_RESPONSE);
 	SSVAL(vwv+3, 0, passlen);
 
-	if (passlen) {
-		bytes = (uint8_t *)talloc_memdup(state, pword, passlen);
+	if (passlen && pass) {
+		bytes = (uint8_t *)talloc_memdup(state, pass, passlen);
 	} else {
 		bytes = talloc_array(state, uint8_t, 0);
 	}
@@ -1757,8 +2361,24 @@
 
 	inbuf = (char *)in;
 
-	clistr_pull(inbuf, cli->dev, bytes, sizeof(fstring), num_bytes,
-		    STR_TERMINATE|STR_ASCII);
+	if (num_bytes) {
+		if (clistr_pull_talloc(cli,
+				inbuf,
+				SVAL(inbuf, smb_flg2),
+				&cli->dev,
+				bytes,
+				num_bytes,
+				STR_TERMINATE|STR_ASCII) == -1) {
+			tevent_req_nterror(req, NT_STATUS_NO_MEMORY);
+			return;
+		}
+	} else {
+		cli->dev = talloc_strdup(cli, "");
+		if (cli->dev == NULL) {
+			tevent_req_nterror(req, NT_STATUS_NO_MEMORY);
+			return;
+		}
+	}
 
 	if ((cli->protocol >= PROTOCOL_NT1) && (num_bytes == 3)) {
 		/* almost certainly win95 - enable bug fixes */
@@ -2391,7 +3011,10 @@
 		host = STAR_SMBSERVER;
 	}
 
-	fstrcpy(cli->desthost, host);
+	cli->desthost = talloc_strdup(cli, host);
+	if (cli->desthost == NULL) {
+		return NT_STATUS_NO_MEMORY;
+	}
 
 	/* allow hostnames of the form NAME#xx and do a netbios lookup */
 	if ((p = strchr(cli->desthost, '#'))) {
@@ -2793,7 +3416,7 @@
  */
 
 struct cli_state *get_ipc_connect_master_ip(TALLOC_CTX *ctx,
-				struct ip_service *mb_ip,
+				struct sockaddr_storage *mb_ip,
 				const struct user_auth_info *user_info,
 				char **pp_workgroup_out)
 {
@@ -2804,7 +3427,7 @@
 
 	*pp_workgroup_out = NULL;
 
-	print_sockaddr(addr, sizeof(addr), &mb_ip->ss);
+	print_sockaddr(addr, sizeof(addr), mb_ip);
         DEBUG(99, ("Looking up name of master browser %s\n",
                    addr));
 
@@ -2819,8 +3442,8 @@
          * the original wildcard query as the first choice and fall back to
          * MSBROWSE if the wildcard query fails.
          */
-        if (!name_status_find("*", 0, 0x1d, &mb_ip->ss, name) &&
-            !name_status_find(MSBROWSE, 1, 0x1d, &mb_ip->ss, name)) {
+        if (!name_status_find("*", 0, 0x1d, mb_ip, name) &&
+            !name_status_find(MSBROWSE, 1, 0x1d, mb_ip, name)) {
 
                 DEBUG(99, ("Could not retrieve name status for %s\n",
                            addr));
@@ -2851,9 +3474,10 @@
 					const struct user_auth_info *user_info,
 					char **pp_workgroup_out)
 {
-	struct ip_service *ip_list;
+	struct sockaddr_storage *ip_list;
 	struct cli_state *cli;
 	int i, count;
+	NTSTATUS status;
 
 	*pp_workgroup_out = NULL;
 
@@ -2861,15 +3485,17 @@
 
         /* Go looking for workgroups by broadcasting on the local network */
 
-        if (!NT_STATUS_IS_OK(name_resolve_bcast(MSBROWSE, 1, &ip_list,
-						&count))) {
-                DEBUG(99, ("No master browsers responded\n"));
+	status = name_resolve_bcast(MSBROWSE, 1, talloc_tos(),
+				    &ip_list, &count);
+        if (!NT_STATUS_IS_OK(status)) {
+                DEBUG(99, ("No master browsers responded: %s\n",
+			   nt_errstr(status)));
                 return False;
         }
 
 	for (i = 0; i < count; i++) {
 		char addr[INET6_ADDRSTRLEN];
-		print_sockaddr(addr, sizeof(addr), &ip_list[i].ss);
+		print_sockaddr(addr, sizeof(addr), &ip_list[i]);
 		DEBUG(99, ("Found master browser %s\n", addr));
 
 		cli = get_ipc_connect_master_ip(ctx, &ip_list[i],

Modified: branches/samba/experimental/source3/libsmb/clidfs.c
===================================================================
--- branches/samba/experimental/source3/libsmb/clidfs.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/libsmb/clidfs.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -20,6 +20,7 @@
 */
 
 #include "includes.h"
+#include "libsmb/libsmb.h"
 #include "libsmb/clirap.h"
 #include "msdfs.h"
 #include "trans2.h"

Modified: branches/samba/experimental/source3/libsmb/clidgram.c
===================================================================
--- branches/samba/experimental/source3/libsmb/clidgram.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/libsmb/clidgram.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -20,6 +20,8 @@
 */
 
 #include "includes.h"
+#include "libsmb/libsmb.h"
+#include "../lib/util/tevent_ntstatus.h"
 #include "libsmb/clidgram.h"
 #include "libsmb/nmblib.h"
 #include "messages.h"

Modified: branches/samba/experimental/source3/libsmb/clientgen.c
===================================================================
--- branches/samba/experimental/source3/libsmb/clientgen.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/libsmb/clientgen.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -19,6 +19,8 @@
 */
 
 #include "includes.h"
+#include "libsmb/libsmb.h"
+#include "../lib/util/tevent_ntstatus.h"
 #include "smb_signing.h"
 #include "async_smb.h"
 
@@ -380,51 +382,6 @@
 }
 
 /****************************************************************************
- Send a "direct" writeX smb to a fd.
-****************************************************************************/
-
-bool cli_send_smb_direct_writeX(struct cli_state *cli,
-				const char *p,
-				size_t extradata)
-{
-	/* First length to send is the offset to the data. */
-	size_t len = SVAL(cli->outbuf,smb_vwv11) + 4;
-	size_t nwritten=0;
-	struct iovec iov[2];
-
-	/* fd == -1 causes segfaults -- Tom (tom at ninja.nl) */
-	if (cli->fd == -1) {
-		return false;
-	}
-
-	if (client_is_signing_on(cli)) {
-		DEBUG(0,("cli_send_smb_large: cannot send signed packet.\n"));
-		return false;
-	}
-
-	iov[0].iov_base = (void *)cli->outbuf;
-	iov[0].iov_len = len;
-	iov[1].iov_base = CONST_DISCARD(void *, p);
-	iov[1].iov_len = extradata;
-
-	nwritten = write_data_iov(cli->fd, iov, 2);
-	if (nwritten < (len + extradata)) {
-		close(cli->fd);
-		cli->fd = -1;
-		cli->smb_rw_error = SMB_WRITE_ERROR;
-		DEBUG(0,("Error writing %d bytes to client. (%s)\n",
-			 (int)(len+extradata), strerror(errno)));
-		return false;
-	}
-
-	/* Increment the mid so we can tell between responses. */
-	cli->mid++;
-	if (!cli->mid)
-		cli->mid++;
-	return true;
-}
-
-/****************************************************************************
  Setup basics in a outgoing packet.
 ****************************************************************************/
 

Modified: branches/samba/experimental/source3/libsmb/clierror.c
===================================================================
--- branches/samba/experimental/source3/libsmb/clierror.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/libsmb/clierror.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -20,6 +20,7 @@
 */
 
 #include "includes.h"
+#include "libsmb/libsmb.h"
 
 /*****************************************************
  RAP error codes - a small start but will be extended.

Modified: branches/samba/experimental/source3/libsmb/clifile.c
===================================================================
--- branches/samba/experimental/source3/libsmb/clifile.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/libsmb/clifile.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -20,6 +20,8 @@
 
 #include "includes.h"
 #include "system/filesys.h"
+#include "libsmb/libsmb.h"
+#include "../lib/util/tevent_ntstatus.h"
 #include "async_smb.h"
 #include "libsmb/clirap.h"
 #include "trans2.h"
@@ -416,8 +418,7 @@
 	status = cli_qpathinfo_recv(subreq, state, &state->data,
 				    &state->num_data);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	/*
@@ -712,8 +713,7 @@
 	status = cli_qpathinfo_recv(subreq, state, &state->data,
 				    &state->num_data);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	tevent_req_done(req);
@@ -826,8 +826,7 @@
 	status = cli_qpathinfo_recv(subreq, state, &state->data,
 				    &state->num_data);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	tevent_req_done(req);
@@ -1135,7 +1134,7 @@
 		return NULL;
 	}
 
-	SSVAL(state->vwv+0, 0, aSYSTEM | aHIDDEN | aDIR);
+	SSVAL(state->vwv+0, 0, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_DIRECTORY);
 
 	bytes = talloc_array(state, uint8_t, 1);
 	if (tevent_req_nomem(bytes, req)) {
@@ -1178,8 +1177,7 @@
 
 	status = cli_smb_recv(subreq, NULL, NULL, 0, NULL, NULL, NULL, NULL);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	tevent_req_done(req);
@@ -1260,7 +1258,7 @@
 		return NULL;
 	}
 
-	SSVAL(state->vwv+0, 0 ,aSYSTEM | aHIDDEN | aDIR);
+	SSVAL(state->vwv+0, 0 ,FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_DIRECTORY);
 	SSVAL(state->vwv+1, 0, rename_flag);
 
 	bytes = talloc_array(state, uint8_t, 1);
@@ -1304,8 +1302,7 @@
 
 	status = cli_smb_recv(subreq, NULL, NULL, 0, NULL, NULL, NULL, NULL);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	tevent_req_done(req);
@@ -1499,8 +1496,7 @@
 
 	status = cli_smb_recv(subreq, NULL, NULL, 0, NULL, NULL, NULL, NULL);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	tevent_req_done(req);
@@ -1607,8 +1603,7 @@
 
 	status = cli_smb_recv(subreq, NULL, NULL, 0, NULL, NULL, NULL, NULL);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	tevent_req_done(req);
@@ -1715,8 +1710,7 @@
 
 	status = cli_smb_recv(subreq, NULL, NULL, 0, NULL, NULL, NULL, NULL);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	tevent_req_done(req);
@@ -1977,8 +1971,7 @@
 	status = cli_smb_recv(subreq, state, &inbuf, 3, &wct, &vwv,
 			      &num_bytes, &bytes);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	state->fnum = SVAL(vwv+2, 1);
@@ -2116,7 +2109,7 @@
 	SSVAL(state->vwv + 1, 0, 0);
 	SSVAL(state->vwv + 2, 0, 0);  /* no additional info */
 	SSVAL(state->vwv + 3, 0, accessmode);
-	SSVAL(state->vwv + 4, 0, aSYSTEM | aHIDDEN);
+	SSVAL(state->vwv + 4, 0, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 	SSVAL(state->vwv + 5, 0, 0);
 	SIVAL(state->vwv + 6, 0, 0);
 	SSVAL(state->vwv + 8, 0, openfn);
@@ -2170,8 +2163,7 @@
 	}
 
 	status = cli_smb_req_send(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return tevent_req_post(req, ev);
 	}
 	return req;
@@ -2191,8 +2183,7 @@
 	status = cli_smb_recv(subreq, state, &inbuf, 3, &wct, &vwv, NULL,
 			      NULL);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	state->fnum = SVAL(vwv+2, 0);
@@ -2306,8 +2297,7 @@
 	}
 
 	status = cli_smb_req_send(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return tevent_req_post(req, ev);
 	}
 	return req;
@@ -2321,8 +2311,7 @@
 
 	status = cli_smb_recv(subreq, NULL, NULL, 0, NULL, NULL, NULL, NULL);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	tevent_req_done(req);
@@ -2608,8 +2597,7 @@
 
 	status = cli_smb_recv(subreq, NULL, NULL, 0, NULL, NULL, NULL, NULL);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	tevent_req_done(req);
@@ -2773,8 +2761,7 @@
 
 	status = cli_smb_recv(subreq, NULL, NULL, 0, NULL, NULL, NULL, NULL);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	tevent_req_done(req);
@@ -3132,8 +3119,7 @@
 	status = cli_smb_recv(subreq, state, &inbuf, 11, &wct, &vwv,
 			      NULL, NULL);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 
@@ -3296,8 +3282,7 @@
 	status = cli_smb_recv(subreq, state, &inbuf, 4, &wct, &vwv, NULL,
 			      NULL);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 
@@ -3433,8 +3418,7 @@
 
 	status = cli_smb_recv(subreq, NULL, NULL, 0, NULL, NULL, NULL, NULL);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	tevent_req_done(req);
@@ -3567,8 +3551,7 @@
 
 	status = cli_smb_recv(subreq, NULL, NULL, 0, NULL, NULL, NULL, NULL);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	tevent_req_done(req);
@@ -3678,8 +3661,7 @@
 
 	status = cli_smb_recv(subreq, NULL, NULL, 0, NULL, NULL, NULL, NULL);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	tevent_req_done(req);
@@ -3795,8 +3777,7 @@
 	status = cli_smb_recv(subreq, state, &inbuf, 4, &wct, &vwv, NULL,
 			      NULL);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	state->bsize = SVAL(vwv+1, 0)*SVAL(vwv+2,0);
@@ -3928,8 +3909,7 @@
 	status = cli_smb_recv(subreq, state, &inbuf, 1, &wcnt, &vwv,
 			      &num_bytes, &bytes);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 
@@ -4289,8 +4269,7 @@
 	status = cli_qpathinfo_recv(subreq, state, &state->data,
 				    &state->num_data);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	tevent_req_done(req);
@@ -4396,7 +4375,6 @@
 #endif
 #if defined(O_DIRECTORY)
 	if (flags & O_DIRECTORY) {
-		ret &= ~(SMB_O_RDONLY|SMB_O_RDWR|SMB_O_WRONLY);
 		ret |= SMB_O_DIRECTORY;
 	}
 #endif
@@ -4426,8 +4404,7 @@
 	status = cli_trans_recv(subreq, state, NULL, NULL, 0, NULL,
 				NULL, 0, NULL, &data, 12, &num_data);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	state->fnum = SVAL(data,2);
@@ -4471,7 +4448,6 @@
 
 	/* Setup data words. */
 	if (is_dir) {
-		wire_flags &= ~(SMB_O_RDONLY|SMB_O_RDWR|SMB_O_WRONLY);
 		wire_flags |= SMB_O_DIRECTORY;
 	}
 
@@ -4885,9 +4861,8 @@
 	status = cli_trans_recv(subreq, talloc_tos(), &flags2, NULL, 0, NULL,
 				&params, 0, &num_params, NULL, 0, NULL);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
+	if (tevent_req_nterror(req, status)) {
 		DEBUG(10, ("cli_trans_recv returned %s\n", nt_errstr(status)));
-		tevent_req_nterror(req, status);
 		return;
 	}
 
@@ -5036,8 +5011,7 @@
 				NULL, 0, NULL,
 				&state->rdata, state->min_rdata,
 				&state->num_rdata);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	tevent_req_done(req);
@@ -5169,8 +5143,7 @@
 				NULL, 0, NULL,
 				&state->rdata, state->min_rdata,
 				&state->num_rdata);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	tevent_req_done(req);
@@ -5272,8 +5245,7 @@
 
 	status = cli_smb_recv(subreq, NULL, NULL, 0, NULL, NULL, NULL, NULL);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	tevent_req_done(req);
@@ -5375,8 +5347,7 @@
 				NULL, 0, NULL, /* param */
 				&state->data, 12, &state->num_data);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	tevent_req_done(req);

Modified: branches/samba/experimental/source3/libsmb/clifsinfo.c
===================================================================
--- branches/samba/experimental/source3/libsmb/clifsinfo.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/libsmb/clifsinfo.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -19,8 +19,10 @@
 */
 
 #include "includes.h"
+#include "libsmb/libsmb.h"
 #include "../libcli/auth/spnego.h"
 #include "../libcli/auth/ntlmssp.h"
+#include "../lib/util/tevent_ntstatus.h"
 #include "async_smb.h"
 #include "smb_crypt.h"
 #include "trans2.h"

Modified: branches/samba/experimental/source3/libsmb/clilist.c
===================================================================
--- branches/samba/experimental/source3/libsmb/clilist.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/libsmb/clilist.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -18,6 +18,8 @@
 */
 
 #include "includes.h"
+#include "libsmb/libsmb.h"
+#include "../lib/util/tevent_ntstatus.h"
 #include "async_smb.h"
 #include "trans2.h"
 

Modified: branches/samba/experimental/source3/libsmb/climessage.c
===================================================================
--- branches/samba/experimental/source3/libsmb/climessage.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/libsmb/climessage.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -18,7 +18,9 @@
 */
 
 #include "includes.h"
+#include "../lib/util/tevent_ntstatus.h"
 #include "async_smb.h"
+#include "libsmb/libsmb.h"
 
 struct cli_message_start_state {
 	uint16_t grp;

Modified: branches/samba/experimental/source3/libsmb/clioplock.c
===================================================================
--- branches/samba/experimental/source3/libsmb/clioplock.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/libsmb/clioplock.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -18,7 +18,9 @@
 */
 
 #include "includes.h"
+#include "../lib/util/tevent_ntstatus.h"
 #include "async_smb.h"
+#include "libsmb/libsmb.h"
 
 /****************************************************************************
 send an ack for an oplock break request

Modified: branches/samba/experimental/source3/libsmb/cliprint.c
===================================================================
--- branches/samba/experimental/source3/libsmb/cliprint.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/libsmb/cliprint.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -18,6 +18,7 @@
 */
 
 #include "includes.h"
+#include "libsmb/libsmb.h"
 #include "libsmb/clirap.h"
 
 /*****************************************************************************

Modified: branches/samba/experimental/source3/libsmb/cliquota.c
===================================================================
--- branches/samba/experimental/source3/libsmb/cliquota.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/libsmb/cliquota.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -18,6 +18,7 @@
 */
 
 #include "includes.h"
+#include "libsmb/libsmb.h"
 #include "../librpc/gen_ndr/ndr_security.h"
 #include "fake_file.h"
 #include "../libcli/security/security.h"

Modified: branches/samba/experimental/source3/libsmb/clirap.c
===================================================================
--- branches/samba/experimental/source3/libsmb/clirap.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/libsmb/clirap.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -23,7 +23,9 @@
 #include "../libcli/auth/libcli_auth.h"
 #include "../librpc/gen_ndr/rap.h"
 #include "../lib/crypto/arcfour.h"
+#include "../lib/util/tevent_ntstatus.h"
 #include "async_smb.h"
+#include "libsmb/libsmb.h"
 #include "libsmb/clirap.h"
 #include "trans2.h"
 

Modified: branches/samba/experimental/source3/libsmb/clirap.h
===================================================================
--- branches/samba/experimental/source3/libsmb/clirap.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/libsmb/clirap.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -25,6 +25,8 @@
 #ifndef _LIBSMB_CLIRAP_H
 #define _LIBSMB_CLIRAP_H
 
+struct cli_state;
+
 /* The following definitions come from libsmb/clirap.c  */
 
 bool cli_api(struct cli_state *cli,

Modified: branches/samba/experimental/source3/libsmb/clirap2.c
===================================================================
--- branches/samba/experimental/source3/libsmb/clirap2.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/libsmb/clirap2.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -76,6 +76,7 @@
 /*****************************************************/
 
 #include "includes.h"
+#include "libsmb/libsmb.h"
 #include "../librpc/gen_ndr/rap.h"
 #include "../librpc/gen_ndr/svcctl.h"
 #include "libsmb/clirap.h"

Modified: branches/samba/experimental/source3/libsmb/clireadwrite.c
===================================================================
--- branches/samba/experimental/source3/libsmb/clireadwrite.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/libsmb/clireadwrite.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -18,6 +18,8 @@
 */
 
 #include "includes.h"
+#include "libsmb/libsmb.h"
+#include "../lib/util/tevent_ntstatus.h"
 #include "async_smb.h"
 #include "trans2.h"
 
@@ -693,164 +695,6 @@
 }
 
 /****************************************************************************
- Issue a single SMBwrite and don't wait for a reply.
-****************************************************************************/
-
-static bool cli_issue_write(struct cli_state *cli,
-				uint16_t fnum,
-				off_t offset,
-				uint16 mode,
-				const char *buf,
-				size_t size)
-{
-	char *p;
-	bool large_writex = false;
-	/* We can only do direct writes if not signing and not encrypting. */
-	bool direct_writes = !client_is_signing_on(cli) && !cli_encryption_on(cli);
-
-	if (!direct_writes && size + 1 > cli->bufsize) {
-		cli->outbuf = (char *)SMB_REALLOC(cli->outbuf, size + 1024);
-		if (!cli->outbuf) {
-			return False;
-		}
-		cli->inbuf = (char *)SMB_REALLOC(cli->inbuf, size + 1024);
-		if (cli->inbuf == NULL) {
-			SAFE_FREE(cli->outbuf);
-			return False;
-		}
-		cli->bufsize = size + 1024;
-	}
-
-	memset(cli->outbuf,'\0',smb_size);
-	memset(cli->inbuf,'\0',smb_size);
-
-	if (cli->capabilities & CAP_LARGE_FILES) {
-		large_writex = True;
-	}
-
-	if (large_writex) {
-		cli_set_message(cli->outbuf,14,0,True);
-	} else {
-		cli_set_message(cli->outbuf,12,0,True);
-	}
-
-	SCVAL(cli->outbuf,smb_com,SMBwriteX);
-	SSVAL(cli->outbuf,smb_tid,cli->cnum);
-	cli_setup_packet(cli);
-
-	SCVAL(cli->outbuf,smb_vwv0,0xFF);
-	SSVAL(cli->outbuf,smb_vwv2,fnum);
-
-	SIVAL(cli->outbuf,smb_vwv3,offset);
-	SIVAL(cli->outbuf,smb_vwv5,0);
-	SSVAL(cli->outbuf,smb_vwv7,mode);
-
-	SSVAL(cli->outbuf,smb_vwv8,(mode & 0x0008) ? size : 0);
-	/*
-	 * According to CIFS-TR-1p00, this following field should only
-	 * be set if CAP_LARGE_WRITEX is set. We should check this
-	 * locally. However, this check might already have been
-	 * done by our callers.
-	 */
-	SSVAL(cli->outbuf,smb_vwv9,(size>>16));
-	SSVAL(cli->outbuf,smb_vwv10,size);
-	/* +1 is pad byte. */
-	SSVAL(cli->outbuf,smb_vwv11,
-	      smb_buf(cli->outbuf) - smb_base(cli->outbuf) + 1);
-
-	if (large_writex) {
-		SIVAL(cli->outbuf,smb_vwv12,(((uint64_t)offset)>>32) & 0xffffffff);
-	}
-
-	p = smb_base(cli->outbuf) + SVAL(cli->outbuf,smb_vwv11) -1;
-	*p++ = '\0'; /* pad byte. */
-	if (!direct_writes) {
-		memcpy(p, buf, size);
-	}
-	if (size > 0x1FFFF) {
-		/* This is a POSIX 14 word large write. */
-		set_message_bcc(cli->outbuf, 0); /* Set bcc to zero. */
-		_smb_setlen_large(cli->outbuf,smb_size + 28 + 1 /* pad */ + size - 4);
-	} else {
-		cli_setup_bcc(cli, p+size);
-	}
-
-	show_msg(cli->outbuf);
-	if (direct_writes) {
-		/* For direct writes we now need to write the data
-		 * directly out of buf. */
-		return cli_send_smb_direct_writeX(cli, buf, size);
-	} else {
-		return cli_send_smb(cli);
-	}
-}
-
-/****************************************************************************
-  write to a file
-  write_mode: 0x0001 disallow write cacheing
-              0x0002 return bytes remaining
-              0x0004 use raw named pipe protocol
-              0x0008 start of message mode named pipe protocol
-****************************************************************************/
-
-ssize_t cli_write(struct cli_state *cli,
-    	         uint16_t fnum, uint16 write_mode,
-		 const char *buf, off_t offset, size_t size)
-{
-	ssize_t bwritten = 0;
-	unsigned int issued = 0;
-	unsigned int received = 0;
-	int mpx = 1;
-	size_t writesize;
-	int blocks;
-
-	if(cli->max_mux > 1) {
-		mpx = cli->max_mux-1;
-	} else {
-		mpx = 1;
-	}
-
-	writesize = cli_write_max_bufsize(cli, write_mode);
-
-	blocks = (size + (writesize-1)) / writesize;
-
-	while (received < blocks) {
-
-		while ((issued - received < mpx) && (issued < blocks)) {
-			ssize_t bsent = issued * writesize;
-			ssize_t size1 = MIN(writesize, size - bsent);
-
-			if (!cli_issue_write(cli, fnum, offset + bsent,
-			                write_mode,
-			                buf + bsent,
-					size1))
-				return -1;
-			issued++;
-		}
-
-		if (!cli_receive_smb(cli)) {
-			return bwritten;
-		}
-
-		received++;
-
-		if (cli_is_error(cli))
-			break;
-
-		bwritten += SVAL(cli->inbuf, smb_vwv2);
-		if (writesize > 0xFFFF) {
-			bwritten += (((int)(SVAL(cli->inbuf, smb_vwv4)))<<16);
-		}
-	}
-
-	while (received < issued && cli_receive_smb(cli)) {
-		received++;
-	}
-
-	return bwritten;
-}
-
-/****************************************************************************
   write to a file using a SMBwrite and not bypassing 0 byte writes
 ****************************************************************************/
 
@@ -1138,11 +982,59 @@
 	tevent_req_set_callback(subreq, cli_writeall_written, req);
 }
 
-static NTSTATUS cli_writeall_recv(struct tevent_req *req)
+static NTSTATUS cli_writeall_recv(struct tevent_req *req,
+				  size_t *pwritten)
 {
-	return tevent_req_simple_recv_ntstatus(req);
+	struct cli_writeall_state *state = tevent_req_data(
+		req, struct cli_writeall_state);
+	NTSTATUS status;
+
+	if (tevent_req_is_nterror(req, &status)) {
+		return status;
+	}
+	if (pwritten != NULL) {
+		*pwritten = state->written;
+	}
+	return NT_STATUS_OK;
 }
 
+NTSTATUS cli_writeall(struct cli_state *cli, uint16_t fnum, uint16_t mode,
+		      const uint8_t *buf, off_t offset, size_t size,
+		      size_t *pwritten)
+{
+	TALLOC_CTX *frame = talloc_stackframe();
+	struct event_context *ev;
+	struct tevent_req *req;
+	NTSTATUS status = NT_STATUS_NO_MEMORY;
+
+	if (cli_has_async_calls(cli)) {
+		/*
+		 * Can't use sync call while an async call is in flight
+		 */
+		status = NT_STATUS_INVALID_PARAMETER;
+		goto fail;
+	}
+	ev = event_context_init(frame);
+	if (ev == NULL) {
+		goto fail;
+	}
+	req = cli_writeall_send(frame, ev, cli, fnum, mode, buf, offset, size);
+	if (req == NULL) {
+		goto fail;
+	}
+	if (!tevent_req_poll(req, ev)) {
+		status = map_nt_error_from_unix(errno);
+		goto fail;
+	}
+	status = cli_writeall_recv(req, pwritten);
+ fail:
+	TALLOC_FREE(frame);
+	if (!NT_STATUS_IS_OK(status)) {
+		cli_set_error(cli, status);
+	}
+	return status;
+}
+
 struct cli_push_write_state {
 	struct tevent_req *req;/* This is the main request! Not the subreq */
 	uint32_t idx;
@@ -1305,7 +1197,7 @@
 	state->reqs[idx] = NULL;
 	state->pending -= 1;
 
-	status = cli_writeall_recv(subreq);
+	status = cli_writeall_recv(subreq, NULL);
 	TALLOC_FREE(subreq);
 	TALLOC_FREE(substate);
 	if (tevent_req_nterror(req, status)) {

Modified: branches/samba/experimental/source3/libsmb/clisecdesc.c
===================================================================
--- branches/samba/experimental/source3/libsmb/clisecdesc.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/libsmb/clisecdesc.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -18,6 +18,7 @@
 */
 
 #include "includes.h"
+#include "libsmb/libsmb.h"
 
 /****************************************************************************
   query the security descriptor for a open file

Modified: branches/samba/experimental/source3/libsmb/clisigning.c
===================================================================
--- branches/samba/experimental/source3/libsmb/clisigning.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/libsmb/clisigning.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -20,6 +20,7 @@
 */
 
 #include "includes.h"
+#include "libsmb/libsmb.h"
 #include "smb_signing.h"
 
 bool cli_simple_set_signing(struct cli_state *cli,

Modified: branches/samba/experimental/source3/libsmb/clistr.c
===================================================================
--- branches/samba/experimental/source3/libsmb/clistr.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/libsmb/clistr.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -19,6 +19,7 @@
 */
 
 #include "includes.h"
+#include "libsmb/libsmb.h"
 
 size_t clistr_push_fn(const char *function,
 			unsigned int line,

Modified: branches/samba/experimental/source3/libsmb/clitrans.c
===================================================================
--- branches/samba/experimental/source3/libsmb/clitrans.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/libsmb/clitrans.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -18,6 +18,8 @@
 */
 
 #include "includes.h"
+#include "libsmb/libsmb.h"
+#include "../lib/util/tevent_ntstatus.h"
 #include "async_smb.h"
 
 struct trans_recvblob {

Copied: branches/samba/experimental/source3/libsmb/libsmb.h (from rev 3778, tags/samba/upstream_3.6.0~rc1/source3/libsmb/libsmb.h)
===================================================================
--- branches/samba/experimental/source3/libsmb/libsmb.h	                        (rev 0)
+++ branches/samba/experimental/source3/libsmb/libsmb.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -0,0 +1,25 @@
+/*
+   Unix SMB/CIFS implementation.
+
+   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/>.
+*/
+
+#ifndef _LIBSMB_LIBSMB_H
+#define _LIBSMB_LIBSMB_H
+
+#include "client.h"
+#include "libads/ads_status.h"
+#include "libsmb/proto.h"
+
+#endif /* _LIBSMB_LIBSMB_H */

Modified: branches/samba/experimental/source3/libsmb/libsmb_cache.c
===================================================================
--- branches/samba/experimental/source3/libsmb/libsmb_cache.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/libsmb/libsmb_cache.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -21,6 +21,7 @@
 */
 
 #include "includes.h"
+#include "libsmb/libsmb.h"
 #include "libsmbclient.h"
 #include "libsmb_internal.h"
 

Modified: branches/samba/experimental/source3/libsmb/libsmb_context.c
===================================================================
--- branches/samba/experimental/source3/libsmb/libsmb_context.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/libsmb/libsmb_context.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -23,6 +23,7 @@
 */
 
 #include "includes.h"
+#include "libsmb/libsmb.h"
 #include "libsmbclient.h"
 #include "libsmb_internal.h"
 #include "secrets.h"

Modified: branches/samba/experimental/source3/libsmb/libsmb_dir.c
===================================================================
--- branches/samba/experimental/source3/libsmb/libsmb_dir.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/libsmb/libsmb_dir.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -23,6 +23,7 @@
 */
 
 #include "includes.h"
+#include "libsmb/libsmb.h"
 #include "popt_common.h"
 #include "libsmbclient.h"
 #include "libsmb_internal.h"
@@ -245,7 +246,7 @@
 {
 
 	if (add_dirent((SMBCFILE *)state, finfo->name, "",
-		       (finfo->mode&aDIR?SMBC_DIR:SMBC_FILE)) < 0) {
+		       (finfo->mode&FILE_ATTRIBUTE_DIRECTORY?SMBC_DIR:SMBC_FILE)) < 0) {
 		SMBCFILE *dir = (SMBCFILE *)state;
 		return map_nt_error_from_unix(dir->dir_error);
 	}
@@ -456,9 +457,10 @@
                 int i;
                 int count;
                 int max_lmb_count;
-                struct ip_service *ip_list;
-                struct ip_service server_addr;
+                struct sockaddr_storage *ip_list;
+                struct sockaddr_storage server_addr;
                 struct user_auth_info u_info;
+		NTSTATUS status;
 
 		if (share[0] != (char)0 || path[0] != (char)0) {
 
@@ -498,13 +500,14 @@
                  */
 
                 ip_list = NULL;
-                if (!NT_STATUS_IS_OK(name_resolve_bcast(MSBROWSE, 1, &ip_list,
-                                                        &count)))
+		status = name_resolve_bcast(MSBROWSE, 1, talloc_tos(),
+					    &ip_list, &count);
+                if (!NT_STATUS_IS_OK(status))
 		{
 
-                        SAFE_FREE(ip_list);
+                        TALLOC_FREE(ip_list);
 
-                        if (!find_master_ip(workgroup, &server_addr.ss)) {
+                        if (!find_master_ip(workgroup, &server_addr)) {
 
 				if (dir) {
 					SAFE_FREE(dir->fname);
@@ -515,8 +518,9 @@
                                 return NULL;
                         }
 
-			ip_list = (struct ip_service *)memdup(
-				&server_addr, sizeof(server_addr));
+			ip_list = (struct sockaddr_storage *)talloc_memdup(
+				talloc_tos(), &server_addr,
+				sizeof(server_addr));
 			if (ip_list == NULL) {
 				if (dir) {
 					SAFE_FREE(dir->fname);
@@ -534,7 +538,7 @@
 			char *wg_ptr = NULL;
                 	struct cli_state *cli = NULL;
 
-			print_sockaddr(addr, sizeof(addr), &ip_list[i].ss);
+			print_sockaddr(addr, sizeof(addr), &ip_list[i]);
                         DEBUG(99, ("Found master browser %d of %d: %s\n",
                                    i+1, MAX(count, max_lmb_count),
                                    addr));
@@ -594,7 +598,7 @@
                         }
                 }
 
-                SAFE_FREE(ip_list);
+                TALLOC_FREE(ip_list);
         } else {
                 /*
                  * Server not an empty string ... Check the rest and see what
@@ -816,7 +820,7 @@
 			}
 
 			status = cli_list(targetcli, targetpath,
-					  aDIR | aSYSTEM | aHIDDEN,
+					  FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN,
 					  dir_list_fn, (void *)dir);
 			if (!NT_STATUS_IS_OK(status)) {
 				if (dir) {
@@ -1345,7 +1349,7 @@
 			}
 
 			status = cli_list(targetcli, lpath,
-					  aDIR | aSYSTEM | aHIDDEN,
+					  FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN,
 					  rmdir_list_fn,
 					  &smbc_rmdir_dirempty);
 
@@ -1611,10 +1615,10 @@
 
 	mode = 0;
 
-	if (!(newmode & (S_IWUSR | S_IWGRP | S_IWOTH))) mode |= aRONLY;
-	if ((newmode & S_IXUSR) && lp_map_archive(-1)) mode |= aARCH;
-	if ((newmode & S_IXGRP) && lp_map_system(-1)) mode |= aSYSTEM;
-	if ((newmode & S_IXOTH) && lp_map_hidden(-1)) mode |= aHIDDEN;
+	if (!(newmode & (S_IWUSR | S_IWGRP | S_IWOTH))) mode |= FILE_ATTRIBUTE_READONLY;
+	if ((newmode & S_IXUSR) && lp_map_archive(-1)) mode |= FILE_ATTRIBUTE_ARCHIVE;
+	if ((newmode & S_IXGRP) && lp_map_system(-1)) mode |= FILE_ATTRIBUTE_SYSTEM;
+	if ((newmode & S_IXOTH) && lp_map_hidden(-1)) mode |= FILE_ATTRIBUTE_HIDDEN;
 
 	if (!NT_STATUS_IS_OK(cli_setatr(targetcli, targetpath, mode, 0))) {
 		errno = SMBC_errno(context, targetcli);
@@ -1803,7 +1807,7 @@
 	}
 	/*d_printf(">>>unlink: resolved path as %s\n", targetpath);*/
 
-	if (!NT_STATUS_IS_OK(cli_unlink(targetcli, targetpath, aSYSTEM | aHIDDEN))) {
+	if (!NT_STATUS_IS_OK(cli_unlink(targetcli, targetpath, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN))) {
 
 		errno = SMBC_errno(context, targetcli);
 
@@ -2009,7 +2013,7 @@
 		int eno = SMBC_errno(ocontext, targetcli1);
 
 		if (eno != EEXIST ||
-		    !NT_STATUS_IS_OK(cli_unlink(targetcli1, targetpath2, aSYSTEM | aHIDDEN)) ||
+		    !NT_STATUS_IS_OK(cli_unlink(targetcli1, targetpath2, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN)) ||
 		    !NT_STATUS_IS_OK(cli_rename(targetcli1, targetpath1, targetpath2))) {
 
 			errno = eno;

Modified: branches/samba/experimental/source3/libsmb/libsmb_file.c
===================================================================
--- branches/samba/experimental/source3/libsmb/libsmb_file.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/libsmb/libsmb_file.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -23,6 +23,7 @@
 */
 
 #include "includes.h"
+#include "libsmb/libsmb.h"
 #include "libsmbclient.h"
 #include "libsmb_internal.h"
 
@@ -318,13 +319,13 @@
                const void *buf,
                size_t count)
 {
-	int ret;
         off_t offset;
 	char *server = NULL, *share = NULL, *user = NULL, *password = NULL;
 	char *path = NULL;
 	char *targetpath = NULL;
 	struct cli_state *targetcli = NULL;
 	TALLOC_CTX *frame = talloc_stackframe();
+	NTSTATUS status;
 
 	/* First check all pointers before dereferencing them */
 
@@ -377,18 +378,18 @@
 	}
 	/*d_printf(">>>write: resolved path as %s\n", targetpath);*/
 
-	ret = cli_write(targetcli, file->cli_fd,
-                        0, (char *)buf, offset, count);
-	if (ret <= 0) {
-		errno = SMBC_errno(context, targetcli);
+	status = cli_writeall(targetcli, file->cli_fd,
+			      0, (uint8_t *)buf, offset, count, NULL);
+	if (!NT_STATUS_IS_OK(status)) {
+		errno = map_errno_from_nt_status(status);
 		TALLOC_FREE(frame);
 		return -1;
 	}
 
-	file->offset += ret;
+	file->offset += count;
 
 	TALLOC_FREE(frame);
-	return ret;  /* Success, 0 bytes of data ... */
+	return count;  /* Success, 0 bytes of data ... */
 }
 
 /*

Modified: branches/samba/experimental/source3/libsmb/libsmb_misc.c
===================================================================
--- branches/samba/experimental/source3/libsmb/libsmb_misc.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/libsmb/libsmb_misc.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -23,6 +23,7 @@
 */
 
 #include "includes.h"
+#include "libsmb/libsmb.h"
 #include "libsmbclient.h"
 #include "libsmb_internal.h"
 

Modified: branches/samba/experimental/source3/libsmb/libsmb_printjob.c
===================================================================
--- branches/samba/experimental/source3/libsmb/libsmb_printjob.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/libsmb/libsmb_printjob.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -23,6 +23,7 @@
 */
 
 #include "includes.h"
+#include "libsmb/libsmb.h"
 #include "libsmbclient.h"
 #include "libsmb_internal.h"
 

Modified: branches/samba/experimental/source3/libsmb/libsmb_server.c
===================================================================
--- branches/samba/experimental/source3/libsmb/libsmb_server.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/libsmb/libsmb_server.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -24,6 +24,7 @@
 */
 
 #include "includes.h"
+#include "libsmb/libsmb.h"
 #include "libsmbclient.h"
 #include "libsmb_internal.h"
 #include "../librpc/gen_ndr/ndr_lsa.h"

Modified: branches/samba/experimental/source3/libsmb/libsmb_stat.c
===================================================================
--- branches/samba/experimental/source3/libsmb/libsmb_stat.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/libsmb/libsmb_stat.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -23,6 +23,7 @@
 */
 
 #include "includes.h"
+#include "libsmb/libsmb.h"
 #include "libsmbclient.h"
 #include "libsmb_internal.h"
 

Modified: branches/samba/experimental/source3/libsmb/libsmb_xattr.c
===================================================================
--- branches/samba/experimental/source3/libsmb/libsmb_xattr.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/libsmb/libsmb_xattr.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -23,6 +23,7 @@
 */
 
 #include "includes.h"
+#include "libsmb/libsmb.h"
 #include "libsmbclient.h"
 #include "libsmb_internal.h"
 #include "../librpc/gen_ndr/ndr_lsa.h"

Modified: branches/samba/experimental/source3/libsmb/namequery.c
===================================================================
--- branches/samba/experimental/source3/libsmb/namequery.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/libsmb/namequery.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -19,6 +19,7 @@
 */
 
 #include "includes.h"
+#include "../lib/util/tevent_ntstatus.h"
 #include "libads/sitename_cache.h"
 #include "libads/dns.h"
 #include "../libcli/netlogon/netlogon.h"
@@ -1252,6 +1253,7 @@
 		private_data, struct name_query_state);
 	struct nmb_packet *nmb = &p->packet.nmb;
 	struct sockaddr_storage *tmp_addrs;
+	bool got_unique_netbios_name = false;
 	int i;
 
 	debug_nmb_packet(p);
@@ -1326,11 +1328,32 @@
 		 "from %s ( ", inet_ntoa(p->ip)));
 
 	for (i=0; i<nmb->answers->rdlength/6; i++) {
+		uint16_t flags;
 		struct in_addr ip;
+		struct sockaddr_storage addr;
+		int j;
+
+		flags = RSVAL(&nmb->answers->rdata[i*6], 0);
+		got_unique_netbios_name |= ((flags & 0x8000) == 0);
+
 		putip((char *)&ip,&nmb->answers->rdata[2+i*6]);
-		in_addr_to_sockaddr_storage(
-			&state->addrs[state->num_addrs], ip);
+		in_addr_to_sockaddr_storage(&addr, ip);
+
+		for (j=0; j<state->num_addrs; j++) {
+			if (sockaddr_equal(
+				    (struct sockaddr *)&addr,
+				    (struct sockaddr *)&state->addrs[j])) {
+				break;
+			}
+		}
+		if (j < state->num_addrs) {
+			/* Already got it */
+			continue;
+		}
+
 		DEBUGADD(2,("%s ",inet_ntoa(ip)));
+
+		state->addrs[state->num_addrs] = addr;
 		state->num_addrs += 1;
 	}
 	DEBUGADD(2,(")\n"));
@@ -1351,10 +1374,10 @@
 
 	if (state->bcast) {
 		/*
-		 * We have to collect all entries coming in from
-		 * broadcast queries
+		 * We have to collect all entries coming in from broadcast
+		 * queries. If we got a unique name, we're done.
 		 */
-		return false;
+		return got_unique_netbios_name;
 	}
 	/*
 	 * WINS responses are accepted when they are received
@@ -1488,7 +1511,8 @@
 
 NTSTATUS name_resolve_bcast(const char *name,
 			int name_type,
-			struct ip_service **return_iplist,
+			TALLOC_CTX *mem_ctx,
+			struct sockaddr_storage **return_iplist,
 			int *return_count)
 {
 	int i;
@@ -1536,11 +1560,7 @@
 	return status;
 
 success:
-
-	if (!convert_ss2service(return_iplist, ss_list, *return_count) )
-		status = NT_STATUS_NO_MEMORY;
-
-	TALLOC_FREE(ss_list);
+	*return_iplist = ss_list;
 	return status;
 }
 
@@ -2047,10 +2067,16 @@
 				}
 			}
 		} else if(strequal( tok, "bcast")) {
-			status = name_resolve_bcast(name, name_type,
-						    return_iplist,
-						    return_count);
+			struct sockaddr_storage *ss_list;
+			status = name_resolve_bcast(
+				name, name_type, talloc_tos(),
+				&ss_list, return_count);
 			if (NT_STATUS_IS_OK(status)) {
+				if (!convert_ss2service(return_iplist,
+							ss_list,
+							*return_count)) {
+					status = NT_STATUS_NO_MEMORY;
+				}
 				goto done;
 			}
 		} else {

Modified: branches/samba/experimental/source3/libsmb/nterr.c
===================================================================
--- branches/samba/experimental/source3/libsmb/nterr.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/libsmb/nterr.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -566,6 +566,8 @@
 	{ "NT_STATUS_CURRENT_DOMAIN_NOT_ALLOWED", NT_STATUS_CURRENT_DOMAIN_NOT_ALLOWED },
 	{ "NT_STATUS_OBJECTID_NOT_FOUND", NT_STATUS_OBJECTID_NOT_FOUND },
 	{ "NT_STATUS_DOWNGRADE_DETECTED", NT_STATUS_DOWNGRADE_DETECTED },
+	{ "NT_STATUS_NO_S4U_PROT_SUPPORT", NT_STATUS_NO_S4U_PROT_SUPPORT },
+	{ "NT_STATUS_CROSSREALM_DELEGATION_FAILURE", NT_STATUS_CROSSREALM_DELEGATION_FAILURE },
 	{ "NT_STATUS_INVALID_LOCK_RANGE", NT_STATUS_INVALID_LOCK_RANGE },
 	{ "NT_STATUS_ERROR_DS_OBJ_STRING_NAME_EXISTS", NT_STATUS_ERROR_DS_OBJ_STRING_NAME_EXISTS },
 	{ "NT_STATUS_ERROR_DS_INCOMPATIBLE_VERSION", NT_STATUS_ERROR_DS_INCOMPATIBLE_VERSION },

Modified: branches/samba/experimental/source3/libsmb/passchange.c
===================================================================
--- branches/samba/experimental/source3/libsmb/passchange.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/libsmb/passchange.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -21,6 +21,7 @@
 #include "../librpc/gen_ndr/ndr_samr.h"
 #include "rpc_client/cli_pipe.h"
 #include "rpc_client/cli_samr.h"
+#include "libsmb/libsmb.h"
 #include "libsmb/clirap.h"
 #include "libsmb/nmblib.h"
 

Copied: branches/samba/experimental/source3/libsmb/proto.h (from rev 3778, tags/samba/upstream_3.6.0~rc1/source3/libsmb/proto.h)
===================================================================
--- branches/samba/experimental/source3/libsmb/proto.h	                        (rev 0)
+++ branches/samba/experimental/source3/libsmb/proto.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -0,0 +1,839 @@
+/*
+   Unix SMB/CIFS implementation.
+
+   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/>.
+*/
+
+#ifndef _LIBSMB_PROTO_H_
+#define _LIBSMB_PROTO_H_
+
+/* The following definitions come from libsmb/cliconnect.c  */
+
+ADS_STATUS cli_session_setup_spnego(struct cli_state *cli, const char *user,
+			      const char *pass, const char *user_domain,
+				    const char * dest_realm);
+
+NTSTATUS cli_session_setup(struct cli_state *cli,
+			   const char *user,
+			   const char *pass, int passlen,
+			   const char *ntpass, int ntpasslen,
+			   const char *workgroup);
+struct tevent_req *cli_session_setup_guest_create(TALLOC_CTX *mem_ctx,
+						  struct event_context *ev,
+						  struct cli_state *cli,
+						  struct tevent_req **psmbreq);
+struct tevent_req *cli_session_setup_guest_send(TALLOC_CTX *mem_ctx,
+						struct event_context *ev,
+						struct cli_state *cli);
+NTSTATUS cli_session_setup_guest_recv(struct tevent_req *req);
+struct tevent_req *cli_ulogoff_send(TALLOC_CTX *mem_ctx,
+				    struct tevent_context *ev,
+				    struct cli_state *cli);
+NTSTATUS cli_ulogoff_recv(struct tevent_req *req);
+NTSTATUS cli_ulogoff(struct cli_state *cli);
+struct tevent_req *cli_tcon_andx_create(TALLOC_CTX *mem_ctx,
+					struct event_context *ev,
+					struct cli_state *cli,
+					const char *share, const char *dev,
+					const char *pass, int passlen,
+					struct tevent_req **psmbreq);
+struct tevent_req *cli_tcon_andx_send(TALLOC_CTX *mem_ctx,
+				      struct event_context *ev,
+				      struct cli_state *cli,
+				      const char *share, const char *dev,
+				      const char *pass, int passlen);
+NTSTATUS cli_tcon_andx_recv(struct tevent_req *req);
+NTSTATUS cli_tcon_andx(struct cli_state *cli, const char *share,
+		       const char *dev, const char *pass, int passlen);
+struct tevent_req *cli_tdis_send(TALLOC_CTX *mem_ctx,
+                                 struct tevent_context *ev,
+                                 struct cli_state *cli);
+NTSTATUS cli_tdis_recv(struct tevent_req *req);
+NTSTATUS cli_tdis(struct cli_state *cli);
+NTSTATUS cli_negprot(struct cli_state *cli);
+struct tevent_req *cli_negprot_send(TALLOC_CTX *mem_ctx,
+				    struct event_context *ev,
+				    struct cli_state *cli);
+NTSTATUS cli_negprot_recv(struct tevent_req *req);
+bool cli_session_request(struct cli_state *cli,
+			 struct nmb_name *calling, struct nmb_name *called);
+NTSTATUS cli_connect(struct cli_state *cli,
+		const char *host,
+		struct sockaddr_storage *dest_ss);
+NTSTATUS cli_start_connection(struct cli_state **output_cli,
+			      const char *my_name,
+			      const char *dest_host,
+			      struct sockaddr_storage *dest_ss, int port,
+			      int signing_state, int flags);
+NTSTATUS cli_full_connection(struct cli_state **output_cli,
+			     const char *my_name,
+			     const char *dest_host,
+			     struct sockaddr_storage *dest_ss, int port,
+			     const char *service, const char *service_type,
+			     const char *user, const char *domain,
+			     const char *password, int flags,
+			     int signing_state);
+bool attempt_netbios_session_request(struct cli_state **ppcli, const char *srchost, const char *desthost,
+                                     struct sockaddr_storage *pdest_ss);
+NTSTATUS cli_raw_tcon(struct cli_state *cli,
+		      const char *service, const char *pass, const char *dev,
+		      uint16 *max_xmit, uint16 *tid);
+struct cli_state *get_ipc_connect(char *server,
+				struct sockaddr_storage *server_ss,
+				const struct user_auth_info *user_info);
+struct cli_state *get_ipc_connect_master_ip(TALLOC_CTX *ctx,
+				struct sockaddr_storage *mb_ip,
+				const struct user_auth_info *user_info,
+				char **pp_workgroup_out);
+struct cli_state *get_ipc_connect_master_ip_bcast(TALLOC_CTX *ctx,
+					const struct user_auth_info *user_info,
+					char **pp_workgroup_out);
+
+/* The following definitions come from libsmb/clidfs.c  */
+
+NTSTATUS cli_cm_force_encryption(struct cli_state *c,
+			const char *username,
+			const char *password,
+			const char *domain,
+			const char *sharename);
+struct cli_state *cli_cm_open(TALLOC_CTX *ctx,
+				struct cli_state *referring_cli,
+				const char *server,
+				const char *share,
+				const struct user_auth_info *auth_info,
+				bool show_hdr,
+				bool force_encrypt,
+				int max_protocol,
+				int port,
+				int name_type);
+void cli_cm_display(const struct cli_state *c);
+struct client_dfs_referral;
+NTSTATUS cli_dfs_get_referral(TALLOC_CTX *ctx,
+			struct cli_state *cli,
+			const char *path,
+			struct client_dfs_referral **refs,
+			size_t *num_refs,
+			size_t *consumed);
+bool cli_resolve_path(TALLOC_CTX *ctx,
+			const char *mountpt,
+			const struct user_auth_info *dfs_auth_info,
+			struct cli_state *rootcli,
+			const char *path,
+			struct cli_state **targetcli,
+			char **pp_targetpath);
+
+bool cli_check_msdfs_proxy(TALLOC_CTX *ctx,
+			struct cli_state *cli,
+			const char *sharename,
+			char **pp_newserver,
+			char **pp_newshare,
+			bool force_encrypt,
+			const char *username,
+			const char *password,
+			const char *domain);
+
+/* The following definitions come from libsmb/clientgen.c  */
+
+int cli_set_message(char *buf,int num_words,int num_bytes,bool zero);
+unsigned int cli_set_timeout(struct cli_state *cli, unsigned int timeout);
+void cli_set_port(struct cli_state *cli, int port);
+bool cli_state_seqnum_persistent(struct cli_state *cli,
+				 uint16_t mid);
+bool cli_state_seqnum_remove(struct cli_state *cli,
+			     uint16_t mid);
+bool cli_receive_smb(struct cli_state *cli);
+bool cli_send_smb(struct cli_state *cli);
+void cli_setup_packet_buf(struct cli_state *cli, char *buf);
+void cli_setup_packet(struct cli_state *cli);
+void cli_setup_bcc(struct cli_state *cli, void *p);
+NTSTATUS cli_set_domain(struct cli_state *cli, const char *domain);
+NTSTATUS cli_set_username(struct cli_state *cli, const char *username);
+NTSTATUS cli_set_password(struct cli_state *cli, const char *password);
+NTSTATUS cli_init_creds(struct cli_state *cli, const char *username, const char *domain, const char *password);
+struct cli_state *cli_initialise(void);
+struct cli_state *cli_initialise_ex(int signing_state);
+void cli_nt_pipes_close(struct cli_state *cli);
+void cli_shutdown(struct cli_state *cli);
+void cli_sockopt(struct cli_state *cli, const char *options);
+uint16 cli_setpid(struct cli_state *cli, uint16 pid);
+bool cli_set_case_sensitive(struct cli_state *cli, bool case_sensitive);
+struct tevent_req *cli_echo_send(TALLOC_CTX *mem_ctx, struct event_context *ev,
+				 struct cli_state *cli, uint16_t num_echos,
+				 DATA_BLOB data);
+NTSTATUS cli_echo_recv(struct tevent_req *req);
+NTSTATUS cli_echo(struct cli_state *cli, uint16_t num_echos, DATA_BLOB data);
+bool cli_ucs2(struct cli_state *cli);
+bool is_andx_req(uint8_t cmd);
+NTSTATUS cli_smb(TALLOC_CTX *mem_ctx, struct cli_state *cli,
+		 uint8_t smb_command, uint8_t additional_flags,
+		 uint8_t wct, uint16_t *vwv,
+		 uint32_t num_bytes, const uint8_t *bytes,
+		 struct tevent_req **result_parent,
+		 uint8_t min_wct, uint8_t *pwct, uint16_t **pvwv,
+		 uint32_t *pnum_bytes, uint8_t **pbytes);
+
+/* The following definitions come from libsmb/clierror.c  */
+
+const char *cli_errstr(struct cli_state *cli);
+NTSTATUS cli_nt_error(struct cli_state *cli);
+void cli_dos_error(struct cli_state *cli, uint8 *eclass, uint32 *ecode);
+int cli_errno(struct cli_state *cli);
+bool cli_is_error(struct cli_state *cli);
+bool cli_is_nt_error(struct cli_state *cli);
+bool cli_is_dos_error(struct cli_state *cli);
+NTSTATUS cli_get_nt_error(struct cli_state *cli);
+void cli_set_nt_error(struct cli_state *cli, NTSTATUS status);
+void cli_reset_error(struct cli_state *cli);
+bool cli_state_is_connected(struct cli_state *cli);
+
+/* The following definitions come from libsmb/clifile.c  */
+
+struct tevent_req *cli_setpathinfo_send(TALLOC_CTX *mem_ctx,
+					struct tevent_context *ev,
+					struct cli_state *cli,
+					uint16_t level,
+					const char *path,
+					uint8_t *data,
+					size_t data_len);
+NTSTATUS cli_setpathinfo_recv(struct tevent_req *req);
+NTSTATUS cli_setpathinfo(struct cli_state *cli,
+			 uint16_t level,
+			 const char *path,
+			 uint8_t *data,
+			 size_t data_len);
+
+struct tevent_req *cli_posix_symlink_send(TALLOC_CTX *mem_ctx,
+					struct event_context *ev,
+					struct cli_state *cli,
+					const char *oldname,
+					const char *newname);
+NTSTATUS cli_posix_symlink_recv(struct tevent_req *req);
+NTSTATUS cli_posix_symlink(struct cli_state *cli,
+			const char *oldname,
+			const char *newname);
+struct tevent_req *cli_posix_readlink_send(TALLOC_CTX *mem_ctx,
+					struct event_context *ev,
+					struct cli_state *cli,
+					const char *fname,
+					size_t len);
+NTSTATUS cli_posix_readlink_recv(struct tevent_req *req, struct cli_state *cli,
+				char *retpath, size_t len);
+NTSTATUS cli_posix_readlink(struct cli_state *cli, const char *fname,
+			char *linkpath, size_t len);
+struct tevent_req *cli_posix_hardlink_send(TALLOC_CTX *mem_ctx,
+					struct event_context *ev,
+					struct cli_state *cli,
+					const char *oldname,
+					const char *newname);
+NTSTATUS cli_posix_hardlink_recv(struct tevent_req *req);
+NTSTATUS cli_posix_hardlink(struct cli_state *cli,
+			const char *oldname,
+			const char *newname);
+uint32_t unix_perms_to_wire(mode_t perms);
+mode_t wire_perms_to_unix(uint32_t perms);
+struct tevent_req *cli_posix_getfacl_send(TALLOC_CTX *mem_ctx,
+					struct event_context *ev,
+					struct cli_state *cli,
+					const char *fname);
+NTSTATUS cli_posix_getfacl_recv(struct tevent_req *req,
+				TALLOC_CTX *mem_ctx,
+				size_t *prb_size,
+				char **retbuf);
+NTSTATUS cli_posix_getfacl(struct cli_state *cli,
+			const char *fname,
+			TALLOC_CTX *mem_ctx,
+			size_t *prb_size,
+			char **retbuf);
+struct tevent_req *cli_posix_stat_send(TALLOC_CTX *mem_ctx,
+					struct event_context *ev,
+					struct cli_state *cli,
+					const char *fname);
+NTSTATUS cli_posix_stat_recv(struct tevent_req *req,
+				SMB_STRUCT_STAT *sbuf);
+NTSTATUS cli_posix_stat(struct cli_state *cli,
+			const char *fname,
+			SMB_STRUCT_STAT *sbuf);
+struct tevent_req *cli_posix_chmod_send(TALLOC_CTX *mem_ctx,
+					struct event_context *ev,
+					struct cli_state *cli,
+					const char *fname,
+					mode_t mode);
+NTSTATUS cli_posix_chmod_recv(struct tevent_req *req);
+NTSTATUS cli_posix_chmod(struct cli_state *cli, const char *fname, mode_t mode);
+struct tevent_req *cli_posix_chown_send(TALLOC_CTX *mem_ctx,
+					struct event_context *ev,
+					struct cli_state *cli,
+					const char *fname,
+					uid_t uid,
+					gid_t gid);
+NTSTATUS cli_posix_chown_recv(struct tevent_req *req);
+NTSTATUS cli_posix_chown(struct cli_state *cli,
+			const char *fname,
+			uid_t uid,
+			gid_t gid);
+struct tevent_req *cli_rename_send(TALLOC_CTX *mem_ctx,
+                                struct event_context *ev,
+                                struct cli_state *cli,
+                                const char *fname_src,
+                                const char *fname_dst);
+NTSTATUS cli_rename_recv(struct tevent_req *req);
+NTSTATUS cli_rename(struct cli_state *cli, const char *fname_src, const char *fname_dst);
+struct tevent_req *cli_ntrename_send(TALLOC_CTX *mem_ctx,
+                                struct event_context *ev,
+                                struct cli_state *cli,
+                                const char *fname_src,
+                                const char *fname_dst);
+NTSTATUS cli_ntrename_recv(struct tevent_req *req);
+NTSTATUS cli_ntrename(struct cli_state *cli, const char *fname_src, const char *fname_dst);
+
+struct tevent_req *cli_nt_hardlink_send(TALLOC_CTX *mem_ctx,
+                                struct event_context *ev,
+                                struct cli_state *cli,
+                                const char *fname_src,
+                                const char *fname_dst);
+NTSTATUS cli_nt_hardlink_recv(struct tevent_req *req);
+NTSTATUS cli_nt_hardlink(struct cli_state *cli, const char *fname_src, const char *fname_dst);
+
+struct tevent_req *cli_unlink_send(TALLOC_CTX *mem_ctx,
+                                struct event_context *ev,
+                                struct cli_state *cli,
+                                const char *fname,
+                                uint16_t mayhave_attrs);
+NTSTATUS cli_unlink_recv(struct tevent_req *req);
+NTSTATUS cli_unlink(struct cli_state *cli, const char *fname, uint16_t mayhave_attrs);
+
+struct tevent_req *cli_mkdir_send(TALLOC_CTX *mem_ctx,
+				  struct event_context *ev,
+				  struct cli_state *cli,
+				  const char *dname);
+NTSTATUS cli_mkdir_recv(struct tevent_req *req);
+NTSTATUS cli_mkdir(struct cli_state *cli, const char *dname);
+struct tevent_req *cli_rmdir_send(TALLOC_CTX *mem_ctx,
+				  struct event_context *ev,
+				  struct cli_state *cli,
+				  const char *dname);
+NTSTATUS cli_rmdir_recv(struct tevent_req *req);
+NTSTATUS cli_rmdir(struct cli_state *cli, const char *dname);
+struct tevent_req *cli_nt_delete_on_close_send(TALLOC_CTX *mem_ctx,
+					struct event_context *ev,
+					struct cli_state *cli,
+					uint16_t fnum,
+					bool flag);
+NTSTATUS cli_nt_delete_on_close_recv(struct tevent_req *req);
+NTSTATUS cli_nt_delete_on_close(struct cli_state *cli, uint16_t fnum, bool flag);
+struct tevent_req *cli_ntcreate_send(TALLOC_CTX *mem_ctx,
+				     struct event_context *ev,
+				     struct cli_state *cli,
+				     const char *fname,
+				     uint32_t CreatFlags,
+				     uint32_t DesiredAccess,
+				     uint32_t FileAttributes,
+				     uint32_t ShareAccess,
+				     uint32_t CreateDisposition,
+				     uint32_t CreateOptions,
+				     uint8_t SecurityFlags);
+NTSTATUS cli_ntcreate_recv(struct tevent_req *req, uint16_t *pfnum);
+NTSTATUS cli_ntcreate(struct cli_state *cli,
+		      const char *fname,
+		      uint32_t CreatFlags,
+		      uint32_t DesiredAccess,
+		      uint32_t FileAttributes,
+		      uint32_t ShareAccess,
+		      uint32_t CreateDisposition,
+		      uint32_t CreateOptions,
+		      uint8_t SecurityFlags,
+		      uint16_t *pfid);
+uint8_t *smb_bytes_push_str(uint8_t *buf, bool ucs2, const char *str,
+			    size_t str_len, size_t *pconverted_size);
+uint8_t *smb_bytes_push_bytes(uint8_t *buf, uint8_t prefix,
+			      const uint8_t *bytes, size_t num_bytes);
+struct tevent_req *cli_open_create(TALLOC_CTX *mem_ctx,
+				   struct event_context *ev,
+				   struct cli_state *cli, const char *fname,
+				   int flags, int share_mode,
+				   struct tevent_req **psmbreq);
+struct tevent_req *cli_open_send(TALLOC_CTX *mem_ctx, struct event_context *ev,
+				 struct cli_state *cli, const char *fname,
+				 int flags, int share_mode);
+NTSTATUS cli_open_recv(struct tevent_req *req, uint16_t *fnum);
+NTSTATUS cli_open(struct cli_state *cli, const char *fname, int flags, int share_mode, uint16_t *pfnum);
+struct tevent_req *cli_close_create(TALLOC_CTX *mem_ctx,
+				    struct event_context *ev,
+				    struct cli_state *cli, uint16_t fnum,
+				    struct tevent_req **psubreq);
+struct tevent_req *cli_close_send(TALLOC_CTX *mem_ctx,
+				  struct event_context *ev,
+				  struct cli_state *cli, uint16_t fnum);
+NTSTATUS cli_close_recv(struct tevent_req *req);
+NTSTATUS cli_close(struct cli_state *cli, uint16_t fnum);
+struct tevent_req *cli_ftruncate_send(TALLOC_CTX *mem_ctx,
+					struct event_context *ev,
+					struct cli_state *cli,
+					uint16_t fnum,
+					uint64_t size);
+NTSTATUS cli_ftruncate_recv(struct tevent_req *req);
+NTSTATUS cli_ftruncate(struct cli_state *cli, uint16_t fnum, uint64_t size);
+NTSTATUS cli_locktype(struct cli_state *cli, uint16_t fnum,
+		      uint32_t offset, uint32_t len,
+		      int timeout, unsigned char locktype);
+bool cli_lock(struct cli_state *cli, uint16_t fnum,
+	      uint32_t offset, uint32_t len, int timeout, enum brl_type lock_type);
+struct tevent_req *cli_unlock_send(TALLOC_CTX *mem_ctx,
+                                struct event_context *ev,
+                                struct cli_state *cli,
+                                uint16_t fnum,
+                                uint64_t offset,
+                                uint64_t len);
+NTSTATUS cli_unlock_recv(struct tevent_req *req);
+NTSTATUS cli_unlock(struct cli_state *cli, uint16_t fnum, uint32_t offset, uint32_t len);
+bool cli_lock64(struct cli_state *cli, uint16_t fnum,
+		uint64_t offset, uint64_t len, int timeout, enum brl_type lock_type);
+struct tevent_req *cli_unlock64_send(TALLOC_CTX *mem_ctx,
+                                struct event_context *ev,
+                                struct cli_state *cli,
+                                uint16_t fnum,
+                                uint64_t offset,
+                                uint64_t len);
+NTSTATUS cli_unlock64_recv(struct tevent_req *req);
+NTSTATUS cli_unlock64(struct cli_state *cli, uint16_t fnum, uint64_t offset, uint64_t len);
+struct tevent_req *cli_posix_lock_send(TALLOC_CTX *mem_ctx,
+                                        struct event_context *ev,
+                                        struct cli_state *cli,
+                                        uint16_t fnum,
+                                        uint64_t offset,
+                                        uint64_t len,
+                                        bool wait_lock,
+                                        enum brl_type lock_type);
+NTSTATUS cli_posix_lock_recv(struct tevent_req *req);
+NTSTATUS cli_posix_lock(struct cli_state *cli, uint16_t fnum,
+			uint64_t offset, uint64_t len,
+			bool wait_lock, enum brl_type lock_type);
+struct tevent_req *cli_posix_unlock_send(TALLOC_CTX *mem_ctx,
+                                        struct event_context *ev,
+                                        struct cli_state *cli,
+                                        uint16_t fnum,
+                                        uint64_t offset,
+                                        uint64_t len);
+NTSTATUS cli_posix_unlock_recv(struct tevent_req *req);
+NTSTATUS cli_posix_unlock(struct cli_state *cli, uint16_t fnum, uint64_t offset, uint64_t len);
+struct tevent_req *cli_getattrE_send(TALLOC_CTX *mem_ctx,
+				struct event_context *ev,
+				struct cli_state *cli,
+                                uint16_t fnum);
+NTSTATUS cli_getattrE_recv(struct tevent_req *req,
+                        uint16_t *attr,
+                        SMB_OFF_T *size,
+                        time_t *change_time,
+                        time_t *access_time,
+                        time_t *write_time);
+NTSTATUS cli_getattrE(struct cli_state *cli,
+			uint16_t fnum,
+			uint16_t *attr,
+			SMB_OFF_T *size,
+			time_t *change_time,
+			time_t *access_time,
+			time_t *write_time);
+struct tevent_req *cli_setattrE_send(TALLOC_CTX *mem_ctx,
+				struct event_context *ev,
+				struct cli_state *cli,
+				uint16_t fnum,
+				time_t change_time,
+				time_t access_time,
+				time_t write_time);
+NTSTATUS cli_setattrE_recv(struct tevent_req *req);
+NTSTATUS cli_setattrE(struct cli_state *cli,
+			uint16_t fnum,
+			time_t change_time,
+			time_t access_time,
+			time_t write_time);
+struct tevent_req *cli_getatr_send(TALLOC_CTX *mem_ctx,
+				struct event_context *ev,
+				struct cli_state *cli,
+				const char *fname);
+NTSTATUS cli_getatr_recv(struct tevent_req *req,
+				uint16_t *attr,
+				SMB_OFF_T *size,
+				time_t *write_time);
+NTSTATUS cli_getatr(struct cli_state *cli,
+			const char *fname,
+			uint16_t *attr,
+			SMB_OFF_T *size,
+			time_t *write_time);
+struct tevent_req *cli_setatr_send(TALLOC_CTX *mem_ctx,
+				struct event_context *ev,
+				struct cli_state *cli,
+				const char *fname,
+				uint16_t attr,
+				time_t mtime);
+NTSTATUS cli_setatr_recv(struct tevent_req *req);
+NTSTATUS cli_setatr(struct cli_state *cli,
+                const char *fname,
+                uint16_t attr,
+                time_t mtime);
+struct tevent_req *cli_chkpath_send(TALLOC_CTX *mem_ctx,
+				  struct event_context *ev,
+				  struct cli_state *cli,
+				  const char *fname);
+NTSTATUS cli_chkpath_recv(struct tevent_req *req);
+NTSTATUS cli_chkpath(struct cli_state *cli, const char *path);
+struct tevent_req *cli_dskattr_send(TALLOC_CTX *mem_ctx,
+				  struct event_context *ev,
+				  struct cli_state *cli);
+NTSTATUS cli_dskattr_recv(struct tevent_req *req, int *bsize, int *total,
+			  int *avail);
+NTSTATUS cli_dskattr(struct cli_state *cli, int *bsize, int *total, int *avail);
+struct tevent_req *cli_ctemp_send(TALLOC_CTX *mem_ctx,
+				struct event_context *ev,
+				struct cli_state *cli,
+				const char *path);
+NTSTATUS cli_ctemp_recv(struct tevent_req *req,
+			TALLOC_CTX *ctx,
+			uint16_t *pfnum,
+			char **outfile);
+NTSTATUS cli_ctemp(struct cli_state *cli,
+			TALLOC_CTX *ctx,
+			const char *path,
+			uint16_t *pfnum,
+			char **out_path);
+NTSTATUS cli_raw_ioctl(struct cli_state *cli, uint16_t fnum, uint32_t code, DATA_BLOB *blob);
+NTSTATUS cli_set_ea_path(struct cli_state *cli, const char *path,
+			 const char *ea_name, const char *ea_val,
+			 size_t ea_len);
+NTSTATUS cli_set_ea_fnum(struct cli_state *cli, uint16_t fnum,
+			 const char *ea_name, const char *ea_val,
+			 size_t ea_len);
+struct tevent_req *cli_get_ea_list_path_send(TALLOC_CTX *mem_ctx,
+					     struct tevent_context *ev,
+					     struct cli_state *cli,
+					     const char *fname);
+NTSTATUS cli_get_ea_list_path_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx,
+				   size_t *pnum_eas, struct ea_struct **peas);
+NTSTATUS cli_get_ea_list_path(struct cli_state *cli, const char *path,
+		TALLOC_CTX *ctx,
+		size_t *pnum_eas,
+		struct ea_struct **pea_list);
+struct tevent_req *cli_posix_open_send(TALLOC_CTX *mem_ctx,
+					struct event_context *ev,
+					struct cli_state *cli,
+					const char *fname,
+					int flags,
+					mode_t mode);
+NTSTATUS cli_posix_open_recv(struct tevent_req *req, uint16_t *pfnum);
+NTSTATUS cli_posix_open(struct cli_state *cli, const char *fname,
+			int flags, mode_t mode, uint16_t *fnum);
+struct tevent_req *cli_posix_mkdir_send(TALLOC_CTX *mem_ctx,
+                                        struct event_context *ev,
+                                        struct cli_state *cli,
+                                        const char *fname,
+                                        mode_t mode);
+NTSTATUS cli_posix_mkdir_recv(struct tevent_req *req);
+NTSTATUS cli_posix_mkdir(struct cli_state *cli, const char *fname, mode_t mode);
+
+struct tevent_req *cli_posix_unlink_send(TALLOC_CTX *mem_ctx,
+					struct event_context *ev,
+					struct cli_state *cli,
+					const char *fname);
+NTSTATUS cli_posix_unlink_recv(struct tevent_req *req);
+NTSTATUS cli_posix_unlink(struct cli_state *cli, const char *fname);
+
+struct tevent_req *cli_posix_rmdir_send(TALLOC_CTX *mem_ctx,
+					struct event_context *ev,
+					struct cli_state *cli,
+					const char *fname);
+NTSTATUS cli_posix_rmdir_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx);
+NTSTATUS cli_posix_rmdir(struct cli_state *cli, const char *fname);
+struct tevent_req *cli_notify_send(TALLOC_CTX *mem_ctx,
+				   struct tevent_context *ev,
+				   struct cli_state *cli, uint16_t fnum,
+				   uint32_t buffer_size,
+				   uint32_t completion_filter, bool recursive);
+NTSTATUS cli_notify_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx,
+			 uint32_t *pnum_changes,
+			 struct notify_change **pchanges);
+
+/* The following definitions come from libsmb/clifsinfo.c  */
+
+struct tevent_req *cli_unix_extensions_version_send(TALLOC_CTX *mem_ctx,
+						    struct tevent_context *ev,
+						    struct cli_state *cli);
+NTSTATUS cli_unix_extensions_version_recv(struct tevent_req *req,
+					  uint16_t *pmajor, uint16_t *pminor,
+					  uint32_t *pcaplow,
+					  uint32_t *pcaphigh);
+NTSTATUS cli_unix_extensions_version(struct cli_state *cli, uint16 *pmajor,
+				     uint16 *pminor, uint32 *pcaplow,
+				     uint32 *pcaphigh);
+struct tevent_req *cli_set_unix_extensions_capabilities_send(
+	TALLOC_CTX *mem_ctx, struct tevent_context *ev, struct cli_state *cli,
+	uint16_t major, uint16_t minor, uint32_t caplow, uint32_t caphigh);
+NTSTATUS cli_set_unix_extensions_capabilities_recv(struct tevent_req *req);
+NTSTATUS cli_set_unix_extensions_capabilities(struct cli_state *cli,
+					      uint16 major, uint16 minor,
+					      uint32 caplow, uint32 caphigh);
+struct tevent_req *cli_get_fs_attr_info_send(TALLOC_CTX *mem_ctx,
+					     struct tevent_context *ev,
+					     struct cli_state *cli);
+NTSTATUS cli_get_fs_attr_info_recv(struct tevent_req *req, uint32_t *fs_attr);
+NTSTATUS cli_get_fs_attr_info(struct cli_state *cli, uint32_t *fs_attr);
+NTSTATUS cli_get_fs_volume_info(struct cli_state *cli, fstring volume_name,
+				uint32 *pserial_number, time_t *pdate);
+NTSTATUS cli_get_fs_full_size_info(struct cli_state *cli,
+				   uint64_t *total_allocation_units,
+				   uint64_t *caller_allocation_units,
+				   uint64_t *actual_allocation_units,
+				   uint64_t *sectors_per_allocation_unit,
+				   uint64_t *bytes_per_sector);
+NTSTATUS cli_get_posix_fs_info(struct cli_state *cli,
+			       uint32 *optimal_transfer_size,
+			       uint32 *block_size,
+			       uint64_t *total_blocks,
+			       uint64_t *blocks_available,
+			       uint64_t *user_blocks_available,
+			       uint64_t *total_file_nodes,
+			       uint64_t *free_file_nodes,
+			       uint64_t *fs_identifier);
+NTSTATUS cli_raw_ntlm_smb_encryption_start(struct cli_state *cli,
+				const char *user,
+				const char *pass,
+				const char *domain);
+NTSTATUS cli_gss_smb_encryption_start(struct cli_state *cli);
+NTSTATUS cli_force_encryption(struct cli_state *c,
+			const char *username,
+			const char *password,
+			const char *domain);
+
+/* The following definitions come from libsmb/clilist.c  */
+
+NTSTATUS cli_list_old(struct cli_state *cli,const char *Mask,uint16 attribute,
+		      NTSTATUS (*fn)(const char *, struct file_info *,
+				 const char *, void *), void *state);
+NTSTATUS cli_list_trans(struct cli_state *cli, const char *mask,
+			uint16_t attribute, int info_level,
+			NTSTATUS (*fn)(const char *mnt, struct file_info *finfo,
+				   const char *mask, void *private_data),
+			void *private_data);
+struct tevent_req *cli_list_send(TALLOC_CTX *mem_ctx,
+				 struct tevent_context *ev,
+				 struct cli_state *cli,
+				 const char *mask,
+				 uint16_t attribute,
+				 uint16_t info_level);
+NTSTATUS cli_list_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx,
+		       struct file_info **finfo, size_t *num_finfo);
+NTSTATUS cli_list(struct cli_state *cli,const char *Mask,uint16 attribute,
+		  NTSTATUS (*fn)(const char *, struct file_info *, const char *,
+			     void *), void *state);
+
+/* The following definitions come from libsmb/climessage.c  */
+
+struct tevent_req *cli_message_send(TALLOC_CTX *mem_ctx,
+				    struct tevent_context *ev,
+				    struct cli_state *cli,
+				    const char *host, const char *username,
+				    const char *message);
+NTSTATUS cli_message_recv(struct tevent_req *req);
+NTSTATUS cli_message(struct cli_state *cli, const char *host,
+		     const char *username, const char *message);
+
+/* The following definitions come from libsmb/clioplock.c  */
+
+struct tevent_req *cli_oplock_ack_send(TALLOC_CTX *mem_ctx,
+				       struct tevent_context *ev,
+				       struct cli_state *cli,
+				       uint16_t fnum, uint8_t level);
+NTSTATUS cli_oplock_ack_recv(struct tevent_req *req);
+NTSTATUS cli_oplock_ack(struct cli_state *cli, uint16_t fnum, unsigned char level);
+void cli_oplock_handler(struct cli_state *cli,
+			NTSTATUS (*handler)(struct cli_state *, uint16_t, unsigned char));
+
+/* The following definitions come from libsmb/cliprint.c  */
+
+int cli_print_queue(struct cli_state *cli,
+		    void (*fn)(struct print_job_info *));
+int cli_printjob_del(struct cli_state *cli, int job);
+
+/* The following definitions come from libsmb/cliquota.c  */
+
+NTSTATUS cli_get_quota_handle(struct cli_state *cli, uint16_t *quota_fnum);
+void free_ntquota_list(SMB_NTQUOTA_LIST **qt_list);
+NTSTATUS cli_get_user_quota(struct cli_state *cli, int quota_fnum,
+			    SMB_NTQUOTA_STRUCT *pqt);
+NTSTATUS cli_set_user_quota(struct cli_state *cli, int quota_fnum,
+			    SMB_NTQUOTA_STRUCT *pqt);
+NTSTATUS cli_list_user_quota(struct cli_state *cli, int quota_fnum,
+			     SMB_NTQUOTA_LIST **pqt_list);
+NTSTATUS cli_get_fs_quota_info(struct cli_state *cli, int quota_fnum,
+			       SMB_NTQUOTA_STRUCT *pqt);
+NTSTATUS cli_set_fs_quota_info(struct cli_state *cli, int quota_fnum,
+			       SMB_NTQUOTA_STRUCT *pqt);
+
+/* The following definitions come from libsmb/clireadwrite.c  */
+
+struct tevent_req *cli_read_andx_create(TALLOC_CTX *mem_ctx,
+					struct event_context *ev,
+					struct cli_state *cli, uint16_t fnum,
+					off_t offset, size_t size,
+					struct tevent_req **psmbreq);
+struct tevent_req *cli_read_andx_send(TALLOC_CTX *mem_ctx,
+				      struct event_context *ev,
+				      struct cli_state *cli, uint16_t fnum,
+				      off_t offset, size_t size);
+NTSTATUS cli_read_andx_recv(struct tevent_req *req, ssize_t *received,
+			    uint8_t **rcvbuf);
+struct tevent_req *cli_pull_send(TALLOC_CTX *mem_ctx,
+				 struct event_context *ev,
+				 struct cli_state *cli,
+				 uint16_t fnum, off_t start_offset,
+				 SMB_OFF_T size, size_t window_size,
+				 NTSTATUS (*sink)(char *buf, size_t n,
+						  void *priv),
+				 void *priv);
+NTSTATUS cli_pull_recv(struct tevent_req *req, SMB_OFF_T *received);
+NTSTATUS cli_pull(struct cli_state *cli, uint16_t fnum,
+		  off_t start_offset, SMB_OFF_T size, size_t window_size,
+		  NTSTATUS (*sink)(char *buf, size_t n, void *priv),
+		  void *priv, SMB_OFF_T *received);
+ssize_t cli_read(struct cli_state *cli, uint16_t fnum, char *buf,
+		 off_t offset, size_t size);
+NTSTATUS cli_smbwrite(struct cli_state *cli, uint16_t fnum, char *buf,
+		      off_t offset, size_t size1, size_t *ptotal);
+struct tevent_req *cli_write_andx_create(TALLOC_CTX *mem_ctx,
+					 struct event_context *ev,
+					 struct cli_state *cli, uint16_t fnum,
+					 uint16_t mode, const uint8_t *buf,
+					 off_t offset, size_t size,
+					 struct tevent_req **reqs_before,
+					 int num_reqs_before,
+					 struct tevent_req **psmbreq);
+struct tevent_req *cli_write_andx_send(TALLOC_CTX *mem_ctx,
+				       struct event_context *ev,
+				       struct cli_state *cli, uint16_t fnum,
+				       uint16_t mode, const uint8_t *buf,
+				       off_t offset, size_t size);
+NTSTATUS cli_write_andx_recv(struct tevent_req *req, size_t *pwritten);
+
+NTSTATUS cli_writeall(struct cli_state *cli, uint16_t fnum, uint16_t mode,
+		      const uint8_t *buf, off_t offset, size_t size,
+		      size_t *pwritten);
+
+struct tevent_req *cli_push_send(TALLOC_CTX *mem_ctx, struct event_context *ev,
+				 struct cli_state *cli,
+				 uint16_t fnum, uint16_t mode,
+				 off_t start_offset, size_t window_size,
+				 size_t (*source)(uint8_t *buf, size_t n,
+						  void *priv),
+				 void *priv);
+NTSTATUS cli_push_recv(struct tevent_req *req);
+NTSTATUS cli_push(struct cli_state *cli, uint16_t fnum, uint16_t mode,
+		  off_t start_offset, size_t window_size,
+		  size_t (*source)(uint8_t *buf, size_t n, void *priv),
+		  void *priv);
+
+/* The following definitions come from libsmb/clisecdesc.c  */
+
+struct security_descriptor *cli_query_secdesc(struct cli_state *cli, uint16_t fnum,
+			    TALLOC_CTX *mem_ctx);
+NTSTATUS cli_set_secdesc(struct cli_state *cli, uint16_t fnum,
+			 struct security_descriptor *sd);
+
+/* The following definitions come from libsmb/clistr.c  */
+
+size_t clistr_push_fn(const char *function,
+			unsigned int line,
+			struct cli_state *cli,
+			void *dest,
+			const char *src,
+			int dest_len,
+			int flags);
+size_t clistr_pull_fn(const char *function,
+			unsigned int line,
+			const char *inbuf,
+			char *dest,
+			const void *src,
+			int dest_len,
+			int src_len,
+			int flags);
+size_t clistr_pull_talloc_fn(const char *function,
+				unsigned int line,
+				TALLOC_CTX *ctx,
+				const char *base,
+				uint16_t flags2,
+				char **pp_dest,
+				const void *src,
+				int src_len,
+				int flags);
+size_t clistr_align_out(struct cli_state *cli, const void *p, int flags);
+
+/* The following definitions come from libsmb/clitrans.c  */
+
+struct tevent_req *cli_trans_send(
+	TALLOC_CTX *mem_ctx, struct event_context *ev,
+	struct cli_state *cli, uint8_t cmd,
+	const char *pipe_name, uint16_t fid, uint16_t function, int flags,
+	uint16_t *setup, uint8_t num_setup, uint8_t max_setup,
+	uint8_t *param, uint32_t num_param, uint32_t max_param,
+	uint8_t *data, uint32_t num_data, uint32_t max_data);
+NTSTATUS cli_trans_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx,
+			uint16_t *recv_flags2,
+			uint16_t **setup, uint8_t min_setup,
+			uint8_t *num_setup,
+			uint8_t **param, uint32_t min_param,
+			uint32_t *num_param,
+			uint8_t **data, uint32_t min_data,
+			uint32_t *num_data);
+NTSTATUS cli_trans(TALLOC_CTX *mem_ctx, struct cli_state *cli,
+		   uint8_t trans_cmd,
+		   const char *pipe_name, uint16_t fid, uint16_t function,
+		   int flags,
+		   uint16_t *setup, uint8_t num_setup, uint8_t max_setup,
+		   uint8_t *param, uint32_t num_param, uint32_t max_param,
+		   uint8_t *data, uint32_t num_data, uint32_t max_data,
+		   uint16_t *recv_flags2,
+		   uint16_t **rsetup, uint8_t min_rsetup, uint8_t *num_rsetup,
+		   uint8_t **rparam, uint32_t min_rparam, uint32_t *num_rparam,
+		   uint8_t **rdata, uint32_t min_rdata, uint32_t *num_rdata);
+
+/* The following definitions come from libsmb/smb_seal.c  */
+
+NTSTATUS get_enc_ctx_num(const uint8_t *buf, uint16 *p_enc_ctx_num);
+bool common_encryption_on(struct smb_trans_enc_state *es);
+NTSTATUS common_ntlm_decrypt_buffer(struct ntlmssp_state *ntlmssp_state, char *buf);
+NTSTATUS common_ntlm_encrypt_buffer(struct ntlmssp_state *ntlmssp_state,
+				uint16 enc_ctx_num,
+				char *buf,
+				char **ppbuf_out);
+NTSTATUS common_encrypt_buffer(struct smb_trans_enc_state *es, char *buffer, char **buf_out);
+NTSTATUS common_decrypt_buffer(struct smb_trans_enc_state *es, char *buf);
+void common_free_encryption_state(struct smb_trans_enc_state **pp_es);
+void common_free_enc_buffer(struct smb_trans_enc_state *es, char *buf);
+bool cli_encryption_on(struct cli_state *cli);
+void cli_free_encryption_context(struct cli_state *cli);
+void cli_free_enc_buffer(struct cli_state *cli, char *buf);
+NTSTATUS cli_decrypt_message(struct cli_state *cli);
+NTSTATUS cli_encrypt_message(struct cli_state *cli, char *buf, char **buf_out);
+
+/* The following definitions come from libsmb/clisigning.c  */
+
+bool cli_simple_set_signing(struct cli_state *cli,
+			    const DATA_BLOB user_session_key,
+			    const DATA_BLOB response);
+bool cli_temp_set_signing(struct cli_state *cli);
+void cli_calculate_sign_mac(struct cli_state *cli, char *buf, uint32_t *seqnum);
+bool cli_check_sign_mac(struct cli_state *cli, const char *buf, uint32_t seqnum);
+bool client_is_signing_on(struct cli_state *cli);
+bool client_is_signing_allowed(struct cli_state *cli);
+bool client_is_signing_mandatory(struct cli_state *cli);
+void cli_set_signing_negotiated(struct cli_state *cli);
+
+#endif /* _LIBSMB_PROTO_H_ */

Modified: branches/samba/experimental/source3/libsmb/samlogon_cache.c
===================================================================
--- branches/samba/experimental/source3/libsmb/samlogon_cache.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/libsmb/samlogon_cache.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -25,6 +25,7 @@
 #include "system/filesys.h"
 #include "librpc/gen_ndr/ndr_krb5pac.h"
 #include "../libcli/security/security.h"
+#include "util_tdb.h"
 
 #define NETSAMLOGON_TDB	"netsamlogon_cache.tdb"
 

Modified: branches/samba/experimental/source3/libsmb/smb_seal.c
===================================================================
--- branches/samba/experimental/source3/libsmb/smb_seal.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/libsmb/smb_seal.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -20,6 +20,7 @@
 #include "includes.h"
 #include "../libcli/auth/ntlmssp.h"
 #include "smb_crypt.h"
+#include "libsmb/libsmb.h"
 
 /******************************************************************************
  Pull out the encryption context for this packet. 0 means global context.

Modified: branches/samba/experimental/source3/libsmb/smb_share_modes.c
===================================================================
--- branches/samba/experimental/source3/libsmb/smb_share_modes.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/libsmb/smb_share_modes.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -27,6 +27,7 @@
 #include "includes.h"
 #include "system/filesys.h"
 #include "smb_share_modes.h"
+#include <tdb.h>
 
 /* Database context handle. */
 struct smbdb_ctx {

Modified: branches/samba/experimental/source3/libsmb/smbsock_connect.c
===================================================================
--- branches/samba/experimental/source3/libsmb/smbsock_connect.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/libsmb/smbsock_connect.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -18,7 +18,8 @@
 */
 
 #include "includes.h"
-#include "../lib/async_req/async_sock.h"
+#include "../lib/util/tevent_ntstatus.h"
+#include "client.h"
 #include "async_smb.h"
 #include "libsmb/nmblib.h"
 
@@ -270,6 +271,7 @@
 {
 	if (state->sock != -1) {
 		close(state->sock);
+		state->sock = -1;
 	}
 	return 0;
 }

Modified: branches/samba/experimental/source3/libsmb/trusts_util.c
===================================================================
--- branches/samba/experimental/source3/libsmb/trusts_util.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/libsmb/trusts_util.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -27,6 +27,7 @@
 #include "../librpc/gen_ndr/ndr_netlogon.h"
 #include "secrets.h"
 #include "passdb.h"
+#include "libsmb/libsmb.h"
 
 /*********************************************************
  Change the domain password on the PDC.

Modified: branches/samba/experimental/source3/libsmb/unexpected.c
===================================================================
--- branches/samba/experimental/source3/libsmb/unexpected.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/libsmb/unexpected.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -19,6 +19,7 @@
 */
 
 #include "includes.h"
+#include "../lib/util/tevent_ntstatus.h"
 #include "lib/async_req/async_sock.h"
 #include "libsmb/nmblib.h"
 

Modified: branches/samba/experimental/source3/locale/net/de.po
===================================================================
--- branches/samba/experimental/source3/locale/net/de.po	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/locale/net/de.po	2011-05-19 17:46:26 UTC (rev 3779)
@@ -924,7 +924,7 @@
 #: ../../utils/net_ads.c:1070
 #, c-format
 msgid "Join is OK\n"
-msgstr "Beitritt ist OK\n"
+msgstr "Mitgliedschaft ist OK\n"
 
 #: ../../utils/net_ads.c:1081
 msgid "Host is not configured as a member server.\n"

Deleted: branches/samba/experimental/source3/localedir.c
===================================================================
--- branches/samba/experimental/source3/localedir.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/localedir.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -1,3 +0,0 @@
-#include "localedir.h"
-
-const char *dyn_LOCALEDIR = LOCALEDIR;

Modified: branches/samba/experimental/source3/locking/locking.c
===================================================================
--- branches/samba/experimental/source3/locking/locking.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/locking/locking.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -43,6 +43,7 @@
 #include "../libcli/security/security.h"
 #include "serverid.h"
 #include "messages.h"
+#include "util_tdb.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_LOCKING
@@ -1424,7 +1425,7 @@
 	 * Only allow delete on close for writable files.
 	 */
 
-	if ((dosmode & aRONLY) &&
+	if ((dosmode & FILE_ATTRIBUTE_READONLY) &&
 	    !lp_delete_readonly(SNUM(fsp->conn))) {
 		DEBUG(10,("can_set_delete_on_close: file %s delete on close "
 			  "flag set but file attribute is readonly.\n",

Modified: branches/samba/experimental/source3/locking/posix.c
===================================================================
--- branches/samba/experimental/source3/locking/posix.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/locking/posix.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -25,6 +25,7 @@
 #include "system/filesys.h"
 #include "locking/proto.h"
 #include "dbwrap.h"
+#include "util_tdb.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_LOCKING

Modified: branches/samba/experimental/source3/m4/aclocal.m4
===================================================================
--- branches/samba/experimental/source3/m4/aclocal.m4	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/m4/aclocal.m4	2011-05-19 17:46:26 UTC (rev 3779)
@@ -54,7 +54,7 @@
 ])
 
 
-dnl SMB_LIBRARY(name, version, default, reason)
+dnl SMB_LIBRARY(name, soversion, fullversion, default, reason)
 dnl
 dnl configure build and use of an (internal) shared library
 dnl
@@ -74,6 +74,7 @@
 [UNINSTALL_]LIBUC=
 
 m4_if([$2], [], [LIBUC[_SOVER]=0], [LIBUC[_SOVER]=$2])
+m4_if([$3], [], [LIBUC[_FULLVER]=$LIBUC[_SOVER]], [LIBUC[_FULLVER]=$3])
 
 AC_SUBST(LIBUC[_SHARED_TARGET])
 AC_SUBST(LIBUC[_STATIC_TARGET])
@@ -84,15 +85,16 @@
 AC_SUBST([INSTALL_]LIBUC)
 AC_SUBST([UNINSTALL_]LIBUC)
 AC_SUBST(LIBUC[_SOVER])
+AC_SUBST(LIBUC[_FULLVER])
 
 AC_MSG_CHECKING([whether to build the LIBNAME shared library])
-m4_if([$3], [no], [
+m4_if([$4], [no], [
 dnl set the default to not build the shared lib
 AC_ARG_WITH(LIBNAME,
 AS_HELP_STRING([--with-]LIBNAME,
-	m4_if([$4], [],
+	m4_if([$5], [],
 		[Build the LIBNAME shared library (default=no)],
-		[Build the LIBNAME shared library (default=no ($4))])),
+		[Build the LIBNAME shared library (default=no ($5))])),
 [
 case "$withval" in
 	yes)

Modified: branches/samba/experimental/source3/modules/gpfs.c
===================================================================
--- branches/samba/experimental/source3/modules/gpfs.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/modules/gpfs.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -40,6 +40,7 @@
 static int (*gpfs_get_winattrs_path_fn)(char *pathname, struct gpfs_winattr *attrs);
 static int (*gpfs_get_winattrs_fn)(int fd, struct gpfs_winattr *attrs);
 static int (*gpfs_ftruncate_fn)(int fd, gpfs_off64_t length);
+static int (*gpfs_lib_init_fn)(int flags);
 
 bool set_gpfs_sharemode(files_struct *fsp, uint32 access_mask,
 			uint32 share_access)
@@ -189,6 +190,17 @@
         return gpfs_set_winattrs_path_fn(pathname,flags, attrs);
 }
 
+void smbd_gpfs_lib_init()
+{
+	if (gpfs_lib_init_fn) {
+		int rc = gpfs_lib_init_fn(0);
+		DEBUG(10, ("gpfs_lib_init() finished with rc %d "
+			   "and errno %d\n", rc, errno));
+	} else {
+		DEBUG(10, ("libgpfs lacks gpfs_lib_init\n"));
+	}
+}
+
 static bool init_gpfs_function_lib(void *plibhandle_pointer,
 				   const char *libname,
 				   void *pfn_pointer, const char *fn_name)
@@ -251,6 +263,7 @@
         init_gpfs_function(&gpfs_set_winattrs_path_fn,"gpfs_set_winattrs_path");
         init_gpfs_function(&gpfs_get_winattrs_fn,"gpfs_get_winattrs");
 	init_gpfs_function(&gpfs_ftruncate_fn, "gpfs_ftruncate");
+        init_gpfs_function(&gpfs_lib_init_fn,"gpfs_lib_init");
 
 	gpfs_getrealfilename = lp_parm_bool(-1, "gpfs", "getrealfilename",
 					    True);
@@ -311,6 +324,11 @@
         return -1;
 }
 
+void smbd_gpfs_lib_init()
+{
+	return;
+}
+
 void init_gpfs(void)
 {
 	return;

Modified: branches/samba/experimental/source3/modules/nfs4_acls.c
===================================================================
--- branches/samba/experimental/source3/modules/nfs4_acls.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/modules/nfs4_acls.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -26,6 +26,7 @@
 #include "include/dbwrap.h"
 #include "system/filesys.h"
 #include "passdb/lookup_sid.h"
+#include "util_tdb.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_ACLS

Modified: branches/samba/experimental/source3/modules/onefs_acl.c
===================================================================
--- branches/samba/experimental/source3/modules/onefs_acl.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/modules/onefs_acl.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -554,7 +554,7 @@
 
 		/* Use existing samba logic to derive the mode bits. */
 		file_mode = unix_mode(fsp->conn, 0, fsp->fsp_name, NULL);
-		dir_mode = unix_mode(fsp->conn, aDIR, fsp->fsp_name, NULL);
+		dir_mode = unix_mode(fsp->conn, FILE_ATTRIBUTE_DIRECTORY, fsp->fsp_name, NULL);
 
 		/* Initialize ACEs. */
 		new_aces[0] = onefs_init_ace(fsp->conn, file_mode, false, USR);

Modified: branches/samba/experimental/source3/modules/onefs_open.c
===================================================================
--- branches/samba/experimental/source3/modules/onefs_open.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/modules/onefs_open.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -498,9 +498,9 @@
 		unx_mode = (mode_t)(new_dos_attributes & ~FILE_FLAG_POSIX_SEMANTICS);
 		new_dos_attributes = 0;
 	} else {
-		/* We add aARCH to this as this mode is only used if the file is
+		/* We add FILE_ATTRIBUTE_ARCHIVE to this as this mode is only used if the file is
 		 * created new. */
-		unx_mode = unix_mode(conn, new_dos_attributes | aARCH,
+		unx_mode = unix_mode(conn, new_dos_attributes | FILE_ATTRIBUTE_ARCHIVE,
 				     smb_fname, parent_dir);
 	}
 
@@ -587,7 +587,7 @@
 
 	/* Setup dos_attributes to be set by ifs_createfile */
 	if (lp_store_dos_attributes(SNUM(conn))) {
-		createfile_attributes = (new_dos_attributes | aARCH) &
+		createfile_attributes = (new_dos_attributes | FILE_ATTRIBUTE_ARCHIVE) &
 		    ~(FILE_ATTRIBUTE_NONINDEXED | FILE_ATTRIBUTE_COMPRESSED);
 	}
 
@@ -1310,7 +1310,8 @@
 		new_file_created = True;
 	}
 
-	set_share_mode(lck, fsp, get_current_uid(conn), 0,
+	set_share_mode(lck, fsp, get_current_uid(conn),
+			req ? req->mid : 0,
 		       fsp->oplock_type);
 
 	/* Handle strange delete on close create semantics. */
@@ -1482,7 +1483,7 @@
 		mode = (mode_t)(file_attributes & ~FILE_FLAG_POSIX_SEMANTICS);
 		file_attributes = 0;
 	} else {
-		mode = unix_mode(conn, aDIR, smb_dname, parent_dir);
+		mode = unix_mode(conn, FILE_ATTRIBUTE_DIRECTORY, smb_dname, parent_dir);
 	}
 
 	/*
@@ -1666,7 +1667,8 @@
 		return NT_STATUS_DELETE_PENDING;
 	}
 
-	set_share_mode(lck, fsp, get_current_uid(conn), 0, NO_OPLOCK);
+	set_share_mode(lck, fsp, get_current_uid(conn),
+		req ? req->mid : 0, NO_OPLOCK);
 
 	/*
 	 * For directories the delete on close bit at open time seems

Modified: branches/samba/experimental/source3/modules/vfs_acl_tdb.c
===================================================================
--- branches/samba/experimental/source3/modules/vfs_acl_tdb.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/modules/vfs_acl_tdb.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -28,6 +28,7 @@
 #include "../lib/crypto/crypto.h"
 #include "dbwrap.h"
 #include "auth.h"
+#include "util_tdb.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_VFS

Modified: branches/samba/experimental/source3/modules/vfs_default.c
===================================================================
--- branches/samba/experimental/source3/modules/vfs_default.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/modules/vfs_default.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -1512,12 +1512,12 @@
 	return sys_listxattr(path, list, size);
 }
 
-ssize_t vfswrap_llistxattr(struct vfs_handle_struct *handle, const char *path, char *list, size_t size)
+static ssize_t vfswrap_llistxattr(struct vfs_handle_struct *handle, const char *path, char *list, size_t size)
 {
 	return sys_llistxattr(path, list, size);
 }
 
-ssize_t vfswrap_flistxattr(struct vfs_handle_struct *handle, struct files_struct *fsp, char *list, size_t size)
+static ssize_t vfswrap_flistxattr(struct vfs_handle_struct *handle, struct files_struct *fsp, char *list, size_t size)
 {
 	return sys_flistxattr(fsp->fh->fd, list, size);
 }

Modified: branches/samba/experimental/source3/modules/vfs_gpfs.c
===================================================================
--- branches/samba/experimental/source3/modules/vfs_gpfs.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/modules/vfs_gpfs.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -32,6 +32,7 @@
 #include <gpfs_gpl.h>
 #include "nfs4_acls.h"
 #include "vfs_gpfs.h"
+#include "system/filesys.h"
 
 struct gpfs_config_data {
 	bool sharemodes;
@@ -1088,6 +1089,7 @@
 	if (ret == 0) {
 		smb_fname->st.st_ex_btime.tv_sec = attrs.creationTime.tv_sec;
 		smb_fname->st.st_ex_btime.tv_nsec = attrs.creationTime.tv_nsec;
+		smb_fname->st.vfs_private = attrs.winAttrs;
 	}
 	return 0;
 }
@@ -1135,6 +1137,7 @@
 	if (ret == 0) {
 		smb_fname->st.st_ex_btime.tv_sec = attrs.creationTime.tv_sec;
 		smb_fname->st.st_ex_btime.tv_nsec = attrs.creationTime.tv_nsec;
+		smb_fname->st.vfs_private = attrs.winAttrs;
 	}
 	return 0;
 }
@@ -1199,18 +1202,23 @@
 	struct gpfs_winattr attrs;
 	char *path = NULL;
 	NTSTATUS status;
-	int ret;
 
 	status = get_full_smb_filename(talloc_tos(), fname, &path);
 	if (!NT_STATUS_IS_OK(status)) {
 		errno = map_errno_from_nt_status(status);
 		return -1;
 	}
-	ret = get_gpfs_winattrs(path, &attrs);
 
-	if (ret == -1) {
-		TALLOC_FREE(path);
-		return false;
+	if (VALID_STAT(*sbuf)) {
+		attrs.winAttrs = sbuf->vfs_private;
+	} else {
+		int ret;
+		ret = get_gpfs_winattrs(path, &attrs);
+
+		if (ret == -1) {
+			TALLOC_FREE(path);
+			return false;
+		}
 	}
 	if ((attrs.winAttrs & GPFS_WINATTR_OFFLINE) != 0) {
 		DEBUG(10, ("%s is offline\n", path));
@@ -1228,10 +1236,24 @@
 	return vfs_gpfs_is_offline(handle, fsp->fsp_name, &fsp->fsp_name->st);
 }
 
+static ssize_t vfs_gpfs_sendfile(vfs_handle_struct *handle, int tofd,
+				 files_struct *fsp, const DATA_BLOB *hdr,
+				 SMB_OFF_T offset, size_t n)
+{
+	if ((fsp->fsp_name->st.vfs_private & GPFS_WINATTR_OFFLINE) != 0) {
+		errno = ENOSYS;
+		return -1;
+	}
+	return SMB_VFS_NEXT_SENDFILE(handle, tofd, fsp, hdr, offset, n);
+}
+
 int vfs_gpfs_connect(struct vfs_handle_struct *handle, const char *service,
 			const char *user)
 {
 	struct gpfs_config_data *config;
+
+	smbd_gpfs_lib_init();
+
 	int ret = SMB_VFS_NEXT_CONNECT(handle, service, user);
 
 	if (ret < 0) {
@@ -1278,7 +1300,18 @@
 	return next;
 }
 
+static int vfs_gpfs_open(struct vfs_handle_struct *handle,
+			 struct smb_filename *smb_fname, files_struct *fsp,
+			 int flags, mode_t mode)
+{
+	if (lp_parm_bool(fsp->conn->params->service, "gpfs", "syncio",
+			 false)) {
+		flags |= O_SYNC;
+	}
+	return SMB_VFS_NEXT_OPEN(handle, smb_fname, fsp, flags, mode);
+}
 
+
 static struct vfs_fn_pointers vfs_gpfs_fns = {
 	.connect_fn = vfs_gpfs_connect,
 	.fs_capabilities = vfs_gpfs_capabilities,
@@ -1304,6 +1337,8 @@
 	.ntimes = vfs_gpfs_ntimes,
 	.is_offline = vfs_gpfs_is_offline,
 	.aio_force = vfs_gpfs_aio_force,
+	.sendfile = vfs_gpfs_sendfile,
+	.open_fn = vfs_gpfs_open,
 	.ftruncate = vfs_gpfs_ftruncate
 };
 

Modified: branches/samba/experimental/source3/modules/vfs_gpfs.h
===================================================================
--- branches/samba/experimental/source3/modules/vfs_gpfs.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/modules/vfs_gpfs.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -36,3 +36,4 @@
 int set_gpfs_winattrs(char * pathname,int flags,struct gpfs_winattr *attrs);
 int smbd_gpfs_ftruncate(int fd, gpfs_off64_t length);
 void init_gpfs(void);
+void smbd_gpfs_lib_init();

Copied: branches/samba/experimental/source3/modules/vfs_gpfs_hsm_notify.c (from rev 3778, tags/samba/upstream_3.6.0~rc1/source3/modules/vfs_gpfs_hsm_notify.c)
===================================================================
--- branches/samba/experimental/source3/modules/vfs_gpfs_hsm_notify.c	                        (rev 0)
+++ branches/samba/experimental/source3/modules/vfs_gpfs_hsm_notify.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -0,0 +1,110 @@
+/*
+   Unix SMB/CIFS implementation.
+   Make sure offline->online changes are propagated by notifies
+
+   This module must come before aio_fork in the chain, because
+   aio_fork (correcly!) does not propagate the aio calls further
+
+   Copyright (C) Volker Lendecke 2011
+
+   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/>.
+*/
+
+#include "includes.h"
+#include "smbd/smbd.h"
+#include "librpc/gen_ndr/ndr_xattr.h"
+#include "include/smbprofile.h"
+
+#undef DBGC_CLASS
+#define DBGC_CLASS DBGC_VFS
+
+#include <gpfs_gpl.h>
+#include "nfs4_acls.h"
+#include "vfs_gpfs.h"
+
+static ssize_t vfs_gpfs_hsm_notify_pread(vfs_handle_struct *handle, files_struct *fsp,
+			      void *data, size_t n, SMB_OFF_T offset)
+{
+	ssize_t ret;
+
+	ret = SMB_VFS_NEXT_PREAD(handle, fsp, data, n, offset);
+
+	DEBUG(10, ("vfs_private = %x\n",
+		   (unsigned int)fsp->fsp_name->st.vfs_private));
+
+	if ((ret != -1) &&
+	    ((fsp->fsp_name->st.vfs_private & GPFS_WINATTR_OFFLINE) != 0)) {
+		fsp->fsp_name->st.vfs_private &= ~GPFS_WINATTR_OFFLINE;
+		notify_fname(handle->conn, NOTIFY_ACTION_MODIFIED,
+			     FILE_NOTIFY_CHANGE_ATTRIBUTES,
+			     fsp->fsp_name->base_name);
+	}
+
+	return ret;
+}
+
+static ssize_t vfs_gpfs_hsm_notify_pwrite(struct vfs_handle_struct *handle,
+			       struct files_struct *fsp,
+			       const void *data, size_t n, SMB_OFF_T offset)
+{
+	ssize_t ret;
+
+	ret = SMB_VFS_NEXT_PWRITE(handle, fsp, data, n, offset);
+
+	if ((ret != -1) &&
+	    ((fsp->fsp_name->st.vfs_private & GPFS_WINATTR_OFFLINE) != 0)) {
+		fsp->fsp_name->st.vfs_private &= ~GPFS_WINATTR_OFFLINE;
+		notify_fname(handle->conn, NOTIFY_ACTION_MODIFIED,
+			     FILE_NOTIFY_CHANGE_ATTRIBUTES,
+			     fsp->fsp_name->base_name);
+	}
+
+	return ret;
+}
+
+static ssize_t vfs_gpfs_hsm_notify_aio_return(struct vfs_handle_struct *handle,
+				   struct files_struct *fsp,
+				   SMB_STRUCT_AIOCB *aiocb)
+{
+	ssize_t ret;
+
+	ret = SMB_VFS_NEXT_AIO_RETURN(handle, fsp, aiocb);
+
+	DEBUG(10, ("vfs_gpfs_hsm_notify_aio_return: vfs_private = %x\n",
+		   (unsigned int)fsp->fsp_name->st.vfs_private));
+
+	if ((ret != -1) &&
+	    ((fsp->fsp_name->st.vfs_private & GPFS_WINATTR_OFFLINE) != 0)) {
+		fsp->fsp_name->st.vfs_private &= ~GPFS_WINATTR_OFFLINE;
+		DEBUG(10, ("sending notify\n"));
+		notify_fname(handle->conn, NOTIFY_ACTION_MODIFIED,
+			     FILE_NOTIFY_CHANGE_ATTRIBUTES,
+			     fsp->fsp_name->base_name);
+	}
+
+	return ret;
+}
+
+static struct vfs_fn_pointers vfs_gpfs_hsm_notify_fns = {
+	.pread = vfs_gpfs_hsm_notify_pread,
+	.pwrite = vfs_gpfs_hsm_notify_pwrite,
+	.aio_return_fn = vfs_gpfs_hsm_notify_aio_return
+};
+
+NTSTATUS vfs_gpfs_hsm_notify_init(void);
+NTSTATUS vfs_gpfs_hsm_notify_init(void)
+{
+	return smb_register_vfs(SMB_VFS_INTERFACE_VERSION, "gpfs_hsm_notify",
+				&vfs_gpfs_hsm_notify_fns);
+}

Modified: branches/samba/experimental/source3/modules/vfs_xattr_tdb.c
===================================================================
--- branches/samba/experimental/source3/modules/vfs_xattr_tdb.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/modules/vfs_xattr_tdb.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -24,6 +24,7 @@
 #include "librpc/gen_ndr/ndr_xattr.h"
 #include "../librpc/gen_ndr/ndr_netlogon.h"
 #include "dbwrap.h"
+#include "util_tdb.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_VFS

Modified: branches/samba/experimental/source3/modules/wscript_build
===================================================================
--- branches/samba/experimental/source3/modules/wscript_build	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/modules/wscript_build	2011-05-19 17:46:26 UTC (rev 3779)
@@ -30,6 +30,7 @@
 VFS_PREALLOC_SRC = 'vfs_prealloc.c'
 VFS_COMMIT_SRC = 'vfs_commit.c'
 VFS_GPFS_SRC = 'vfs_gpfs.c gpfs.c'
+VFS_GPFS_HSM_NOTIFY_SRC = 'vfs_gpfs_hsm_notify.c'
 VFS_NOTIFY_FAM_SRC = 'vfs_notify_fam.c'
 VFS_READAHEAD_SRC = 'vfs_readahead.c'
 VFS_TSMSM_SRC = 'vfs_tsmsm.c'
@@ -280,6 +281,13 @@
                  internal_module=bld.SAMBA3_IS_STATIC_MODULE('vfs_gpfs'),
                  enabled=bld.SAMBA3_IS_ENABLED_MODULE('vfs_gpfs'))
 
+bld.SAMBA3_MODULE('vfs_gpfs_hsm_notify',
+                 subsystem='vfs',
+                 source=VFS_GPFS_HSM_NOTIFY_SRC,
+                 init_function='',
+                 internal_module=bld.SAMBA3_IS_STATIC_MODULE('vfs_gpfs_hsm_notify'),
+                 enabled=bld.SAMBA3_IS_ENABLED_MODULE('vfs_gpfs_hsm_notify'))
+
 bld.SAMBA3_MODULE('vfs_notify_fam',
                  subsystem='vfs',
                  source=VFS_NOTIFY_FAM_SRC,

Modified: branches/samba/experimental/source3/nmbd/nmbd_elections.c
===================================================================
--- branches/samba/experimental/source3/nmbd/nmbd_elections.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/nmbd/nmbd_elections.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -258,7 +258,7 @@
   Process an incoming election datagram packet.
 ******************************************************************/
 
-void process_election(struct subnet_record *subrec, struct packet_struct *p, char *buf)
+void process_election(struct subnet_record *subrec, struct packet_struct *p, const char *buf)
 {
 	struct dgram_packet *dgram = &p->packet.dgram;
 	int version = CVAL(buf,0);

Modified: branches/samba/experimental/source3/nmbd/nmbd_incomingdgrams.c
===================================================================
--- branches/samba/experimental/source3/nmbd/nmbd_incomingdgrams.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/nmbd/nmbd_incomingdgrams.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -95,7 +95,7 @@
   Process an incoming host announcement packet.
 *******************************************************************/
 
-void process_host_announce(struct subnet_record *subrec, struct packet_struct *p, char *buf)
+void process_host_announce(struct subnet_record *subrec, struct packet_struct *p, const char *buf)
 {
 	struct dgram_packet *dgram = &p->packet.dgram;
 	int ttl = IVAL(buf,1)/1000;
@@ -195,7 +195,7 @@
   Process an incoming WORKGROUP announcement packet.
 *******************************************************************/
 
-void process_workgroup_announce(struct subnet_record *subrec, struct packet_struct *p, char *buf)
+void process_workgroup_announce(struct subnet_record *subrec, struct packet_struct *p, const char *buf)
 {
 	struct dgram_packet *dgram = &p->packet.dgram;
 	int ttl = IVAL(buf,1)/1000;
@@ -252,7 +252,7 @@
   Process an incoming local master browser announcement packet.
 *******************************************************************/
 
-void process_local_master_announce(struct subnet_record *subrec, struct packet_struct *p, char *buf)
+void process_local_master_announce(struct subnet_record *subrec, struct packet_struct *p, const char *buf)
 {
 	struct dgram_packet *dgram = &p->packet.dgram;
 	int ttl = IVAL(buf,1)/1000;
@@ -367,7 +367,7 @@
 ******************************************************************/
 
 void process_master_browser_announce(struct subnet_record *subrec, 
-                                     struct packet_struct *p,char *buf)
+                                     struct packet_struct *p,const char *buf)
 {
 	unstring local_master_name;
 	struct work_record *work;
@@ -418,7 +418,7 @@
   Process an incoming LanMan host announcement packet.
 *******************************************************************/
 
-void process_lm_host_announce(struct subnet_record *subrec, struct packet_struct *p, char *buf, int len)
+void process_lm_host_announce(struct subnet_record *subrec, struct packet_struct *p, const char *buf, int len)
 {
 	struct dgram_packet *dgram = &p->packet.dgram;
 	uint32 servertype = IVAL(buf,1);
@@ -431,7 +431,7 @@
 	unstring work_name;
 	unstring source_name;
 	fstring comment;
-	char *s = get_safe_str_ptr(buf,len,buf,9);
+	char *s = get_safe_str_ptr(buf,len,discard_const_p(char, buf),9);
 
 	START_PROFILE(lm_host_announce);
 	if (!s) {
@@ -641,7 +641,7 @@
 ********************************************************************/
 
 void process_get_backup_list_request(struct subnet_record *subrec,
-                                     struct packet_struct *p,char *buf)
+                                     struct packet_struct *p,const char *buf)
 {
 	struct dgram_packet *dgram = &p->packet.dgram;
 	struct work_record *work;
@@ -724,7 +724,7 @@
 ******************************************************************/
 
 void process_reset_browser(struct subnet_record *subrec,
-                                  struct packet_struct *p,char *buf)
+                                  struct packet_struct *p,const char *buf)
 {
 	struct dgram_packet *dgram = &p->packet.dgram;
 	int state = CVAL(buf,0);
@@ -776,7 +776,7 @@
   announcement is needed soon.
 ******************************************************************/
 
-void process_announce_request(struct subnet_record *subrec, struct packet_struct *p, char *buf)
+void process_announce_request(struct subnet_record *subrec, struct packet_struct *p, const char *buf)
 {
 	struct dgram_packet *dgram = &p->packet.dgram;
 	struct work_record *work;
@@ -817,7 +817,7 @@
   through the "lm announce" parameter in smb.conf)
 ******************************************************************/
 
-void process_lm_announce_request(struct subnet_record *subrec, struct packet_struct *p, char *buf, int len)
+void process_lm_announce_request(struct subnet_record *subrec, struct packet_struct *p, const char *buf, int len)
 {
 	struct dgram_packet *dgram = &p->packet.dgram;
 	unstring workgroup_name;

Modified: branches/samba/experimental/source3/nmbd/nmbd_packets.c
===================================================================
--- branches/samba/experimental/source3/nmbd/nmbd_packets.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/nmbd/nmbd_packets.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -23,6 +23,7 @@
 #include "nmbd/nmbd.h"
 #include "../lib/util/select.h"
 #include "system/select.h"
+#include "libsmb/libsmb.h"
 
 extern int ClientNMB;
 extern int ClientDGRAM;
@@ -108,7 +109,7 @@
 Dumps out the browse packet data.
 **************************************************************************/
 
-static void debug_browse_data(char *outbuf, int len)
+static void debug_browse_data(const char *outbuf, int len)
 {
 	int i,j;
 
@@ -1062,7 +1063,7 @@
 Dispatch a browse frame from port 138 to the correct processing function.
 ****************************************************************************/
 
-static void process_browse_packet(struct packet_struct *p, char *buf,int len)
+static void process_browse_packet(struct packet_struct *p, const char *buf,int len)
 {
 	struct dgram_packet *dgram = &p->packet.dgram;
 	int command = CVAL(buf,0);
@@ -1149,7 +1150,7 @@
  Dispatch a LanMan browse frame from port 138 to the correct processing function.
 ****************************************************************************/
 
-static void process_lanman_packet(struct packet_struct *p, char *buf,int len)
+static void process_lanman_packet(struct packet_struct *p, const char *buf,int len)
 {
 	struct dgram_packet *dgram = &p->packet.dgram;
 	int command = SVAL(buf,0);
@@ -1216,8 +1217,8 @@
 
 static void process_dgram(struct packet_struct *p)
 {
-	char *buf;
-	char *buf2;
+	const char *buf;
+	const char *buf2;
 	int len;
 	struct dgram_packet *dgram = &p->packet.dgram;
 

Modified: branches/samba/experimental/source3/nmbd/nmbd_processlogon.c
===================================================================
--- branches/samba/experimental/source3/nmbd/nmbd_processlogon.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/nmbd/nmbd_processlogon.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -304,7 +304,7 @@
 Process a domain logon packet
 **************************************************************************/
 
-void process_logon_packet(struct packet_struct *p, char *buf,int len,
+void process_logon_packet(struct packet_struct *p, const char *buf,int len,
                           const char *mailslot)
 {
 	fstring source_name;

Modified: branches/samba/experimental/source3/nmbd/nmbd_proto.h
===================================================================
--- branches/samba/experimental/source3/nmbd/nmbd_proto.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/nmbd/nmbd_proto.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -48,7 +48,7 @@
 
 void check_master_browser_exists(time_t t);
 void run_elections(time_t t);
-void process_election(struct subnet_record *subrec, struct packet_struct *p, char *buf);
+void process_election(struct subnet_record *subrec, struct packet_struct *p, const char *buf);
 bool check_elections(void);
 void nmbd_message_election(struct messaging_context *msg,
 			   void *private_data,
@@ -59,18 +59,18 @@
 /* The following definitions come from nmbd/nmbd_incomingdgrams.c  */
 
 void tell_become_backup(void);
-void process_host_announce(struct subnet_record *subrec, struct packet_struct *p, char *buf);
-void process_workgroup_announce(struct subnet_record *subrec, struct packet_struct *p, char *buf);
-void process_local_master_announce(struct subnet_record *subrec, struct packet_struct *p, char *buf);
+void process_host_announce(struct subnet_record *subrec, struct packet_struct *p, const char *buf);
+void process_workgroup_announce(struct subnet_record *subrec, struct packet_struct *p, const char *buf);
+void process_local_master_announce(struct subnet_record *subrec, struct packet_struct *p, const char *buf);
 void process_master_browser_announce(struct subnet_record *subrec,
-                                     struct packet_struct *p,char *buf);
-void process_lm_host_announce(struct subnet_record *subrec, struct packet_struct *p, char *buf, int len);
+                                     struct packet_struct *p,const char *buf);
+void process_lm_host_announce(struct subnet_record *subrec, struct packet_struct *p, const char *buf, int len);
 void process_get_backup_list_request(struct subnet_record *subrec,
-                                     struct packet_struct *p,char *buf);
+                                     struct packet_struct *p,const char *buf);
 void process_reset_browser(struct subnet_record *subrec,
-                                  struct packet_struct *p,char *buf);
-void process_announce_request(struct subnet_record *subrec, struct packet_struct *p, char *buf);
-void process_lm_announce_request(struct subnet_record *subrec, struct packet_struct *p, char *buf, int len);
+                                  struct packet_struct *p,const char *buf);
+void process_announce_request(struct subnet_record *subrec, struct packet_struct *p, const char *buf);
+void process_lm_announce_request(struct subnet_record *subrec, struct packet_struct *p, const char *buf, int len);
 
 /* The following definitions come from nmbd/nmbd_incomingrequests.c  */
 
@@ -250,7 +250,7 @@
 
 bool initialize_nmbd_proxy_logon(void);
 
-void process_logon_packet(struct packet_struct *p, char *buf,int len,
+void process_logon_packet(struct packet_struct *p, const char *buf,int len,
                           const char *mailslot);
 
 /* The following definitions come from nmbd/nmbd_responserecordsdb.c  */

Modified: branches/samba/experimental/source3/nmbd/nmbd_synclists.c
===================================================================
--- branches/samba/experimental/source3/nmbd/nmbd_synclists.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/nmbd/nmbd_synclists.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -30,6 +30,7 @@
 #include "system/filesys.h"
 #include "../librpc/gen_ndr/svcctl.h"
 #include "nmbd/nmbd.h"
+#include "libsmb/libsmb.h"
 #include "libsmb/clirap.h"
 #include "smbprofile.h"
 

Modified: branches/samba/experimental/source3/nmbd/nmbd_winsserver.c
===================================================================
--- branches/samba/experimental/source3/nmbd/nmbd_winsserver.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/nmbd/nmbd_winsserver.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -23,6 +23,7 @@
 #include "includes.h"
 #include "system/filesys.h"
 #include "nmbd/nmbd.h"
+#include "util_tdb.h"
 
 #define WINS_LIST "wins.dat"
 #define WINS_VERSION 1

Modified: branches/samba/experimental/source3/param/loadparm.c
===================================================================
--- branches/samba/experimental/source3/param/loadparm.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/param/loadparm.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -53,10 +53,10 @@
 
 #include "includes.h"
 #include "system/filesys.h"
+#include "util_tdb.h"
 #include "printing.h"
 #include "lib/smbconf/smbconf.h"
 #include "lib/smbconf/smbconf_init.h"
-#include "lib/smbconf/smbconf_reg.h"
 
 #include "ads.h"
 #include "../librpc/gen_ndr/svcctl.h"
@@ -7208,14 +7208,14 @@
 
 static struct smbconf_ctx *lp_smbconf_ctx(void)
 {
-	WERROR werr;
+	sbcErr err;
 	static struct smbconf_ctx *conf_ctx = NULL;
 
 	if (conf_ctx == NULL) {
-		werr = smbconf_init(NULL, &conf_ctx, "registry:");
-		if (!W_ERROR_IS_OK(werr)) {
+		err = smbconf_init(NULL, &conf_ctx, "registry:");
+		if (!SBC_ERROR_IS_OK(err)) {
 			DEBUG(1, ("error initializing registry configuration: "
-				  "%s\n", win_errstr(werr)));
+				  "%s\n", sbcErrorString(err)));
 			conf_ctx = NULL;
 		}
 	}
@@ -7255,7 +7255,7 @@
  */
 bool process_registry_service(const char *service_name)
 {
-	WERROR werr;
+	sbcErr err;
 	struct smbconf_service *service = NULL;
 	TALLOC_CTX *mem_ctx = talloc_stackframe();
 	struct smbconf_ctx *conf_ctx = lp_smbconf_ctx();
@@ -7276,8 +7276,8 @@
 		goto done;
 	}
 
-	werr = smbconf_get_share(conf_ctx, mem_ctx, service_name, &service);
-	if (!W_ERROR_IS_OK(werr)) {
+	err = smbconf_get_share(conf_ctx, mem_ctx, service_name, &service);
+	if (!SBC_ERROR_IS_OK(err)) {
 		goto done;
 	}
 
@@ -7313,7 +7313,7 @@
 
 bool process_registry_shares(void)
 {
-	WERROR werr;
+	sbcErr err;
 	uint32_t count;
 	struct smbconf_service **service = NULL;
 	uint32_t num_shares = 0;
@@ -7325,8 +7325,8 @@
 		goto done;
 	}
 
-	werr = smbconf_get_config(conf_ctx, mem_ctx, &num_shares, &service);
-	if (!W_ERROR_IS_OK(werr)) {
+	err = smbconf_get_config(conf_ctx, mem_ctx, &num_shares, &service);
+	if (!SBC_ERROR_IS_OK(err)) {
 		goto done;
 	}
 
@@ -8610,7 +8610,8 @@
  Auto-load one printer.
 ***************************************************************************/
 
-void lp_add_one_printer(const char *name, const char *comment, void *pdata)
+void lp_add_one_printer(const char *name, const char *comment,
+			const char *location, void *pdata)
 {
 	int printers = lp_servicenumber(PRINTERS_NAME);
 	int i;

Modified: branches/samba/experimental/source3/passdb/login_cache.c
===================================================================
--- branches/samba/experimental/source3/passdb/login_cache.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/passdb/login_cache.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -20,6 +20,7 @@
 #include "includes.h"
 #include "system/filesys.h"
 #include "passdb.h"
+#include "util_tdb.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_PASSDB

Modified: branches/samba/experimental/source3/passdb/machine_account_secrets.c
===================================================================
--- branches/samba/experimental/source3/passdb/machine_account_secrets.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/passdb/machine_account_secrets.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -28,6 +28,7 @@
 #include "secrets.h"
 #include "dbwrap.h"
 #include "../librpc/ndr/libndr.h"
+#include "util_tdb.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_PASSDB

Modified: branches/samba/experimental/source3/passdb/passdb.c
===================================================================
--- branches/samba/experimental/source3/passdb/passdb.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/passdb/passdb.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -29,6 +29,7 @@
 #include "secrets.h"
 #include "../libcli/security/security.h"
 #include "../lib/util/util_pw.h"
+#include "util_tdb.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_PASSDB

Modified: branches/samba/experimental/source3/passdb/pdb_tdb.c
===================================================================
--- branches/samba/experimental/source3/passdb/pdb_tdb.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/passdb/pdb_tdb.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -27,6 +27,7 @@
 #include "passdb.h"
 #include "dbwrap.h"
 #include "../libcli/security/security.h"
+#include "util_tdb.h"
 
 #if 0 /* when made a module use this */
 

Modified: branches/samba/experimental/source3/passdb/secrets.c
===================================================================
--- branches/samba/experimental/source3/passdb/secrets.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/passdb/secrets.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -30,6 +30,7 @@
 #include "secrets.h"
 #include "dbwrap.h"
 #include "../libcli/security/security.h"
+#include "util_tdb.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_PASSDB

Modified: branches/samba/experimental/source3/printing/notify.c
===================================================================
--- branches/samba/experimental/source3/printing/notify.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/printing/notify.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -25,6 +25,7 @@
 #include "nt_printing.h"
 #include "printing/notify.h"
 #include "messages.h"
+#include "util_tdb.h"
 
 static TALLOC_CTX *send_ctx;
 

Modified: branches/samba/experimental/source3/printing/nt_printing.c
===================================================================
--- branches/samba/experimental/source3/printing/nt_printing.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/printing/nt_printing.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -20,12 +20,7 @@
  */
 
 #include "includes.h"
-#include "printing/pcap.h"
 #include "printing/nt_printing_tdb.h"
-#include "printing/nt_printing_migrate.h"
-#include "registry.h"
-#include "registry/reg_objects.h"
-#include "../librpc/gen_ndr/ndr_security.h"
 #include "../librpc/gen_ndr/ndr_spoolss.h"
 #include "rpc_server/spoolss/srv_spoolss_util.h"
 #include "nt_printing.h"
@@ -36,7 +31,7 @@
 #include "smbd/smbd.h"
 #include "auth.h"
 #include "messages.h"
-#include "ntdomain.h"
+#include "rpc_server/spoolss/srv_spoolss_nt.h"
 
 /* Map generic permissions to printer object specific permissions */
 
@@ -578,7 +573,7 @@
 /****************************************************************************
 Determine the correct cVersion associated with an architecture and driver
 ****************************************************************************/
-static uint32 get_correct_cversion(struct pipes_struct *p,
+static uint32 get_correct_cversion(struct auth_serversupplied_info *session_info,
 				   const char *architecture,
 				   const char *driverpath_in,
 				   WERROR *perr)
@@ -621,7 +616,7 @@
 
 	nt_status = create_conn_struct(talloc_tos(), &conn, printdollar_snum,
 				       lp_pathname(printdollar_snum),
-				       p->session_info, &oldcwd);
+				       session_info, &oldcwd);
 	if (!NT_STATUS_IS_OK(nt_status)) {
 		DEBUG(0,("get_correct_cversion: create_conn_struct "
 			 "returned %s\n", nt_errstr(nt_status)));
@@ -636,7 +631,7 @@
 		goto error_free_conn;
 	}
 
-	if (!become_user_by_session(conn, p->session_info)) {
+	if (!become_user_by_session(conn, session_info)) {
 		DEBUG(0, ("failed to become user\n"));
 		*perr = WERR_ACCESS_DENIED;
 		goto error_free_conn;
@@ -766,7 +761,7 @@
 } while (0);
 
 static WERROR clean_up_driver_struct_level(TALLOC_CTX *mem_ctx,
-					   struct pipes_struct *rpc_pipe,
+					   struct auth_serversupplied_info *session_info,
 					   const char *architecture,
 					   const char **driver_path,
 					   const char **data_file,
@@ -826,7 +821,7 @@
 	 *	NT2K: cversion=3
 	 */
 
-	*version = get_correct_cversion(rpc_pipe, short_architecture,
+	*version = get_correct_cversion(session_info, short_architecture,
 					*driver_path, &err);
 	if (*version == -1) {
 		return err;
@@ -839,12 +834,12 @@
 ****************************************************************************/
 
 WERROR clean_up_driver_struct(TALLOC_CTX *mem_ctx,
-			      struct pipes_struct *rpc_pipe,
+			      struct auth_serversupplied_info *session_info,
 			      struct spoolss_AddDriverInfoCtr *r)
 {
 	switch (r->level) {
 	case 3:
-		return clean_up_driver_struct_level(mem_ctx, rpc_pipe,
+		return clean_up_driver_struct_level(mem_ctx, session_info,
 						    r->info.info3->architecture,
 						    &r->info.info3->driver_path,
 						    &r->info.info3->data_file,
@@ -853,7 +848,7 @@
 						    r->info.info3->dependent_files,
 						    &r->info.info3->version);
 	case 6:
-		return clean_up_driver_struct_level(mem_ctx, rpc_pipe,
+		return clean_up_driver_struct_level(mem_ctx, session_info,
 						    r->info.info6->architecture,
 						    &r->info.info6->driver_path,
 						    &r->info.info6->data_file,
@@ -958,7 +953,7 @@
 	return ret;
 }
 
-WERROR move_driver_to_download_area(struct pipes_struct *p,
+WERROR move_driver_to_download_area(struct auth_serversupplied_info *session_info,
 				    struct spoolss_AddDriverInfoCtr *r)
 {
 	struct spoolss_AddDriverInfo3 *driver;
@@ -1004,7 +999,7 @@
 
 	nt_status = create_conn_struct(talloc_tos(), &conn, printdollar_snum,
 				       lp_pathname(printdollar_snum),
-				       p->session_info, &oldcwd);
+				       session_info, &oldcwd);
 	if (!NT_STATUS_IS_OK(nt_status)) {
 		DEBUG(0,("move_driver_to_download_area: create_conn_struct "
 			 "returned %s\n", nt_errstr(nt_status)));
@@ -1019,7 +1014,7 @@
 		goto err_free_conn;
 	}
 
-	if (!become_user_by_session(conn, p->session_info)) {
+	if (!become_user_by_session(conn, session_info)) {
 		DEBUG(0, ("failed to become user\n"));
 		err = WERR_ACCESS_DENIED;
 		goto err_free_conn;

Modified: branches/samba/experimental/source3/printing/nt_printing_ads.c
===================================================================
--- branches/samba/experimental/source3/printing/nt_printing_ads.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/printing/nt_printing_ads.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -28,6 +28,7 @@
 #include "krb5_env.h"
 #include "../libcli/registry/util_reg.h"
 #include "auth.h"
+#include "../librpc/ndr/libndr.h"
 
 #ifdef HAVE_ADS
 /*****************************************************************

Modified: branches/samba/experimental/source3/printing/nt_printing_migrate.c
===================================================================
--- branches/samba/experimental/source3/printing/nt_printing_migrate.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/printing/nt_printing_migrate.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -25,10 +25,10 @@
 #include "rpc_client/rpc_client.h"
 #include "librpc/gen_ndr/ndr_ntprinting.h"
 #include "librpc/gen_ndr/ndr_spoolss_c.h"
-#include "rpc_client/cli_spoolss.h"
 #include "librpc/gen_ndr/ndr_security.h"
 #include "rpc_server/rpc_ncacn_np.h"
 #include "auth.h"
+#include "util_tdb.h"
 
 #define FORMS_PREFIX "FORMS/"
 #define DRIVERS_PREFIX "DRIVERS/"
@@ -651,7 +651,7 @@
 		return false;
 	}
 
-	status = rpc_pipe_open_internal(tmp_ctx,
+	status = rpc_pipe_open_interface(tmp_ctx,
 					&ndr_table_spoolss.syntax_id,
 					session_info,
 					NULL,

Modified: branches/samba/experimental/source3/printing/nt_printing_tdb.c
===================================================================
--- branches/samba/experimental/source3/printing/nt_printing_tdb.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/printing/nt_printing_tdb.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -26,6 +26,7 @@
 #include "librpc/gen_ndr/spoolss.h"
 #include "librpc/gen_ndr/ndr_security.h"
 #include "libcli/security/security.h"
+#include "util_tdb.h"
 
 #define FORMS_PREFIX "FORMS/"
 #define DRIVERS_PREFIX "DRIVERS/"

Modified: branches/samba/experimental/source3/printing/pcap.c
===================================================================
--- branches/samba/experimental/source3/printing/pcap.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/printing/pcap.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -43,10 +43,11 @@
 struct pcap_cache {
 	char *name;
 	char *comment;
+	char *location;
 	struct pcap_cache *next;
 };
 
-bool pcap_cache_add_specific(struct pcap_cache **ppcache, const char *name, const char *comment)
+bool pcap_cache_add_specific(struct pcap_cache **ppcache, const char *name, const char *comment, const char *location)
 {
 	struct pcap_cache *p;
 
@@ -55,9 +56,11 @@
 
 	p->name = SMB_STRDUP(name);
 	p->comment = (comment && *comment) ? SMB_STRDUP(comment) : NULL;
+	p->location = (location && *location) ? SMB_STRDUP(location) : NULL;
 
-	DEBUG(11,("pcap_cache_add_specific: Adding name %s info %s\n",
-		p->name, p->comment ? p->comment : ""));
+	DEBUG(11,("pcap_cache_add_specific: Adding name %s info %s, location: %s\n",
+		p->name, p->comment ? p->comment : "",
+		p->location ? p->location : ""));
 
 	p->next = *ppcache;
 	*ppcache = p;
@@ -74,17 +77,18 @@
 
 		SAFE_FREE(p->name);
 		SAFE_FREE(p->comment);
+		SAFE_FREE(p->location);
 		SAFE_FREE(p);
 	}
 	*pp_cache = NULL;
 }
 
-bool pcap_cache_add(const char *name, const char *comment)
+bool pcap_cache_add(const char *name, const char *comment, const char *location)
 {
 	NTSTATUS status;
 	time_t t = time_mono(NULL);
 
-	status = printer_list_set_printer(talloc_tos(), name, comment, t);
+	status = printer_list_set_printer(talloc_tos(), name, comment, location, t);
 	return NT_STATUS_IS_OK(status);
 }
 
@@ -109,7 +113,7 @@
 	}
 
 	for (p = pcache; p; p = p->next) {
-		pcap_cache_add(p->name, p->comment);
+		pcap_cache_add(p->name, p->comment, p->location);
 	}
 
 	status = printer_list_clean_old();
@@ -205,7 +209,7 @@
 {
 	NTSTATUS status;
 
-	status = printer_list_get_printer(talloc_tos(), printername, NULL, 0);
+	status = printer_list_get_printer(talloc_tos(), printername, NULL, NULL, 0);
 	return NT_STATUS_IS_OK(status);
 }
 
@@ -214,18 +218,18 @@
 ***************************************************************************/
 
 void pcap_printer_fn_specific(const struct pcap_cache *pc,
-			void (*fn)(const char *, const char *, void *),
+			void (*fn)(const char *, const char *, const char *, void *),
 			void *pdata)
 {
 	const struct pcap_cache *p;
 
 	for (p = pc; p != NULL; p = p->next)
-		fn(p->name, p->comment, pdata);
+		fn(p->name, p->comment, p->location, pdata);
 
 	return;
 }
 
-void pcap_printer_fn(void (*fn)(const char *, const char *, void *), void *pdata)
+void pcap_printer_fn(void (*fn)(const char *, const char *, const char *, void *), void *pdata)
 {
 	NTSTATUS status;
 

Modified: branches/samba/experimental/source3/printing/pcap.h
===================================================================
--- branches/samba/experimental/source3/printing/pcap.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/printing/pcap.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -20,13 +20,13 @@
 
 /* The following definitions come from printing/pcap.c  */
 
-bool pcap_cache_add_specific(struct pcap_cache **ppcache, const char *name, const char *comment);
+bool pcap_cache_add_specific(struct pcap_cache **ppcache, const char *name, const char *comment, const char *location);
 void pcap_cache_destroy_specific(struct pcap_cache **ppcache);
-bool pcap_cache_add(const char *name, const char *comment);
+bool pcap_cache_add(const char *name, const char *comment, const char *location);
 bool pcap_cache_loaded(void);
 bool pcap_cache_replace(const struct pcap_cache *cache);
-void pcap_printer_fn_specific(const struct pcap_cache *, void (*fn)(const char *, const char *, void *), void *);
-void pcap_printer_fn(void (*fn)(const char *, const char *, void *), void *);
+void pcap_printer_fn_specific(const struct pcap_cache *, void (*fn)(const char *, const char *, const char *, void *), void *);
+void pcap_printer_fn(void (*fn)(const char *, const char *, const char *, void *), void *);
 
 void pcap_cache_reload(struct tevent_context *ev,
 		       struct messaging_context *msg_ctx,
@@ -44,10 +44,6 @@
 		       struct messaging_context *msg_ctx,
 		       void (*post_cache_fill_fn)(struct tevent_context *,
 						  struct messaging_context *));
-bool cups_pull_comment_location(TALLOC_CTX *mem_ctx,
-				const char *printername,
-				char **comment,
-				char **location);
 
 /* The following definitions come from printing/print_iprint.c  */
 

Modified: branches/samba/experimental/source3/printing/print_aix.c
===================================================================
--- branches/samba/experimental/source3/printing/print_aix.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/printing/print_aix.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -86,7 +86,7 @@
 				/* name is found without stanza device  */
 				/* probably a good printer ???		*/
 				iEtat = 0;
-				if (!pcap_cache_add(name, NULL)) {
+				if (!pcap_cache_add(name, NULL, NULL)) {
 					SAFE_FREE(line);
 					x_fclose(pfile);
 					TALLOC_FREE(ctx);
@@ -101,7 +101,7 @@
 			} else if (strstr_m(line, "device")) {
 				/* it's a good virtual printer */
 				iEtat = 0;
-				if (!pcap_cache_add(name, NULL)) {
+				if (!pcap_cache_add(name, NULL, NULL)) {
 					SAFE_FREE(line);
 					x_fclose(pfile);
 					TALLOC_FREE(ctx);

Modified: branches/samba/experimental/source3/printing/print_cups.c
===================================================================
--- branches/samba/experimental/source3/printing/print_cups.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/printing/print_cups.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -163,6 +163,7 @@
 	ipp_attribute_t	*attr;
 	char *name;
 	char *info;
+	char *location = NULL;
 	struct pcap_printer *printer;
 	bool ret_ok = false;
 
@@ -206,6 +207,16 @@
 				}
 			}
 
+			if (strcmp(attr->name, "printer-location") == 0 &&
+			    attr->value_tag == IPP_TAG_TEXT) {
+				if (!pull_utf8_talloc(mem_ctx,
+						&location,
+						attr->values[0].string.text,
+						&size)) {
+					goto err_out;
+				}
+			}
+
 			attr = attr->next;
 		}
 
@@ -229,6 +240,7 @@
 		pcap_data->printers = printer;
 		pcap_data->printers[pcap_data->count].name = name;
 		pcap_data->printers[pcap_data->count].info = info;
+		pcap_data->printers[pcap_data->count].location = location;
 		pcap_data->count++;
 	}
 
@@ -252,7 +264,8 @@
 	static const char *requested[] =/* Requested attributes */
 			{
 			  "printer-name",
-			  "printer-info"
+			  "printer-info",
+			  "printer-location"
 			};
 	bool ret = False;
 	enum ndr_err_code ndr_ret;
@@ -478,7 +491,8 @@
 	for (i = 0; i < pcap_data.count; i++) {
 		ret_ok = pcap_cache_add_specific(&tmp_pcap_cache,
 						 pcap_data.printers[i].name,
-						 pcap_data.printers[i].info);
+						 pcap_data.printers[i].info,
+						 pcap_data.printers[i].location);
 		if (!ret_ok) {
 			DEBUG(0, ("failed to add to tmp pcap cache\n"));
 			goto err_out;
@@ -1573,178 +1587,6 @@
 	cups_job_submit,
 };
 
-bool cups_pull_comment_location(TALLOC_CTX *mem_ctx,
-				const char *printername,
-				char **comment,
-				char **location)
-{
-	TALLOC_CTX *frame = talloc_stackframe();
-	http_t		*http = NULL;		/* HTTP connection to server */
-	ipp_t		*request = NULL,	/* IPP Request */
-			*response = NULL;	/* IPP Response */
-	ipp_attribute_t	*attr;		/* Current attribute */
-	cups_lang_t	*language = NULL;	/* Default language */
-	char		uri[HTTP_MAX_URI];
-	char *server = NULL;
-	char *sharename = NULL;
-	char *name = NULL;
-	static const char *requested[] =/* Requested attributes */
-			{
-			  "printer-name",
-			  "printer-info",
-			  "printer-location"
-			};
-	bool ret = False;
-	size_t size;
-
-	DEBUG(5, ("pulling %s location\n", printername));
-
-	/*
-	 * Make sure we don't ask for passwords...
-	 */
-
-        cupsSetPasswordCB(cups_passwd_cb);
-
-	/*
-	 * Try to connect to the server...
-	 */
-
-	if ((http = cups_connect(frame)) == NULL) {
-		goto out;
-	}
-
-	request = ippNew();
-
-	request->request.op.operation_id = IPP_GET_PRINTER_ATTRIBUTES;
-	request->request.op.request_id   = 1;
-
-	language = cupsLangDefault();
-
-	ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
-                     "attributes-charset", NULL, "utf-8");
-
-	ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
-                     "attributes-natural-language", NULL, language->language);
-
-	if (lp_cups_server() != NULL && strlen(lp_cups_server()) > 0) {
-		if (!push_utf8_talloc(frame, &server, lp_cups_server(), &size)) {
-			goto out;
-		}
-	} else {
-		server = talloc_strdup(frame,cupsServer());
-	}
-	if (server) {
-		goto out;
-	}
-	if (!push_utf8_talloc(frame, &sharename, printername, &size)) {
-		goto out;
-	}
-	slprintf(uri, sizeof(uri) - 1, "ipp://%s/printers/%s",
-		 server, sharename);
-
-	ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI,
-                     "printer-uri", NULL, uri);
-
-        ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_NAME,
-	              "requested-attributes",
-		      (sizeof(requested) / sizeof(requested[0])),
-		      NULL, requested);
-
-	/*
-	 * Do the request and get back a response...
-	 */
-
-	if ((response = cupsDoRequest(http, request, "/")) == NULL) {
-		DEBUG(0,("Unable to get printer attributes - %s\n",
-			 ippErrorString(cupsLastError())));
-		goto out;
-	}
-
-	for (attr = response->attrs; attr != NULL;) {
-		/*
-		 * Skip leading attributes until we hit a printer...
-		 */
-
-		while (attr != NULL && attr->group_tag != IPP_TAG_PRINTER)
-			attr = attr->next;
-
-		if (attr == NULL)
-        		break;
-
-		/*
-		 * Pull the needed attributes from this printer...
-		 */
-
-		while ( attr && (attr->group_tag == IPP_TAG_PRINTER) ) {
-        		if (strcmp(attr->name, "printer-name") == 0 &&
-			    attr->value_tag == IPP_TAG_NAME) {
-				if (!pull_utf8_talloc(frame,
-						&name,
-						attr->values[0].string.text,
-						&size)) {
-					goto out;
-				}
-			}
-
-			/* Grab the comment if we don't have one */
-        		if ( (strcmp(attr->name, "printer-info") == 0)
-			     && (attr->value_tag == IPP_TAG_TEXT))
-			{
-				if (!pull_utf8_talloc(mem_ctx,
-						comment,
-						attr->values[0].string.text,
-						&size)) {
-					goto out;
-				}
-				DEBUG(5,("cups_pull_comment_location: Using cups comment: %s\n",
-					 *comment));
-			}
-
-			/* Grab the location if we don't have one */
-			if ( (strcmp(attr->name, "printer-location") == 0)
-			     && (attr->value_tag == IPP_TAG_TEXT))
-			{
-				if (!pull_utf8_talloc(mem_ctx,
-						location,
-						attr->values[0].string.text,
-						&size)) {
-					goto out;
-				}
-				DEBUG(5,("cups_pull_comment_location: Using cups location: %s\n",
-					 *location));
-			}
-
-        		attr = attr->next;
-		}
-
-		/*
-		 * We have everything needed...
-		 */
-
-		if (name != NULL)
-			break;
-	}
-
-	ret = True;
-
- out:
-	if (response)
-		ippDelete(response);
-
-	if (request) {
-		ippDelete(request);
-	}
-
-	if (language)
-		cupsLangFree(language);
-
-	if (http)
-		httpClose(http);
-
-	TALLOC_FREE(frame);
-	return ret;
-}
-
 #else
  /* this keeps fussy compilers happy */
  void print_cups_dummy(void);

Modified: branches/samba/experimental/source3/printing/print_iprint.c
===================================================================
--- branches/samba/experimental/source3/printing/print_iprint.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/printing/print_iprint.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -297,7 +297,7 @@
 		*/
 
 		if (name != NULL && !secure && smb_enabled) 
-			pcap_cache_add(name, info);
+			pcap_cache_add(name, info, NULL);
 	}
 
  out:

Modified: branches/samba/experimental/source3/printing/print_standard.c
===================================================================
--- branches/samba/experimental/source3/printing/print_standard.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/printing/print_standard.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -120,7 +120,7 @@
 		comment[60] = 0;
 		name[MAXPRINTERLEN] = 0;
 
-		if (*name && !pcap_cache_add(name, comment)) {
+		if (*name && !pcap_cache_add(name, comment, NULL)) {
 			x_fclose(pcap_file);
 			return false;
 		}

Modified: branches/samba/experimental/source3/printing/print_svid.c
===================================================================
--- branches/samba/experimental/source3/printing/print_svid.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/printing/print_svid.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -111,7 +111,7 @@
 			*tmp = '\0';
 		
 		/* add it to the cache */
-		if (!pcap_cache_add(name, NULL)) {
+		if (!pcap_cache_add(name, NULL, NULL)) {
 			TALLOC_FREE(lines);
 			return False;
 		}

Modified: branches/samba/experimental/source3/printing/printer_list.c
===================================================================
--- branches/samba/experimental/source3/printing/printer_list.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/printing/printer_list.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -20,13 +20,14 @@
 #include "includes.h"
 #include "system/filesys.h"
 #include "dbwrap.h"
+#include "util_tdb.h"
 #include "printer_list.h"
 
 #define PL_DB_NAME() lock_path("printer_list.tdb")
 #define PL_KEY_PREFIX "PRINTERLIST/PRN/"
 #define PL_KEY_FORMAT PL_KEY_PREFIX"%s"
 #define PL_TIMESTAMP_KEY "PRINTERLIST/GLOBAL/LAST_REFRESH"
-#define PL_DATA_FORMAT "ddPP"
+#define PL_DATA_FORMAT "ddPPP"
 #define PL_TSTAMP_FORMAT "dd"
 
 static struct db_context *get_printer_list_db(void)
@@ -64,6 +65,7 @@
 NTSTATUS printer_list_get_printer(TALLOC_CTX *mem_ctx,
 				  const char *name,
 				  const char **comment,
+				  const char **location,
 				  time_t *last_refresh)
 {
 	struct db_context *db;
@@ -72,6 +74,7 @@
 	uint32_t time_h, time_l;
 	char *nstr = NULL;
 	char *cstr = NULL;
+	char *lstr = NULL;
 	NTSTATUS status;
 	int ret;
 
@@ -95,7 +98,7 @@
 
 	ret = tdb_unpack(data.dptr, data.dsize,
 			 PL_DATA_FORMAT,
-			 &time_h, &time_l, &nstr, &cstr);
+			 &time_h, &time_l, &nstr, &cstr, &lstr);
 	if (ret == -1) {
 		DEBUG(1, ("Failed to un pack printer data"));
 		status = NT_STATUS_INTERNAL_DB_CORRUPTION;
@@ -115,6 +118,15 @@
 		}
 	}
 
+	if (location) {
+		*location = talloc_strdup(mem_ctx, lstr);
+		if (*location == NULL) {
+			DEBUG(1, ("Failed to strdup location!\n"));
+			status = NT_STATUS_NO_MEMORY;
+			goto done;
+		}
+	}
+
 	status = NT_STATUS_OK;
 
 done:
@@ -127,6 +139,7 @@
 NTSTATUS printer_list_set_printer(TALLOC_CTX *mem_ctx,
 				  const char *name,
 				  const char *comment,
+				  const char *location,
 				  time_t last_refresh)
 {
 	struct db_context *db;
@@ -135,6 +148,7 @@
 	uint64_t time_64;
 	uint32_t time_h, time_l;
 	const char *str = NULL;
+	const char *str2 = NULL;
 	NTSTATUS status;
 	int len;
 
@@ -155,11 +169,18 @@
 		str = "";
 	}
 
+	if (location) {
+		str2 = location;
+	} else {
+		str2 = "";
+	}
+
+
 	time_64 = last_refresh;
 	time_l = time_64 & 0xFFFFFFFFL;
 	time_h = time_64 >> 32;
 
-	len = tdb_pack(NULL, 0, PL_DATA_FORMAT, time_h, time_l, name, str);
+	len = tdb_pack(NULL, 0, PL_DATA_FORMAT, time_h, time_l, name, str, str2);
 
 	data.dptr = talloc_array(key, uint8_t, len);
 	if (!data.dptr) {
@@ -288,6 +309,7 @@
 	time_t refresh;
 	char *name;
 	char *comment;
+	char *location;
 	int ret;
 
 	/* skip anything that does not contain PL_DATA_FORMAT data */
@@ -297,7 +319,8 @@
 	}
 
 	ret = tdb_unpack(rec->value.dptr, rec->value.dsize,
-			 PL_DATA_FORMAT, &time_h, &time_l, &name, &comment);
+			 PL_DATA_FORMAT, &time_h, &time_l, &name, &comment,
+			 &location);
 	if (ret == -1) {
 		DEBUG(1, ("Failed to un pack printer data"));
 		state->status = NT_STATUS_INTERNAL_DB_CORRUPTION;
@@ -306,6 +329,7 @@
 
 	SAFE_FREE(name);
 	SAFE_FREE(comment);
+	SAFE_FREE(location);
 
 	refresh = (time_t)(((uint64_t)time_h << 32) + time_l);
 
@@ -341,7 +365,7 @@
 }
 
 struct printer_list_exec_state {
-	void (*fn)(const char *, const char *, void *);
+	void (*fn)(const char *, const char *, const char *, void *);
 	void *private_data;
 	NTSTATUS status;
 };
@@ -353,6 +377,7 @@
 	uint32_t time_h, time_l;
 	char *name;
 	char *comment;
+	char *location;
 	int ret;
 
 	/* always skip PL_TIMESTAMP_KEY key */
@@ -361,21 +386,23 @@
 	}
 
 	ret = tdb_unpack(rec->value.dptr, rec->value.dsize,
-			 PL_DATA_FORMAT, &time_h, &time_l, &name, &comment);
+			 PL_DATA_FORMAT, &time_h, &time_l, &name, &comment,
+			 &location);
 	if (ret == -1) {
 		DEBUG(1, ("Failed to un pack printer data"));
 		state->status = NT_STATUS_INTERNAL_DB_CORRUPTION;
 		return -1;
 	}
 
-	state->fn(name, comment, state->private_data);
+	state->fn(name, comment, location, state->private_data);
 
 	SAFE_FREE(name);
 	SAFE_FREE(comment);
+	SAFE_FREE(location);
 	return 0;
 }
 
-NTSTATUS printer_list_run_fn(void (*fn)(const char *, const char *, void *),
+NTSTATUS printer_list_run_fn(void (*fn)(const char *, const char *, const char *, void *),
 			     void *private_data)
 {
 	struct printer_list_exec_state state;

Modified: branches/samba/experimental/source3/printing/printer_list.h
===================================================================
--- branches/samba/experimental/source3/printing/printer_list.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/printing/printer_list.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -32,6 +32,8 @@
  *
  * @param[out] comment  A pointer to store the comment of the printer.
  *
+ * @param[out] location A pointer to store the location of the printer.
+ *
  * @param[out] last_refresh A pointer to store the last refresh time of the
  *                          printer.
  *
@@ -41,6 +43,7 @@
 NTSTATUS printer_list_get_printer(TALLOC_CTX *mem_ctx,
 				  const char *name,
 				  const char **comment,
+				  const char **location,
 				  time_t *last_refresh);
 
 /**
@@ -52,6 +55,8 @@
  *
  * @param[in]  comment  The comment to store in the db.
  *
+ * @param[in]  location  The location to store in the db.
+ *
  * @param[in]  last_refresh The last refresh time of the printer to store in
  *                          the db.
  *
@@ -61,6 +66,7 @@
 NTSTATUS printer_list_set_printer(TALLOC_CTX *mem_ctx,
 				  const char *name,
 				  const char *comment,
+				  const char *location,
 				  time_t last_refresh);
 
 /**
@@ -94,6 +100,6 @@
  */
 NTSTATUS printer_list_clean_old(void);
 
-NTSTATUS printer_list_run_fn(void (*fn)(const char *, const char *, void *),
+NTSTATUS printer_list_run_fn(void (*fn)(const char *, const char *, const char *, void *),
 			     void *private_data);
 #endif /* _PRINTER_LIST_H_ */

Modified: branches/samba/experimental/source3/printing/printing.c
===================================================================
--- branches/samba/experimental/source3/printing/printing.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/printing/printing.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -32,6 +32,7 @@
 #include "smbd/smbd.h"
 #include "auth.h"
 #include "messages.h"
+#include "util_tdb.h"
 
 extern struct current_user current_user;
 extern userdom_struct current_user_info;

Modified: branches/samba/experimental/source3/printing/printing_db.c
===================================================================
--- branches/samba/experimental/source3/printing/printing_db.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/printing/printing_db.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -22,6 +22,7 @@
 #include "includes.h"
 #include "system/filesys.h"
 #include "printing.h"
+#include "util_tdb.h"
 
 static struct tdb_print_db *print_db_head;
 
@@ -159,7 +160,7 @@
  messages. data needs freeing on exit.
 ****************************************************************************/
 
-TDB_DATA get_printer_notify_pid_list(TDB_CONTEXT *tdb, const char *printer_name, bool cleanlist)
+struct TDB_DATA get_printer_notify_pid_list(struct tdb_context *tdb, const char *printer_name, bool cleanlist)
 {
 	TDB_DATA data;
 	size_t i;

Modified: branches/samba/experimental/source3/printing/printspoolss.c
===================================================================
--- branches/samba/experimental/source3/printing/printspoolss.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/printing/printspoolss.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -22,7 +22,6 @@
 #include "rpc_client/rpc_client.h"
 #include "../librpc/gen_ndr/ndr_spoolss_c.h"
 #include "rpc_server/rpc_ncacn_np.h"
-#include "smbd/smbd.h"
 #include "smbd/globals.h"
 #include "../libcli/security/security.h"
 

Modified: branches/samba/experimental/source3/printing/spoolssd.c
===================================================================
--- branches/samba/experimental/source3/printing/spoolssd.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/printing/spoolssd.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -19,15 +19,16 @@
 #include "includes.h"
 #include "serverid.h"
 #include "smbd/smbd.h"
-#include "locking/proto.h"
 
 #include "messages.h"
 #include "include/printing.h"
 #include "printing/nt_printing_migrate.h"
+#include "ntdomain.h"
 #include "librpc/gen_ndr/srv_winreg.h"
 #include "librpc/gen_ndr/srv_spoolss.h"
 #include "rpc_server/rpc_server.h"
 #include "rpc_server/rpc_ep_setup.h"
+#include "rpc_server/spoolss/srv_spoolss_nt.h"
 
 #define SPOOLSS_PIPE_NAME "spoolss"
 #define DAEMON_NAME "spoolssd"

Modified: branches/samba/experimental/source3/printing/tests/vlp.c
===================================================================
--- branches/samba/experimental/source3/printing/tests/vlp.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/printing/tests/vlp.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -23,6 +23,7 @@
 #include "system/passwd.h"
 #include "system/filesys.h"
 #include "printing.h"
+#include "util_tdb.h"
 
 #ifdef malloc
 #undef malloc

Modified: branches/samba/experimental/source3/registry/reg_backend_db.c
===================================================================
--- branches/samba/experimental/source3/registry/reg_backend_db.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/registry/reg_backend_db.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -28,6 +28,7 @@
 #include "reg_backend_db.h"
 #include "reg_objects.h"
 #include "nt_printing.h"
+#include "util_tdb.h"
 #include "dbwrap.h"
 
 #undef DBGC_CLASS
@@ -47,6 +48,8 @@
 static bool regdb_store_values_internal(struct db_context *db, const char *key,
 					struct regval_ctr *values);
 
+static NTSTATUS create_sorted_subkeys(const char *key);
+
 /* List the deepest path into the registry.  All part components will be created.*/
 
 /* If you want to have a part of the path controlled by the tdb and part by
@@ -831,23 +834,10 @@
 	W_ERROR_NOT_OK_GOTO_DONE(werr);
 
 	/*
-	 * Delete a sorted subkey cache for regdb_key_exists, will be
-	 * recreated automatically
+	 * recreate the sorted subkey cache for regdb_key_exists()
 	 */
-	keyname = talloc_asprintf(ctx, "%s\\%s", REG_SORTED_SUBKEYS_PREFIX,
-				  keyname);
-	if (keyname == NULL) {
-		werr = WERR_NOMEM;
-		goto done;
-	}
+	werr = ntstatus_to_werror(create_sorted_subkeys(keyname));
 
-	werr = ntstatus_to_werror(dbwrap_delete_bystring(db, keyname));
-
-	/* don't treat WERR_NOT_FOUND as an error here */
-	if (W_ERROR_EQUAL(werr, WERR_NOT_FOUND)) {
-		werr = WERR_OK;
-	}
-
 done:
 	TALLOC_FREE(ctx);
 	SAFE_FREE(buffer);
@@ -1407,7 +1397,8 @@
 	return status;
 }
 
-static bool create_sorted_subkeys(const char *key, const char *sorted_keyname)
+static NTSTATUS create_sorted_subkeys_internal(const char *key,
+					       const char *sorted_keyname)
 {
 	NTSTATUS status;
 	struct create_sorted_subkeys_context sorted_ctx;
@@ -1419,9 +1410,28 @@
 				 create_sorted_subkeys_action,
 				 &sorted_ctx);
 
-	return NT_STATUS_IS_OK(status);
+	return status;
 }
 
+static NTSTATUS create_sorted_subkeys(const char *key)
+{
+	char *sorted_subkeys_keyname;
+	NTSTATUS status;
+
+	sorted_subkeys_keyname = talloc_asprintf(talloc_tos(), "%s\\%s",
+						 REG_SORTED_SUBKEYS_PREFIX,
+						 key);
+	if (sorted_subkeys_keyname == NULL) {
+		status = NT_STATUS_NO_MEMORY;
+		goto done;
+	}
+
+	status = create_sorted_subkeys_internal(key, sorted_subkeys_keyname);
+
+done:
+	return status;
+}
+
 struct scan_subkey_state {
 	char *name;
 	bool scanned;
@@ -1499,13 +1509,21 @@
 	if (state.scanned) {
 		result = state.found;
 	} else {
+		NTSTATUS status;
+
 		res = db->transaction_start(db);
 		if (res != 0) {
-			DEBUG(0, ("error starting transacion\n"));
+			DEBUG(0, ("error starting transaction\n"));
 			goto fail;
 		}
 
-		if (!create_sorted_subkeys(path, key)) {
+		DEBUG(2, (__location__ " WARNING: recreating the sorted "
+			  "subkeys cache for key '%s' from scan_parent_subkeys "
+			  "this should not happen (too frequently)...\n",
+			  path));
+
+		status = create_sorted_subkeys_internal(path, key);
+		if (!NT_STATUS_IS_OK(status)) {
 			res = db->transaction_cancel(db);
 			if (res != 0) {
 				smb_panic("Failed to cancel transaction.");

Modified: branches/samba/experimental/source3/registry/reg_objects.c
===================================================================
--- branches/samba/experimental/source3/registry/reg_objects.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/registry/reg_objects.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -23,6 +23,7 @@
 #include "includes.h"
 #include "registry.h"
 #include "reg_objects.h"
+#include "util_tdb.h"
 #include "dbwrap.h"
 #include "../libcli/registry/util_reg.h"
 

Modified: branches/samba/experimental/source3/registry/reg_perfcount.c
===================================================================
--- branches/samba/experimental/source3/registry/reg_perfcount.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/registry/reg_perfcount.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -25,6 +25,7 @@
 #include "registry.h"
 #include "reg_perfcount.h"
 #include "../libcli/registry/util_reg.h"
+#include "util_tdb.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_REGISTRY

Modified: branches/samba/experimental/source3/rpc_client/cli_pipe.c
===================================================================
--- branches/samba/experimental/source3/rpc_client/cli_pipe.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/rpc_client/cli_pipe.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -19,12 +19,12 @@
  */
 
 #include "includes.h"
+#include "../lib/util/tevent_ntstatus.h"
 #include "librpc/gen_ndr/ndr_epmapper_c.h"
 #include "../librpc/gen_ndr/ndr_schannel.h"
 #include "../librpc/gen_ndr/ndr_dssetup.h"
 #include "../libcli/auth/schannel.h"
 #include "../libcli/auth/spnego.h"
-#include "smb_krb5.h"
 #include "../libcli/auth/ntlmssp.h"
 #include "ntlmssp_wrap.h"
 #include "librpc/gen_ndr/ndr_dcerpc.h"
@@ -33,7 +33,7 @@
 #include "librpc/crypto/spnego.h"
 #include "rpc_dce.h"
 #include "cli_pipe.h"
-#include "ntdomain.h"
+#include "client.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_RPC_CLI

Modified: branches/samba/experimental/source3/rpc_client/cli_pipe.h
===================================================================
--- branches/samba/experimental/source3/rpc_client/cli_pipe.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/rpc_client/cli_pipe.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -25,6 +25,8 @@
 
 #include "rpc_client/rpc_client.h"
 
+/* The following definitions come from rpc_client/cli_pipe.c  */
+
 struct tevent_req *rpc_api_pipe_req_send(TALLOC_CTX *mem_ctx,
 					 struct event_context *ev,
 					 struct rpc_pipe_client *cli,
@@ -148,6 +150,13 @@
 			     struct rpc_pipe_client *cli,
 			     DATA_BLOB *session_key);
 
+/* The following definitions come from rpc_client/cli_pipe_schannel.c  */
+
+NTSTATUS get_schannel_session_key(struct cli_state *cli,
+				  const char *domain,
+				  uint32 *pneg_flags,
+				  struct rpc_pipe_client **presult);
+
 #endif /* _CLI_PIPE_H */
 
 /* vim: set ts=8 sw=8 noet cindent ft=c.doxygen: */

Modified: branches/samba/experimental/source3/rpc_client/cli_pipe_schannel.c
===================================================================
--- branches/samba/experimental/source3/rpc_client/cli_pipe_schannel.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/rpc_client/cli_pipe_schannel.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -26,6 +26,7 @@
 #include "librpc/gen_ndr/ndr_dcerpc.h"
 #include "librpc/rpc/dcerpc.h"
 #include "passdb.h"
+#include "client.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_RPC_CLI

Modified: branches/samba/experimental/source3/rpc_client/cli_spoolss.c
===================================================================
--- branches/samba/experimental/source3/rpc_client/cli_spoolss.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/rpc_client/cli_spoolss.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -26,7 +26,6 @@
 #include "rpc_client/rpc_client.h"
 #include "../librpc/gen_ndr/ndr_spoolss_c.h"
 #include "rpc_client/cli_spoolss.h"
-#include "ntdomain.h"
 
 /**********************************************************************
  convencience wrapper around rpccli_spoolss_OpenPrinterEx

Modified: branches/samba/experimental/source3/rpc_client/cli_winreg_int.c
===================================================================
--- branches/samba/experimental/source3/rpc_client/cli_winreg_int.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/rpc_client/cli_winreg_int.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -21,7 +21,6 @@
 
 #include "includes.h"
 #include "include/registry.h"
-#include "utils/net_registry_util.h"
 #include "librpc/gen_ndr/ndr_winreg_c.h"
 #include "rpc_client/cli_winreg_int.h"
 #include "rpc_server/rpc_ncacn_np.h"

Modified: branches/samba/experimental/source3/rpc_client/cli_winreg_int.h
===================================================================
--- branches/samba/experimental/source3/rpc_client/cli_winreg_int.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/rpc_client/cli_winreg_int.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -22,7 +22,9 @@
 #ifndef CLI_WINREG_INT_H
 #define CLI_WINREG_INT_H
 
+struct dcerpc_binding_handle;
 struct auth_serversupplied_info;
+struct dcerpc_binding_handle;
 
 /**
  * @brief Connect to the interal winreg server and open the given key.

Modified: branches/samba/experimental/source3/rpc_client/rpc_transport_np.c
===================================================================
--- branches/samba/experimental/source3/rpc_client/rpc_transport_np.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/rpc_client/rpc_transport_np.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -18,6 +18,7 @@
  */
 
 #include "includes.h"
+#include "../lib/util/tevent_ntstatus.h"
 #include "rpc_client/rpc_transport.h"
 #include "libsmb/cli_np_tstream.h"
 

Modified: branches/samba/experimental/source3/rpc_client/rpc_transport_sock.c
===================================================================
--- branches/samba/experimental/source3/rpc_client/rpc_transport_sock.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/rpc_client/rpc_transport_sock.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -18,8 +18,8 @@
  */
 
 #include "includes.h"
+#include "../lib/tsocket/tsocket.h"
 #include "rpc_client/rpc_transport.h"
-#include "../lib/async_req/async_sock.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_RPC_CLI

Modified: branches/samba/experimental/source3/rpc_client/rpc_transport_tstream.c
===================================================================
--- branches/samba/experimental/source3/rpc_client/rpc_transport_tstream.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/rpc_client/rpc_transport_tstream.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -18,6 +18,7 @@
  */
 
 #include "includes.h"
+#include "../lib/util/tevent_ntstatus.h"
 #include "rpc_client/rpc_transport.h"
 #include "lib/tsocket/tsocket.h"
 #include "libsmb/cli_np_tstream.h"

Modified: branches/samba/experimental/source3/rpc_server/dcesrv_gssapi.c
===================================================================
--- branches/samba/experimental/source3/rpc_server/dcesrv_gssapi.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/rpc_server/dcesrv_gssapi.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -106,11 +106,8 @@
 {
 	TALLOC_CTX *tmp_ctx;
 	DATA_BLOB auth_data;
-	time_t tgs_authtime;
-	NTTIME tgs_authtime_nttime;
 	DATA_BLOB pac;
 	struct PAC_DATA *pac_data;
-	struct PAC_LOGON_NAME *logon_name = NULL;
 	struct PAC_LOGON_INFO *logon_info = NULL;
 	enum ndr_err_code ndr_err;
 	unsigned int i;
@@ -122,14 +119,13 @@
 	char *username;
 	struct passwd *pw;
 	NTSTATUS status;
-	bool bret;
 
 	tmp_ctx = talloc_new(mem_ctx);
 	if (!tmp_ctx) {
 		return NT_STATUS_NO_MEMORY;
 	}
 
-	status = gse_get_authz_data(gse_ctx, tmp_ctx, &auth_data);
+	status = gse_get_pac_blob(gse_ctx, tmp_ctx, &pac);
 	if (NT_STATUS_EQUAL(status, NT_STATUS_NOT_FOUND)) {
 		/* TODO: Fetch user by principal name ? */
 		status = NT_STATUS_ACCESS_DENIED;
@@ -139,24 +135,6 @@
 		goto done;
 	}
 
-	bret = unwrap_pac(tmp_ctx, &auth_data, &pac);
-	if (!bret) {
-		DEBUG(1, ("Failed to unwrap PAC\n"));
-		status = NT_STATUS_ACCESS_DENIED;
-		goto done;
-	}
-
-	status = gse_get_client_name(gse_ctx, tmp_ctx, &princ_name);
-	if (!NT_STATUS_IS_OK(status)) {
-		goto done;
-	}
-
-	status = gse_get_authtime(gse_ctx, &tgs_authtime);
-	if (!NT_STATUS_IS_OK(status)) {
-		goto done;
-	}
-	unix_to_nt_time(&tgs_authtime_nttime, tgs_authtime);
-
 	pac_data = talloc_zero(tmp_ctx, struct PAC_DATA);
 	if (!pac_data) {
 		status = NT_STATUS_NO_MEMORY;
@@ -182,9 +160,6 @@
 			}
 			logon_info = data_buf->info->logon_info.info;
 			break;
-		case PAC_TYPE_LOGON_NAME:
-			logon_name = &data_buf->info->logon_name;
-			break;
 		default:
 			break;
 		}
@@ -194,22 +169,7 @@
 		status = NT_STATUS_NOT_FOUND;
 		goto done;
 	}
-	if (!logon_name) {
-		DEBUG(1, ("Invalid PAC data, missing logon info!\n"));
-		status = NT_STATUS_NOT_FOUND;
-		goto done;
-	}
 
-	/* check time */
-	if (tgs_authtime_nttime != logon_name->logon_time) {
-		DEBUG(1, ("Logon time mismatch between ticket and PAC!\n"
-			  "PAC Time = %s | Ticket Time = %s\n",
-			  nt_time_string(tmp_ctx, logon_name->logon_time),
-			  nt_time_string(tmp_ctx, tgs_authtime_nttime)));
-		status = NT_STATUS_ACCESS_DENIED;
-		goto done;
-	}
-
 	/* TODO: Should we check princ_name against account_name in
 	 * logon_name ? Are they supposed to be identical, or can an
 	 * account_name be different from the UPN ? */

Modified: branches/samba/experimental/source3/rpc_server/dfs/srv_dfs_nt.c
===================================================================
--- branches/samba/experimental/source3/rpc_server/dfs/srv_dfs_nt.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/rpc_server/dfs/srv_dfs_nt.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -22,11 +22,11 @@
 /* This is the implementation of the dfs pipe. */
 
 #include "includes.h"
+#include "ntdomain.h"
 #include "../librpc/gen_ndr/srv_dfs.h"
 #include "msdfs.h"
 #include "smbd/smbd.h"
 #include "auth.h"
-#include "ntdomain.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_MSDFS

Modified: branches/samba/experimental/source3/rpc_server/dssetup/srv_dssetup_nt.c
===================================================================
--- branches/samba/experimental/source3/rpc_server/dssetup/srv_dssetup_nt.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/rpc_server/dssetup/srv_dssetup_nt.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -23,9 +23,9 @@
  */
 
 #include "includes.h"
+#include "ntdomain.h"
 #include "../librpc/gen_ndr/srv_dssetup.h"
 #include "secrets.h"
-#include "ntdomain.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_RPC_SRV

Modified: branches/samba/experimental/source3/rpc_server/echo/srv_echo_nt.c
===================================================================
--- branches/samba/experimental/source3/rpc_server/echo/srv_echo_nt.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/rpc_server/echo/srv_echo_nt.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -22,8 +22,8 @@
 /* This is the interface to the rpcecho pipe. */
 
 #include "includes.h"
+#include "ntdomain.h"
 #include "../librpc/gen_ndr/srv_echo.h"
-#include "ntdomain.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_RPC_SRV

Modified: branches/samba/experimental/source3/rpc_server/epmapper/srv_epmapper.c
===================================================================
--- branches/samba/experimental/source3/rpc_server/epmapper/srv_epmapper.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/rpc_server/epmapper/srv_epmapper.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -20,12 +20,11 @@
 */
 
 #include "includes.h"
+#include "ntdomain.h"
 #include "../libcli/security/security.h"
-#include "librpc/gen_ndr/ndr_epmapper.h"
 #include "librpc/gen_ndr/srv_epmapper.h"
 #include "srv_epmapper.h"
 #include "auth.h"
-#include "ntdomain.h"
 
 typedef uint32_t error_status_t;
 

Modified: branches/samba/experimental/source3/rpc_server/epmd.c
===================================================================
--- branches/samba/experimental/source3/rpc_server/epmd.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/rpc_server/epmd.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -22,6 +22,7 @@
 #include "includes.h"
 
 #include "serverid.h"
+#include "ntdomain.h"
 #include "../librpc/gen_ndr/srv_epmapper.h"
 #include "rpc_server/rpc_server.h"
 #include "rpc_server/epmapper/srv_epmapper.h"

Modified: branches/samba/experimental/source3/rpc_server/eventlog/srv_eventlog_nt.c
===================================================================
--- branches/samba/experimental/source3/rpc_server/eventlog/srv_eventlog_nt.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/rpc_server/eventlog/srv_eventlog_nt.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -21,16 +21,16 @@
  */
 
 #include "includes.h"
+#include "ntdomain.h"
 #include "../librpc/gen_ndr/srv_eventlog.h"
 #include "lib/eventlog/eventlog.h"
-#include "registry.h"
 #include "../libcli/security/security.h"
 #include "../librpc/gen_ndr/ndr_winreg_c.h"
 #include "rpc_client/cli_winreg_int.h"
 #include "rpc_client/cli_winreg.h"
 #include "smbd/smbd.h"
 #include "auth.h"
-#include "ntdomain.h"
+#include "util_tdb.h"
 
 #undef  DBGC_CLASS
 #define DBGC_CLASS DBGC_RPC_SRV

Modified: branches/samba/experimental/source3/rpc_server/initshutdown/srv_initshutdown_nt.c
===================================================================
--- branches/samba/experimental/source3/rpc_server/initshutdown/srv_initshutdown_nt.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/rpc_server/initshutdown/srv_initshutdown_nt.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -21,9 +21,9 @@
 /* Implementation of registry functions. */
 
 #include "includes.h"
+#include "ntdomain.h"
 #include "../librpc/gen_ndr/srv_initshutdown.h"
 #include "../librpc/gen_ndr/srv_winreg.h"
-#include "ntdomain.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_RPC_SRV

Modified: branches/samba/experimental/source3/rpc_server/lsa/srv_lsa_nt.c
===================================================================
--- branches/samba/experimental/source3/rpc_server/lsa/srv_lsa_nt.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/rpc_server/lsa/srv_lsa_nt.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -30,6 +30,7 @@
 /* This is the implementation of the lsa server code. */
 
 #include "includes.h"
+#include "ntdomain.h"
 #include "../librpc/gen_ndr/srv_lsa.h"
 #include "secrets.h"
 #include "../librpc/gen_ndr/netlogon.h"
@@ -43,7 +44,6 @@
 #include "../librpc/gen_ndr/ndr_security.h"
 #include "passdb.h"
 #include "auth.h"
-#include "ntdomain.h"
 #include "lib/privileges.h"
 #include "rpc_server/srv_access_check.h"
 

Modified: branches/samba/experimental/source3/rpc_server/netlogon/srv_netlog_nt.c
===================================================================
--- branches/samba/experimental/source3/rpc_server/netlogon/srv_netlog_nt.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/rpc_server/netlogon/srv_netlog_nt.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -25,10 +25,9 @@
 /* This is the implementation of the netlogon pipe. */
 
 #include "includes.h"
+#include "ntdomain.h"
 #include "../libcli/auth/schannel.h"
 #include "../librpc/gen_ndr/srv_netlogon.h"
-#include "../librpc/gen_ndr/srv_samr.h"
-#include "../librpc/gen_ndr/srv_lsa.h"
 #include "../librpc/gen_ndr/ndr_samr_c.h"
 #include "../librpc/gen_ndr/ndr_lsa_c.h"
 #include "rpc_client/cli_lsarpc.h"
@@ -45,7 +44,6 @@
 #include "passdb.h"
 #include "auth.h"
 #include "messages.h"
-#include "ntdomain.h"
 
 extern userdom_struct current_user_info;
 

Modified: branches/samba/experimental/source3/rpc_server/ntsvcs/srv_ntsvcs_nt.c
===================================================================
--- branches/samba/experimental/source3/rpc_server/ntsvcs/srv_ntsvcs_nt.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/rpc_server/ntsvcs/srv_ntsvcs_nt.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -20,10 +20,10 @@
  */
 
 #include "includes.h"
+#include "ntdomain.h"
 #include "../librpc/gen_ndr/srv_ntsvcs.h"
 #include "services/svc_winreg_glue.h"
 #include "../libcli/registry/util_reg.h"
-#include "ntdomain.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_RPC_SRV

Modified: branches/samba/experimental/source3/rpc_server/rpc_ep_setup.c
===================================================================
--- branches/samba/experimental/source3/rpc_server/rpc_ep_setup.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/rpc_server/rpc_ep_setup.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -20,6 +20,7 @@
  */
 
 #include "includes.h"
+#include "ntdomain.h"
 
 #include "../librpc/gen_ndr/ndr_epmapper_c.h"
 #include "../librpc/gen_ndr/srv_epmapper.h"
@@ -41,6 +42,8 @@
 #include "printing/nt_printing_migrate.h"
 #include "rpc_server/eventlog/srv_eventlog_reg.h"
 #include "rpc_server/svcctl/srv_svcctl_reg.h"
+#include "rpc_server/spoolss/srv_spoolss_nt.h"
+#include "rpc_server/svcctl/srv_svcctl_nt.h"
 
 #include "librpc/rpc/dcerpc_ep.h"
 

Modified: branches/samba/experimental/source3/rpc_server/rpc_ep_setup.h
===================================================================
--- branches/samba/experimental/source3/rpc_server/rpc_ep_setup.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/rpc_server/rpc_ep_setup.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -22,6 +22,8 @@
 #ifndef _SMBD_RPC_CALLBACKS_H
 #define _SMBD_RPC_CALLBACKS_H
 
+struct ndr_interface_table;
+
 /**
  * @brief Register an endpoint at the endpoint mapper.
  *

Modified: branches/samba/experimental/source3/rpc_server/rpc_handles.c
===================================================================
--- branches/samba/experimental/source3/rpc_server/rpc_handles.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/rpc_server/rpc_handles.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -24,6 +24,7 @@
 #include "../librpc/gen_ndr/ndr_samr.h"
 #include "auth.h"
 #include "ntdomain.h"
+#include "rpc_server/rpc_ncacn_np.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_RPC_SRV

Modified: branches/samba/experimental/source3/rpc_server/rpc_ncacn_np.c
===================================================================
--- branches/samba/experimental/source3/rpc_server/rpc_ncacn_np.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/rpc_server/rpc_ncacn_np.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -31,6 +31,8 @@
 #include "../auth/auth_sam_reply.h"
 #include "auth.h"
 #include "ntdomain.h"
+#include "../lib/tsocket/tsocket.h"
+#include "../lib/util/tevent_ntstatus.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_RPC_SRV
@@ -517,7 +519,8 @@
  * @brief Create a new RPC client context which uses a local transport.
  *
  * This creates a local transport. It is a shortcut to directly call the server
- * functions and avoid marschalling.
+ * functions and avoid marshalling.
+ * NOTE: this function should be used only by rpc_pipe_open_interface()
  *
  * @param[in]  mem_ctx  The memory context to use.
  *
@@ -534,19 +537,8 @@
  *
  * @return              NT_STATUS_OK on success, a corresponding NT status if an
  *                      error occured.
- *
- * @code
- *   struct rpc_pipe_client *winreg_pipe;
- *   NTSTATUS status;
- *
- *   status = rpc_pipe_open_internal(tmp_ctx,
- *                                   &ndr_table_winreg.syntax_id,
- *                                   p->session_info,
- *                                   client_id,
- *                                   &winreg_pipe);
- * @endcode
  */
-NTSTATUS rpc_pipe_open_internal(TALLOC_CTX *mem_ctx,
+static NTSTATUS rpc_pipe_open_internal(TALLOC_CTX *mem_ctx,
 				const struct ndr_syntax_id *abstract_syntax,
 				const struct auth_serversupplied_info *serversupplied_info,
 				struct client_address *client_id,
@@ -822,17 +814,36 @@
 }
 
 /**
- * @brief Create a new RPC client context which uses a local dispatch function.
+ * @brief Create a new RPC client context which uses a local dispatch function
+ *	  or a remote transport, depending on rpc_server configuration for the
+ *	  specific service.
  *
- * @param mem_ctx	The memory context on which thje pipe will ultimately
- *			be allocated
- * @param name		The pipe name to connect to.
- * @param session_info	Credentials to use for the connection.
- * @param pipe		[in|out] Checks if a pipe is connected, and connects it
- *				 if not
+ * @param[in]  mem_ctx  The memory context to use.
  *
- * @return              NT_STATUS_OK on success, a corresponding NT status if
- *			an error occured.
+ * @param[in]  abstract_syntax Normally the syntax_id of the autogenerated
+ *                             ndr_table_<name>.
+ *
+ * @param[in]  serversupplied_info The server supplied authentication function.
+ *
+ * @param[in]  client_id The client address information.
+ *
+ * @param[in]  msg_ctx  The messaging context to use.
+ *
+ * @param[out] presult  A pointer to store the connected rpc client pipe.
+ *
+ * @return              NT_STATUS_OK on success, a corresponding NT status if an
+ *                      error occured.
+ *
+ * @code
+ *   struct rpc_pipe_client *winreg_pipe;
+ *   NTSTATUS status;
+ *
+ *   status = rpc_pipe_open_interface(tmp_ctx,
+ *                                    &ndr_table_winreg.syntax_id,
+ *                                    p->session_info,
+ *                                    client_id,
+ *                                    &winreg_pipe);
+ * @endcode
  */
 
 NTSTATUS rpc_pipe_open_interface(TALLOC_CTX *mem_ctx,

Modified: branches/samba/experimental/source3/rpc_server/rpc_ncacn_np.h
===================================================================
--- branches/samba/experimental/source3/rpc_server/rpc_ncacn_np.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/rpc_server/rpc_ncacn_np.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -20,6 +20,10 @@
 #ifndef _RPC_NCACN_NP_H_
 #define _RPC_NCACN_NP_H_
 
+struct dcerpc_binding_handle;
+struct ndr_interface_table;
+struct tsocket_address;
+
 struct np_proxy_state {
 	uint16_t file_type;
 	uint16_t device_state;
@@ -45,12 +49,6 @@
 			       const struct auth_serversupplied_info *session_info,
 			       struct messaging_context *msg_ctx,
 			       struct dcerpc_binding_handle **binding_handle);
-NTSTATUS rpc_pipe_open_internal(TALLOC_CTX *mem_ctx,
-				const struct ndr_syntax_id *abstract_syntax,
-				const struct auth_serversupplied_info *serversupplied_info,
-				struct client_address *client_id,
-				struct messaging_context *msg_ctx,
-				struct rpc_pipe_client **presult);
 NTSTATUS rpc_pipe_open_interface(TALLOC_CTX *mem_ctx,
 				 const struct ndr_syntax_id *syntax,
 				 const struct auth_serversupplied_info *session_info,
@@ -58,4 +56,9 @@
 				 struct messaging_context *msg_ctx,
 				 struct rpc_pipe_client **cli_pipe);
 
+struct pipes_struct *get_first_internal_pipe(void);
+struct pipes_struct *get_next_internal_pipe(struct pipes_struct *p);
+bool check_open_pipes(void);
+int close_internal_rpc_pipe_hnd(struct pipes_struct *p);
+
 #endif /* _RPC_NCACN_NP_H_ */

Modified: branches/samba/experimental/source3/rpc_server/rpc_server.c
===================================================================
--- branches/samba/experimental/source3/rpc_server/rpc_server.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/rpc_server/rpc_server.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -18,6 +18,7 @@
 */
 
 #include "includes.h"
+#include "ntdomain.h"
 #include "rpc_server/rpc_server.h"
 #include "rpc_dce.h"
 #include "librpc/gen_ndr/netlogon.h"
@@ -26,7 +27,9 @@
 #include "libcli/named_pipe_auth/npa_tstream.h"
 #include "../auth/auth_sam_reply.h"
 #include "auth.h"
-#include "ntdomain.h"
+#include "rpc_server/rpc_ncacn_np.h"
+#include "rpc_server/srv_pipe_hnd.h"
+#include "rpc_server/srv_pipe.h"
 
 #define SERVER_TCP_LOW_PORT  1024
 #define SERVER_TCP_HIGH_PORT 1300

Modified: branches/samba/experimental/source3/rpc_server/rpc_server.h
===================================================================
--- branches/samba/experimental/source3/rpc_server/rpc_server.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/rpc_server/rpc_server.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -20,6 +20,8 @@
 #ifndef _RPC_SERVER_H_
 #define _RPC_SERVER_H_
 
+struct pipes_struct;
+
 typedef bool (*dcerpc_ncacn_disconnect_fn)(struct pipes_struct *p);
 
 void set_incoming_fault(struct pipes_struct *p);

Modified: branches/samba/experimental/source3/rpc_server/samr/srv_samr_nt.c
===================================================================
--- branches/samba/experimental/source3/rpc_server/samr/srv_samr_nt.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/rpc_server/samr/srv_samr_nt.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -33,8 +33,8 @@
 
 #include "includes.h"
 #include "system/passwd.h"
-#include "smbd/globals.h"
 #include "../libcli/auth/libcli_auth.h"
+#include "ntdomain.h"
 #include "../librpc/gen_ndr/srv_samr.h"
 #include "rpc_server/samr/srv_samr_util.h"
 #include "../lib/crypto/arcfour.h"
@@ -43,7 +43,6 @@
 #include "../libcli/security/security.h"
 #include "passdb.h"
 #include "auth.h"
-#include "ntdomain.h"
 #include "rpc_server/srv_access_check.h"
 
 #undef DBGC_CLASS

Modified: branches/samba/experimental/source3/rpc_server/spoolss/srv_spoolss_nt.c
===================================================================
--- branches/samba/experimental/source3/rpc_server/spoolss/srv_spoolss_nt.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/rpc_server/spoolss/srv_spoolss_nt.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -28,6 +28,7 @@
    up, all the errors returned are DOS errors, not NT status codes. */
 
 #include "includes.h"
+#include "ntdomain.h"
 #include "nt_printing.h"
 #include "srv_spoolss_util.h"
 #include "../librpc/gen_ndr/srv_spoolss.h"
@@ -48,7 +49,10 @@
 #include "smbd/smbd.h"
 #include "auth.h"
 #include "messages.h"
-#include "ntdomain.h"
+#include "rpc_server/spoolss/srv_spoolss_nt.h"
+#include "util_tdb.h"
+#include "libsmb/libsmb.h"
+#include "printing/printer_list.h"
 
 /* macros stolen from s4 spoolss server */
 #define SPOOLSS_BUFFER_UNION(fn,info,level) \
@@ -2876,7 +2880,21 @@
 				    struct spoolss_PrinterInfo2 *pinfo2,
 				    TALLOC_CTX *mem_ctx)
 {
-	SETUP_SPOOLSS_NOTIFY_DATA_STRING(data, pinfo2->location);
+	const char *loc = pinfo2->location;
+	NTSTATUS status;
+
+	status = printer_list_get_printer(mem_ctx,
+					  pinfo2->sharename,
+					  NULL,
+					  &loc,
+					  NULL);
+	if (NT_STATUS_IS_OK(status)) {
+		if (loc == NULL) {
+			loc = pinfo2->location;
+		}
+	}
+
+	SETUP_SPOOLSS_NOTIFY_DATA_STRING(data, loc);
 }
 
 /*******************************************************************
@@ -3404,7 +3422,6 @@
 	uint16_t field;
 
 	struct spoolss_Notify *current_data;
-	print_queue_struct *queue=NULL;
 
 	type = option_type->type;
 
@@ -3438,7 +3455,7 @@
 			   pinfo2->printername));
 
 		notify_info_data_table[j].fn(msg_ctx, snum, current_data,
-					     queue, pinfo2, mem_ctx);
+					     NULL, pinfo2, mem_ctx);
 
 		info->count++;
 	}
@@ -4009,8 +4026,24 @@
 	}
 	W_ERROR_HAVE_NO_MEMORY(r->comment);
 
-	r->location		= talloc_strdup(mem_ctx, info2->location);
+	r->location	= talloc_strdup(mem_ctx, info2->location);
+	if (info2->location[0] == '\0') {
+		const char *loc = NULL;
+		NTSTATUS nt_status;
+
+		nt_status = printer_list_get_printer(mem_ctx,
+						     info2->sharename,
+						     NULL,
+						     &loc,
+						     NULL);
+		if (NT_STATUS_IS_OK(nt_status)) {
+			if (loc != NULL) {
+				r->location = talloc_strdup(mem_ctx, loc);
+			}
+		}
+	}
 	W_ERROR_HAVE_NO_MEMORY(r->location);
+
 	r->sepfile		= talloc_strdup(mem_ctx, info2->sepfile);
 	W_ERROR_HAVE_NO_MEMORY(r->sepfile);
 	r->printprocessor	= talloc_strdup(mem_ctx, info2->printprocessor);
@@ -8011,12 +8044,12 @@
 	}
 
 	DEBUG(5,("Cleaning driver's information\n"));
-	err = clean_up_driver_struct(p->mem_ctx, p, r->in.info_ctr);
+	err = clean_up_driver_struct(p->mem_ctx, p->session_info, r->in.info_ctr);
 	if (!W_ERROR_IS_OK(err))
 		goto done;
 
 	DEBUG(5,("Moving driver to final destination\n"));
-	err = move_driver_to_download_area(p, r->in.info_ctr);
+	err = move_driver_to_download_area(p->session_info, r->in.info_ctr);
 	if (!W_ERROR_IS_OK(err)) {
 		goto done;
 	}

Copied: branches/samba/experimental/source3/rpc_server/spoolss/srv_spoolss_nt.h (from rev 3778, tags/samba/upstream_3.6.0~rc1/source3/rpc_server/spoolss/srv_spoolss_nt.h)
===================================================================
--- branches/samba/experimental/source3/rpc_server/spoolss/srv_spoolss_nt.h	                        (rev 0)
+++ branches/samba/experimental/source3/rpc_server/spoolss/srv_spoolss_nt.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -0,0 +1,40 @@
+/*
+ *  Unix SMB/CIFS implementation.
+ *  RPC Pipe client / server routines
+ *  Copyright (C) Andrew Tridgell              1992-2000,
+ *  Copyright (C) Luke Kenneth Casson Leighton 1996-2000,
+ *  Copyright (C) Jean François Micouleau      1998-2000,
+ *  Copyright (C) Jeremy Allison               2001-2002,
+ *  Copyright (C) Gerald Carter		       2000-2004,
+ *  Copyright (C) Tim Potter                   2001-2002.
+ *  Copyright (C) Guenther Deschner            2009-2010.
+ *  Copyright (C) Andreas Schneider            2010.
+ *
+ *  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/>.
+ */
+
+#ifndef _RPC_SERVER_SPOOLSS_SRV_SPOOLSS_NT_H_
+#define _RPC_SERVER_SPOOLSS_SRV_SPOOLSS_NT_H_
+
+/* The following definitions come from rpc_server/srv_spoolss_nt.c  */
+void srv_spoolss_cleanup(void);
+
+void do_drv_upgrade_printer(struct messaging_context *msg,
+			    void *private_data,
+			    uint32_t msg_type,
+			    struct server_id server_id,
+			    DATA_BLOB *data);
+void update_monitored_printq_cache(struct messaging_context *msg_ctx);
+
+#endif /* _RPC_SERVER_SPOOLSS_SRV_SPOOLSS_NT_H_ */

Modified: branches/samba/experimental/source3/rpc_server/spoolss/srv_spoolss_util.c
===================================================================
--- branches/samba/experimental/source3/rpc_server/spoolss/srv_spoolss_util.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/rpc_server/spoolss/srv_spoolss_util.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -23,7 +23,6 @@
 #include "nt_printing.h"
 #include "srv_spoolss_util.h"
 #include "../librpc/gen_ndr/ndr_spoolss.h"
-#include "../librpc/gen_ndr/srv_winreg.h"
 #include "../librpc/gen_ndr/ndr_winreg_c.h"
 #include "../librpc/gen_ndr/ndr_security.h"
 #include "secrets.h"

Modified: branches/samba/experimental/source3/rpc_server/srv_pipe.c
===================================================================
--- branches/samba/experimental/source3/rpc_server/srv_pipe.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/rpc_server/srv_pipe.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -41,6 +41,7 @@
 #include "smbd/smbd.h"
 #include "auth.h"
 #include "ntdomain.h"
+#include "rpc_server/srv_pipe.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_RPC_SRV
@@ -1559,7 +1560,7 @@
 	    ((p->auth.auth_type == DCERPC_AUTH_TYPE_NTLMSSP) ||
 	     (p->auth.auth_type == DCERPC_AUTH_TYPE_KRB5) ||
 	     (p->auth.auth_type == DCERPC_AUTH_TYPE_SPNEGO))) {
-		if(!become_authenticated_pipe_user(p)) {
+		if(!become_authenticated_pipe_user(p->session_info)) {
 			data_blob_free(&p->out_data.rdata);
 			return False;
 		}

Copied: branches/samba/experimental/source3/rpc_server/srv_pipe.h (from rev 3778, tags/samba/upstream_3.6.0~rc1/source3/rpc_server/srv_pipe.h)
===================================================================
--- branches/samba/experimental/source3/rpc_server/srv_pipe.h	                        (rev 0)
+++ branches/samba/experimental/source3/rpc_server/srv_pipe.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -0,0 +1,33 @@
+/*
+ *  Unix SMB/CIFS implementation.
+ *  RPC Pipe client / server routines
+ *  Almost completely rewritten by (C) Jeremy Allison 2005 - 2010
+ *
+ *  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/>.
+ */
+
+#ifndef _RPC_SERVER_SRV_PIPE_H_
+#define _RPC_SERVER_SRV_PIPE_H_
+
+struct ncacn_packet;
+struct pipes_struct;
+
+/* The following definitions come from rpc_server/srv_pipe.c  */
+
+bool create_next_pdu(struct pipes_struct *p);
+bool api_pipe_bind_auth3(struct pipes_struct *p, struct ncacn_packet *pkt);
+bool setup_fault_pdu(struct pipes_struct *p, NTSTATUS status);
+bool is_known_pipename(const char *cli_filename, struct ndr_syntax_id *syntax);
+
+#endif /* _RPC_SERVER_SRV_PIPE_H_ */

Modified: branches/samba/experimental/source3/rpc_server/srv_pipe_hnd.c
===================================================================
--- branches/samba/experimental/source3/rpc_server/srv_pipe_hnd.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/rpc_server/srv_pipe_hnd.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -20,15 +20,15 @@
  */
 
 #include "includes.h"
-#include "../librpc/gen_ndr/srv_spoolss.h"
-#include "librpc/gen_ndr/ndr_named_pipe_auth.h"
-#include "../libcli/named_pipe_auth/npa_tstream.h"
 #include "rpc_server.h"
-#include "smbd/globals.h"
 #include "fake_file.h"
 #include "rpc_dce.h"
+#include "ntdomain.h"
 #include "rpc_server/rpc_ncacn_np.h"
-#include "ntdomain.h"
+#include "rpc_server/srv_pipe_hnd.h"
+#include "rpc_server/srv_pipe.h"
+#include "../lib/tsocket/tsocket.h"
+#include "../lib/util/tevent_ntstatus.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_RPC_SRV

Copied: branches/samba/experimental/source3/rpc_server/srv_pipe_hnd.h (from rev 3778, tags/samba/upstream_3.6.0~rc1/source3/rpc_server/srv_pipe_hnd.h)
===================================================================
--- branches/samba/experimental/source3/rpc_server/srv_pipe_hnd.h	                        (rev 0)
+++ branches/samba/experimental/source3/rpc_server/srv_pipe_hnd.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -0,0 +1,51 @@
+/*
+ *  Unix SMB/CIFS implementation.
+ *  RPC Pipe client / server routines
+ *  Copyright (C) Andrew Tridgell              1992-1998,
+ *  Largely re-written : 2005
+ *  Copyright (C) Jeremy Allison		1998 - 2005
+ *
+ *  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/>.
+ */
+
+#ifndef _RPC_SERVER_SRV_PIPE_HND_H_
+#define _RPC_SERVER_SRV_PIPE_HND_H_
+
+struct tsocket_address;
+struct pipes_struct;
+
+/* The following definitions come from rpc_server/srv_pipe_hnd.c  */
+
+bool fsp_is_np(struct files_struct *fsp);
+NTSTATUS np_open(TALLOC_CTX *mem_ctx, const char *name,
+		 const struct tsocket_address *local_address,
+		 const struct tsocket_address *remote_address,
+		 struct client_address *client_id,
+		 struct auth_serversupplied_info *session_info,
+		 struct messaging_context *msg_ctx,
+		 struct fake_file_handle **phandle);
+bool np_read_in_progress(struct fake_file_handle *handle);
+struct tevent_req *np_write_send(TALLOC_CTX *mem_ctx, struct event_context *ev,
+				 struct fake_file_handle *handle,
+				 const uint8_t *data, size_t len);
+NTSTATUS np_write_recv(struct tevent_req *req, ssize_t *pnwritten);
+struct tevent_req *np_read_send(TALLOC_CTX *mem_ctx, struct event_context *ev,
+				struct fake_file_handle *handle,
+				uint8_t *data, size_t len);
+NTSTATUS np_read_recv(struct tevent_req *req, ssize_t *nread,
+		      bool *is_data_outstanding);
+
+ssize_t process_incoming_data(struct pipes_struct *p, char *data, size_t n);
+
+#endif /* _RPC_SERVER_SRV_PIPE_HND_H_ */

Modified: branches/samba/experimental/source3/rpc_server/srv_pipe_register.c
===================================================================
--- branches/samba/experimental/source3/rpc_server/srv_pipe_register.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/rpc_server/srv_pipe_register.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -20,6 +20,7 @@
 #include "includes.h"
 #include "librpc/rpc/dcerpc.h"
 #include "srv_pipe_internal.h"
+#include "rpc_server/srv_pipe_register.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_RPC_SRV
@@ -197,7 +198,7 @@
 	rpc_entry = SMB_REALLOC_ARRAY_KEEP_OLD_ON_ERROR(rpc_lookup, struct rpc_table, rpc_lookup_size);
 	if (NULL == rpc_entry) {
 		rpc_lookup_size--;
-		DEBUG(0, ("rpc_pipe_register_commands: memory allocation failed\n"));
+		DEBUG(0, ("rpc_srv_register: memory allocation failed\n"));
 		return NT_STATUS_NO_MEMORY;
 	} else {
 		rpc_lookup = rpc_entry;

Copied: branches/samba/experimental/source3/rpc_server/srv_pipe_register.h (from rev 3778, tags/samba/upstream_3.6.0~rc1/source3/rpc_server/srv_pipe_register.h)
===================================================================
--- branches/samba/experimental/source3/rpc_server/srv_pipe_register.h	                        (rev 0)
+++ branches/samba/experimental/source3/rpc_server/srv_pipe_register.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -0,0 +1,39 @@
+/*
+ *  Unix SMB/CIFS implementation.
+ *  RPC Pipe client / server routines
+ *  Almost completely rewritten by (C) Jeremy Allison 2005 - 2010
+ *
+ *  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/>.
+ */
+
+#ifndef _RPC_SERVER_SRV_PIPE_REGISTER_H_
+#define _RPC_SERVER_SRV_PIPE_REGISTER_H_
+
+struct rpc_srv_callbacks {
+	bool (*init)(void *private_data);
+	bool (*shutdown)(void *private_data);
+	void *private_data;
+};
+
+/* The following definitions come from rpc_server/srv_rpc_register.c  */
+
+NTSTATUS rpc_srv_register(int version, const char *clnt,
+			  const char *srv,
+			  const struct ndr_interface_table *iface,
+			  const struct api_struct *cmds, int size,
+			  const struct rpc_srv_callbacks *rpc_srv_cb);
+
+NTSTATUS rpc_srv_unregister(const struct ndr_interface_table *iface);
+
+#endif /* _RPC_SERVER_SRV_PIPE_REGISTER_H_ */

Modified: branches/samba/experimental/source3/rpc_server/srvsvc/srv_srvsvc_nt.c
===================================================================
--- branches/samba/experimental/source3/rpc_server/srvsvc/srv_srvsvc_nt.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/rpc_server/srvsvc/srv_srvsvc_nt.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -25,6 +25,7 @@
 
 #include "includes.h"
 #include "system/passwd.h"
+#include "ntdomain.h"
 #include "../librpc/gen_ndr/srv_srvsvc.h"
 #include "../libcli/security/security.h"
 #include "../librpc/gen_ndr/ndr_security.h"
@@ -34,7 +35,6 @@
 #include "smbd/smbd.h"
 #include "auth.h"
 #include "messages.h"
-#include "ntdomain.h"
 
 extern const struct generic_mapping file_generic_mapping;
 
@@ -1513,40 +1513,6 @@
 }
 
 /*******************************************************************
- Check a given DOS pathname is valid for a share.
-********************************************************************/
-
-char *valid_share_pathname(TALLOC_CTX *ctx, const char *dos_pathname)
-{
-	char *ptr = NULL;
-
-	if (!dos_pathname) {
-		return NULL;
-	}
-
-	ptr = talloc_strdup(ctx, dos_pathname);
-	if (!ptr) {
-		return NULL;
-	}
-	/* Convert any '\' paths to '/' */
-	unix_format(ptr);
-	ptr = unix_clean_name(ctx, ptr);
-	if (!ptr) {
-		return NULL;
-	}
-
-	/* NT is braindead - it wants a C: prefix to a pathname ! So strip it. */
-	if (strlen(ptr) > 2 && ptr[1] == ':' && ptr[0] != '/')
-		ptr += 2;
-
-	/* Only absolute paths allowed. */
-	if (*ptr != '/')
-		return NULL;
-
-	return ptr;
-}
-
-/*******************************************************************
  _srvsvc_NetShareSetInfo. Modify share details.
 ********************************************************************/
 

Modified: branches/samba/experimental/source3/rpc_server/svcctl/srv_svcctl_nt.c
===================================================================
--- branches/samba/experimental/source3/rpc_server/svcctl/srv_svcctl_nt.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/rpc_server/svcctl/srv_svcctl_nt.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -23,13 +23,14 @@
  */
 
 #include "includes.h"
+#include "ntdomain.h"
 #include "../librpc/gen_ndr/srv_svcctl.h"
 #include "../libcli/security/security.h"
 #include "../librpc/gen_ndr/ndr_security.h"
 #include "services/services.h"
 #include "services/svc_winreg_glue.h"
 #include "auth.h"
-#include "ntdomain.h"
+#include "rpc_server/svcctl/srv_svcctl_nt.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_RPC_SRV

Copied: branches/samba/experimental/source3/rpc_server/svcctl/srv_svcctl_nt.h (from rev 3778, tags/samba/upstream_3.6.0~rc1/source3/rpc_server/svcctl/srv_svcctl_nt.h)
===================================================================
--- branches/samba/experimental/source3/rpc_server/svcctl/srv_svcctl_nt.h	                        (rev 0)
+++ branches/samba/experimental/source3/rpc_server/svcctl/srv_svcctl_nt.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -0,0 +1,33 @@
+/*
+ *  Unix SMB/CIFS implementation.
+ *  RPC Pipe client / server routines
+ *
+ *  Copyright (C) Marcin Krzysztof Porwit           2005.
+ *
+ *  Largely Rewritten (Again) by:
+ *  Copyright (C) Gerald (Jerry) Carter             2005.
+ *  Copyright (C) Guenther Deschner                 2008,2009.
+ *
+ *  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/>.
+ */
+
+#ifndef _RPC_SERVER_SVCCTL_SRV_SVCCTL_NT_H_
+#define _RPC_SERVER_SVCCTL_SRV_SVCCTL_NT_H_
+
+/* The following definitions come from rpc_server/srv_svcctl_nt.c  */
+
+bool init_service_op_table( void );
+bool shutdown_service_op_table(void);
+
+#endif /* _RPC_SERVER_SVCCTL_SRV_SVCCTL_NT_H_ */

Modified: branches/samba/experimental/source3/rpc_server/winreg/srv_winreg_nt.c
===================================================================
--- branches/samba/experimental/source3/rpc_server/winreg/srv_winreg_nt.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/rpc_server/winreg/srv_winreg_nt.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -21,6 +21,7 @@
 /* Implementation of registry functions. */
 
 #include "includes.h"
+#include "ntdomain.h"
 #include "../librpc/gen_ndr/srv_winreg.h"
 #include "registry.h"
 #include "registry/reg_api.h"
@@ -28,7 +29,6 @@
 #include "registry/reg_perfcount.h"
 #include "rpc_misc.h"
 #include "auth.h"
-#include "ntdomain.h"
 #include "lib/privileges.h"
 
 #undef DBGC_CLASS

Modified: branches/samba/experimental/source3/rpc_server/wkssvc/srv_wkssvc_nt.c
===================================================================
--- branches/samba/experimental/source3/rpc_server/wkssvc/srv_wkssvc_nt.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/rpc_server/wkssvc/srv_wkssvc_nt.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -23,6 +23,7 @@
 /* This is the implementation of the wks interface. */
 
 #include "includes.h"
+#include "ntdomain.h"
 #include "librpc/gen_ndr/libnet_join.h"
 #include "libnet/libnet_join.h"
 #include "../libcli/auth/libcli_auth.h"
@@ -31,7 +32,6 @@
 #include "session.h"
 #include "smbd/smbd.h"
 #include "auth.h"
-#include "ntdomain.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_RPC_SRV

Modified: branches/samba/experimental/source3/rpcclient/cmd_spoolss.c
===================================================================
--- branches/samba/experimental/source3/rpcclient/cmd_spoolss.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/rpcclient/cmd_spoolss.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -27,12 +27,12 @@
 #include "../librpc/gen_ndr/ndr_spoolss_c.h"
 #include "rpc_client/cli_spoolss.h"
 #include "rpc_client/init_spoolss.h"
-#include "registry.h"
 #include "registry/reg_objects.h"
 #include "nt_printing.h"
 #include "../libcli/security/display_sec.h"
 #include "../libcli/security/security_descriptor.h"
 #include "../libcli/registry/util_reg.h"
+#include "libsmb/libsmb.h"
 
 #define RPCCLIENT_PRINTERNAME(_printername, _cli, _arg) \
 { \

Modified: branches/samba/experimental/source3/rpcclient/rpcclient.c
===================================================================
--- branches/samba/experimental/source3/rpcclient/rpcclient.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/rpcclient/rpcclient.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -30,7 +30,7 @@
 #include "../libcli/smbreadline/smbreadline.h"
 #include "../libcli/security/security.h"
 #include "passdb.h"
-#include "ntdomain.h"
+#include "libsmb/libsmb.h"
 
 enum pipe_auth_type_spnego {
 	PIPE_AUTH_TYPE_SPNEGO_NONE = 0,

Modified: branches/samba/experimental/source3/smbd/aio.c
===================================================================
--- branches/samba/experimental/source3/smbd/aio.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/smbd/aio.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -21,6 +21,7 @@
 #include "includes.h"
 #include "smbd/smbd.h"
 #include "smbd/globals.h"
+#include "../lib/util/tevent_ntstatus.h"
 
 #if defined(WITH_AIO)
 

Modified: branches/samba/experimental/source3/smbd/conn.c
===================================================================
--- branches/samba/experimental/source3/smbd/conn.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/smbd/conn.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -22,6 +22,7 @@
 #include "includes.h"
 #include "smbd/smbd.h"
 #include "smbd/globals.h"
+#include "rpc_server/rpc_ncacn_np.h"
 
 /* The connections bitmap is expanded in increments of BITMAP_BLOCK_SZ. The
  * maximum size of the bitmap is the largest positive integer, but you will hit

Modified: branches/samba/experimental/source3/smbd/dir.c
===================================================================
--- branches/samba/experimental/source3/smbd/dir.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/smbd/dir.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -92,7 +92,7 @@
 		return False;
 	}
 
-	if ((mode & aDIR) != 0) {
+	if ((mode & FILE_ATTRIBUTE_DIRECTORY) != 0) {
 		size = 0;
 	}
 
@@ -872,15 +872,15 @@
 	uint32 mask;
 
 	/* Check the "may have" search bits. */
-	if (((mode & ~dirtype) & (aHIDDEN | aSYSTEM | aDIR)) != 0)
+	if (((mode & ~dirtype) & (FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_DIRECTORY)) != 0)
 		return False;
 
 	/* Check the "must have" bits, which are the may have bits shifted eight */
 	/* If must have bit is set, the file/dir can not be returned in search unless the matching
 		file attribute is set */
-	mask = ((dirtype >> 8) & (aDIR|aARCH|aRONLY|aHIDDEN|aSYSTEM)); /* & 0x37 */
+	mask = ((dirtype >> 8) & (FILE_ATTRIBUTE_DIRECTORY|FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_SYSTEM)); /* & 0x37 */
 	if(mask) {
-		if((mask & (mode & (aDIR|aARCH|aRONLY|aHIDDEN|aSYSTEM))) == mask)   /* check if matching attribute present */
+		if((mask & (mode & (FILE_ATTRIBUTE_DIRECTORY|FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_SYSTEM))) == mask)   /* check if matching attribute present */
 			return True;
 		else
 			return False;

Modified: branches/samba/experimental/source3/smbd/dosmode.c
===================================================================
--- branches/samba/experimental/source3/smbd/dosmode.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/smbd/dosmode.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -41,7 +41,7 @@
 #ifdef S_ISLNK
 #if LINKS_READ_ONLY
 	if (S_ISLNK(sbuf->st_mode) && S_ISDIR(sbuf->st_mode))
-		return aRONLY;
+		return FILE_ATTRIBUTE_READONLY;
 #endif
 #endif
 	return 0;
@@ -173,36 +173,36 @@
 	if (ro_opts == MAP_READONLY_YES) {
 		/* Original Samba method - map inverse of user "w" bit. */
 		if ((smb_fname->st.st_ex_mode & S_IWUSR) == 0) {
-			result |= aRONLY;
+			result |= FILE_ATTRIBUTE_READONLY;
 		}
 	} else if (ro_opts == MAP_READONLY_PERMISSIONS) {
 		/* Check actual permissions for read-only. */
 		if (!can_write_to_file(conn, smb_fname)) {
-			result |= aRONLY;
+			result |= FILE_ATTRIBUTE_READONLY;
 		}
 	} /* Else never set the readonly bit. */
 
 	if (MAP_ARCHIVE(conn) && ((smb_fname->st.st_ex_mode & S_IXUSR) != 0))
-		result |= aARCH;
+		result |= FILE_ATTRIBUTE_ARCHIVE;
 
 	if (MAP_SYSTEM(conn) && ((smb_fname->st.st_ex_mode & S_IXGRP) != 0))
-		result |= aSYSTEM;
+		result |= FILE_ATTRIBUTE_SYSTEM;
 
 	if (MAP_HIDDEN(conn) && ((smb_fname->st.st_ex_mode & S_IXOTH) != 0))
-		result |= aHIDDEN;   
+		result |= FILE_ATTRIBUTE_HIDDEN;
 
 	if (S_ISDIR(smb_fname->st.st_ex_mode))
-		result = aDIR | (result & aRONLY);
+		result = FILE_ATTRIBUTE_DIRECTORY | (result & FILE_ATTRIBUTE_READONLY);
 
 	result |= set_link_read_only_flag(&smb_fname->st);
 
 	DEBUG(8,("dos_mode_from_sbuf returning "));
 
-	if (result & aHIDDEN) DEBUG(8, ("h"));
-	if (result & aRONLY ) DEBUG(8, ("r"));
-	if (result & aSYSTEM) DEBUG(8, ("s"));
-	if (result & aDIR   ) DEBUG(8, ("d"));
-	if (result & aARCH  ) DEBUG(8, ("a"));
+	if (result & FILE_ATTRIBUTE_HIDDEN) DEBUG(8, ("h"));
+	if (result & FILE_ATTRIBUTE_READONLY ) DEBUG(8, ("r"));
+	if (result & FILE_ATTRIBUTE_SYSTEM) DEBUG(8, ("s"));
+	if (result & FILE_ATTRIBUTE_DIRECTORY   ) DEBUG(8, ("d"));
+	if (result & FILE_ATTRIBUTE_ARCHIVE  ) DEBUG(8, ("a"));
 
 	DEBUG(8,("\n"));
 	return result;
@@ -318,18 +318,18 @@
 	}
 
 	if (S_ISDIR(smb_fname->st.st_ex_mode)) {
-		dosattr |= aDIR;
+		dosattr |= FILE_ATTRIBUTE_DIRECTORY;
 	}
 	/* FILE_ATTRIBUTE_SPARSE is valid on get but not on set. */
 	*pattr = (uint32)(dosattr & (SAMBA_ATTRIBUTES_MASK|FILE_ATTRIBUTE_SPARSE));
 
 	DEBUG(8,("get_ea_dos_attribute returning (0x%x)", dosattr));
 
-	if (dosattr & aHIDDEN) DEBUG(8, ("h"));
-	if (dosattr & aRONLY ) DEBUG(8, ("r"));
-	if (dosattr & aSYSTEM) DEBUG(8, ("s"));
-	if (dosattr & aDIR   ) DEBUG(8, ("d"));
-	if (dosattr & aARCH  ) DEBUG(8, ("a"));
+	if (dosattr & FILE_ATTRIBUTE_HIDDEN) DEBUG(8, ("h"));
+	if (dosattr & FILE_ATTRIBUTE_READONLY ) DEBUG(8, ("r"));
+	if (dosattr & FILE_ATTRIBUTE_SYSTEM) DEBUG(8, ("s"));
+	if (dosattr & FILE_ATTRIBUTE_DIRECTORY   ) DEBUG(8, ("d"));
+	if (dosattr & FILE_ATTRIBUTE_ARCHIVE  ) DEBUG(8, ("a"));
 
 	DEBUG(8,("\n"));
 
@@ -465,7 +465,7 @@
 		/* Only . and .. are not hidden. */
 		if (p[0] == '.' && !((p[1] == '\0') ||
 				(p[1] == '.' && p[2] == '\0'))) {
-			result |= aHIDDEN;
+			result |= FILE_ATTRIBUTE_HIDDEN;
 		}
 	}
 
@@ -473,9 +473,9 @@
 
 	/* Optimization : Only call is_hidden_path if it's not already
 	   hidden. */
-	if (!(result & aHIDDEN) &&
+	if (!(result & FILE_ATTRIBUTE_HIDDEN) &&
 	    IS_HIDDEN_PATH(conn, smb_fname->base_name)) {
-		result |= aHIDDEN;
+		result |= FILE_ATTRIBUTE_HIDDEN;
 	}
 
 	if (result == 0) {
@@ -486,11 +486,11 @@
 
 	DEBUG(8,("dos_mode_msdfs returning "));
 
-	if (result & aHIDDEN) DEBUG(8, ("h"));
-	if (result & aRONLY ) DEBUG(8, ("r"));
-	if (result & aSYSTEM) DEBUG(8, ("s"));
-	if (result & aDIR   ) DEBUG(8, ("d"));
-	if (result & aARCH  ) DEBUG(8, ("a"));
+	if (result & FILE_ATTRIBUTE_HIDDEN) DEBUG(8, ("h"));
+	if (result & FILE_ATTRIBUTE_READONLY ) DEBUG(8, ("r"));
+	if (result & FILE_ATTRIBUTE_SYSTEM) DEBUG(8, ("s"));
+	if (result & FILE_ATTRIBUTE_DIRECTORY   ) DEBUG(8, ("d"));
+	if (result & FILE_ATTRIBUTE_ARCHIVE  ) DEBUG(8, ("a"));
 	if (result & FILE_ATTRIBUTE_SPARSE ) DEBUG(8, ("[sparse]"));
 
 	DEBUG(8,("\n"));
@@ -507,13 +507,13 @@
 {
 	uint32_t dos_stat_flags = 0;
 
-	if (dosmode & aARCH)
+	if (dosmode & FILE_ATTRIBUTE_ARCHIVE)
 		dos_stat_flags |= UF_DOS_ARCHIVE;
-	if (dosmode & aHIDDEN)
+	if (dosmode & FILE_ATTRIBUTE_HIDDEN)
 		dos_stat_flags |= UF_DOS_HIDDEN;
-	if (dosmode & aRONLY)
+	if (dosmode & FILE_ATTRIBUTE_READONLY)
 		dos_stat_flags |= UF_DOS_RO;
-	if (dosmode & aSYSTEM)
+	if (dosmode & FILE_ATTRIBUTE_SYSTEM)
 		dos_stat_flags |= UF_DOS_SYSTEM;
 	if (dosmode & FILE_ATTRIBUTE_NONINDEXED)
 		dos_stat_flags |= UF_DOS_NOINDEX;
@@ -540,19 +540,19 @@
 		  smb_fname_str_dbg(smb_fname)));
 
 	if (smb_fname->st.st_ex_flags & UF_DOS_ARCHIVE)
-		*dosmode |= aARCH;
+		*dosmode |= FILE_ATTRIBUTE_ARCHIVE;
 	if (smb_fname->st.st_ex_flags & UF_DOS_HIDDEN)
-		*dosmode |= aHIDDEN;
+		*dosmode |= FILE_ATTRIBUTE_HIDDEN;
 	if (smb_fname->st.st_ex_flags & UF_DOS_RO)
-		*dosmode |= aRONLY;
+		*dosmode |= FILE_ATTRIBUTE_READONLY;
 	if (smb_fname->st.st_ex_flags & UF_DOS_SYSTEM)
-		*dosmode |= aSYSTEM;
+		*dosmode |= FILE_ATTRIBUTE_SYSTEM;
 	if (smb_fname->st.st_ex_flags & UF_DOS_NOINDEX)
 		*dosmode |= FILE_ATTRIBUTE_NONINDEXED;
 	if (smb_fname->st.st_ex_flags & FILE_ATTRIBUTE_SPARSE)
 		*dosmode |= FILE_ATTRIBUTE_SPARSE;
 	if (S_ISDIR(smb_fname->st.st_ex_mode))
-		*dosmode |= aDIR;
+		*dosmode |= FILE_ATTRIBUTE_DIRECTORY;
 
 	*dosmode |= set_link_read_only_flag(&smb_fname->st);
 
@@ -637,7 +637,7 @@
 		/* Only . and .. are not hidden. */
 		if (p[0] == '.' && !((p[1] == '\0') ||
 				(p[1] == '.' && p[2] == '\0'))) {
-			result |= aHIDDEN;
+			result |= FILE_ATTRIBUTE_HIDDEN;
 		}
 	}
 
@@ -658,9 +658,9 @@
 
 	/* Optimization : Only call is_hidden_path if it's not already
 	   hidden. */
-	if (!(result & aHIDDEN) &&
+	if (!(result & FILE_ATTRIBUTE_HIDDEN) &&
 	    IS_HIDDEN_PATH(conn, smb_fname->base_name)) {
-		result |= aHIDDEN;
+		result |= FILE_ATTRIBUTE_HIDDEN;
 	}
 
 	if (result == 0) {
@@ -671,11 +671,11 @@
 
 	DEBUG(8,("dos_mode returning "));
 
-	if (result & aHIDDEN) DEBUG(8, ("h"));
-	if (result & aRONLY ) DEBUG(8, ("r"));
-	if (result & aSYSTEM) DEBUG(8, ("s"));
-	if (result & aDIR   ) DEBUG(8, ("d"));
-	if (result & aARCH  ) DEBUG(8, ("a"));
+	if (result & FILE_ATTRIBUTE_HIDDEN) DEBUG(8, ("h"));
+	if (result & FILE_ATTRIBUTE_READONLY ) DEBUG(8, ("r"));
+	if (result & FILE_ATTRIBUTE_SYSTEM) DEBUG(8, ("s"));
+	if (result & FILE_ATTRIBUTE_DIRECTORY   ) DEBUG(8, ("d"));
+	if (result & FILE_ATTRIBUTE_ARCHIVE  ) DEBUG(8, ("a"));
 	if (result & FILE_ATTRIBUTE_SPARSE ) DEBUG(8, ("[sparse]"));
 
 	DEBUG(8,("\n"));
@@ -712,9 +712,9 @@
 			   &smb_fname->st.st_ex_mode);
 
 	if (S_ISDIR(smb_fname->st.st_ex_mode))
-		dosmode |= aDIR;
+		dosmode |= FILE_ATTRIBUTE_DIRECTORY;
 	else
-		dosmode &= ~aDIR;
+		dosmode &= ~FILE_ATTRIBUTE_DIRECTORY;
 
 	new_create_timespec = smb_fname->st.st_ex_btime;
 

Modified: branches/samba/experimental/source3/smbd/fileio.c
===================================================================
--- branches/samba/experimental/source3/smbd/fileio.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/smbd/fileio.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -322,7 +322,7 @@
 				int dosmode = dos_mode(fsp->conn, fsp->fsp_name);
 				if (!IS_DOS_ARCHIVE(dosmode)) {
 					file_set_dosmode(fsp->conn, fsp->fsp_name,
-						 dosmode | aARCH, NULL, false);
+						 dosmode | FILE_ATTRIBUTE_ARCHIVE, NULL, false);
 				}
 			}
 

Modified: branches/samba/experimental/source3/smbd/files.c
===================================================================
--- branches/samba/experimental/source3/smbd/files.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/smbd/files.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -21,6 +21,7 @@
 #include "smbd/smbd.h"
 #include "smbd/globals.h"
 #include "libcli/security/security.h"
+#include "util_tdb.h"
 
 #define VALID_FNUM(fnum)   (((fnum) >= 0) && ((fnum) < real_max_open_files))
 

Modified: branches/samba/experimental/source3/smbd/globals.c
===================================================================
--- branches/samba/experimental/source3/smbd/globals.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/smbd/globals.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -22,6 +22,7 @@
 #include "smbd/globals.h"
 #include "memcache.h"
 #include "messages.h"
+#include <tdb.h>
 
 #if defined(WITH_AIO)
 struct aio_extra *aio_list_head = NULL;

Modified: branches/samba/experimental/source3/smbd/globals.h
===================================================================
--- branches/samba/experimental/source3/smbd/globals.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/smbd/globals.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -47,7 +47,8 @@
 extern const struct mangle_fns *mangle_fns;
 
 extern unsigned char *chartest;
-extern TDB_CONTEXT *tdb_mangled_cache;
+struct tdb_context;
+extern struct tdb_context *tdb_mangled_cache;
 
 /*
   this determines how many characters are used from the original filename

Modified: branches/samba/experimental/source3/smbd/ipc.c
===================================================================
--- branches/samba/experimental/source3/smbd/ipc.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/smbd/ipc.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -28,6 +28,7 @@
 #include "smbd/smbd.h"
 #include "smbd/globals.h"
 #include "smbprofile.h"
+#include "rpc_server/srv_pipe_hnd.h"
 
 #define NERR_notsupported 50
 

Modified: branches/samba/experimental/source3/smbd/lanman.c
===================================================================
--- branches/samba/experimental/source3/smbd/lanman.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/smbd/lanman.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -34,17 +34,15 @@
 #include "rpc_client/cli_spoolss.h"
 #include "rpc_client/init_spoolss.h"
 #include "../librpc/gen_ndr/ndr_srvsvc_c.h"
-#include "../librpc/gen_ndr/srv_samr.h"
-#include "../librpc/gen_ndr/srv_srvsvc.h"
 #include "../librpc/gen_ndr/rap.h"
 #include "../lib/util/binsearch.h"
 #include "../libcli/auth/libcli_auth.h"
 #include "rpc_client/init_lsa.h"
-#include "rpc_server/rpc_ncacn_np.h"
 #include "../libcli/security/security.h"
 #include "printing.h"
 #include "passdb/machine_sid.h"
 #include "auth.h"
+#include "rpc_server/rpc_ncacn_np.h"
 
 #ifdef CHECK_TYPES
 #undef CHECK_TYPES
@@ -2256,7 +2254,7 @@
 		return false;
 	}
 
-	status = rpc_pipe_open_internal(mem_ctx, &ndr_table_srvsvc.syntax_id,
+	status = rpc_pipe_open_interface(mem_ctx, &ndr_table_srvsvc.syntax_id,
 					conn->session_info,
 					&conn->sconn->client_id,
 					conn->sconn->msg_ctx,
@@ -2367,7 +2365,7 @@
 		return False;
 	}
 
-	status = rpc_pipe_open_internal(
+	status = rpc_pipe_open_interface(
 		talloc_tos(), &ndr_table_samr.syntax_id,
 		conn->session_info, &conn->sconn->client_id,
 		conn->sconn->msg_ctx, &samr_pipe);
@@ -2573,7 +2571,7 @@
 	p = *rdata;
 	endp = *rdata + *rdata_len;
 
-	status = rpc_pipe_open_internal(
+	status = rpc_pipe_open_interface(
 		talloc_tos(), &ndr_table_samr.syntax_id,
 		conn->session_info, &conn->sconn->client_id,
 		conn->sconn->msg_ctx, &samr_pipe);
@@ -2765,7 +2763,7 @@
 	p = *rdata;
 	endp = *rdata + *rdata_len;
 
-	status = rpc_pipe_open_internal(
+	status = rpc_pipe_open_interface(
 		talloc_tos(), &ndr_table_samr.syntax_id,
 		conn->session_info, &conn->sconn->client_id,
 		conn->sconn->msg_ctx, &samr_pipe);
@@ -3031,7 +3029,7 @@
 	ZERO_STRUCT(domain_handle);
 	ZERO_STRUCT(user_handle);
 
-	status = rpc_pipe_open_internal(mem_ctx, &ndr_table_samr.syntax_id,
+	status = rpc_pipe_open_interface(mem_ctx, &ndr_table_samr.syntax_id,
 					conn->session_info,
 					&conn->sconn->client_id,
 					conn->sconn->msg_ctx,
@@ -3282,7 +3280,7 @@
 	memcpy(password.data, data, 516);
 	memcpy(hash.hash, data+516, 16);
 
-	status = rpc_pipe_open_internal(mem_ctx, &ndr_table_samr.syntax_id,
+	status = rpc_pipe_open_interface(mem_ctx, &ndr_table_samr.syntax_id,
 					conn->session_info,
 					&conn->sconn->client_id,
 					conn->sconn->msg_ctx,
@@ -3866,7 +3864,7 @@
 	p = *rdata;
 	p2 = p + struct_len;
 
-	status = rpc_pipe_open_internal(mem_ctx, &ndr_table_srvsvc.syntax_id,
+	status = rpc_pipe_open_interface(mem_ctx, &ndr_table_srvsvc.syntax_id,
 					conn->session_info,
 					&conn->sconn->client_id,
 					conn->sconn->msg_ctx,
@@ -4293,7 +4291,7 @@
 	ZERO_STRUCT(domain_handle);
 	ZERO_STRUCT(user_handle);
 
-	status = rpc_pipe_open_internal(mem_ctx, &ndr_table_samr.syntax_id,
+	status = rpc_pipe_open_interface(mem_ctx, &ndr_table_samr.syntax_id,
 					conn->session_info,
 					&conn->sconn->client_id,
 					conn->sconn->msg_ctx,

Modified: branches/samba/experimental/source3/smbd/mangle_hash.c
===================================================================
--- branches/samba/experimental/source3/smbd/mangle_hash.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/smbd/mangle_hash.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -25,6 +25,7 @@
 #include "smbd/smbd.h"
 #include "smbd/globals.h"
 #include "mangle.h"
+#include "util_tdb.h"
 
 /* -------------------------------------------------------------------------- **
  * Other stuff...

Modified: branches/samba/experimental/source3/smbd/msg_idmap.c
===================================================================
--- branches/samba/experimental/source3/smbd/msg_idmap.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/smbd/msg_idmap.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -27,10 +27,8 @@
 
 #include "includes.h"
 #include "smbd/smbd.h"
-#include "memcache.h"
 #include "globals.h"
 #include "../libcli/security/dom_sid.h"
-#include "../librpc/gen_ndr/ndr_security.h"
 #include "idmap_cache.h"
 #include "passdb/lookup_sid.h"
 #include "auth.h"

Modified: branches/samba/experimental/source3/smbd/negprot.c
===================================================================
--- branches/samba/experimental/source3/smbd/negprot.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/smbd/negprot.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -234,6 +234,10 @@
 		SAFE_FREE(host_princ_s);
 	}
 
+	if (blob.length == 0 || blob.data == NULL) {
+		return data_blob_null;
+	}
+
 	blob_out = data_blob_talloc(ctx, NULL, 16 + blob.length);
 	if (blob_out.data == NULL) {
 		data_blob_free(&blob);
@@ -245,7 +249,7 @@
 	safe_strcpy(unix_name, global_myname(), sizeof(unix_name)-1);
 	strlower_m(unix_name);
 	push_ascii_nstring(dos_name, unix_name);
-	safe_strcpy((char *)blob_out.data, dos_name, 16);
+	strlcpy((char *)blob_out.data, dos_name, 17);
 
 #ifdef DEVELOPER
 	/* Fix valgrind 'uninitialized bytes' issue. */

Modified: branches/samba/experimental/source3/smbd/notify_internal.c
===================================================================
--- branches/samba/experimental/source3/smbd/notify_internal.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/smbd/notify_internal.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -29,6 +29,8 @@
 #include "dbwrap.h"
 #include "smbd/smbd.h"
 #include "messages.h"
+#include "lib/util/tdb_wrap.h"
+#include "util_tdb.h"
 
 struct notify_context {
 	struct db_context *db_recursive;

Modified: branches/samba/experimental/source3/smbd/ntquotas.c
===================================================================
--- branches/samba/experimental/source3/smbd/ntquotas.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/smbd/ntquotas.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -22,6 +22,7 @@
 #include "../lib/util/util_pw.h"
 #include "system/passwd.h"
 #include "passdb/lookup_sid.h"
+#include "libsmb/libsmb.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_QUOTA

Modified: branches/samba/experimental/source3/smbd/nttrans.c
===================================================================
--- branches/samba/experimental/source3/smbd/nttrans.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/smbd/nttrans.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -29,6 +29,7 @@
 #include "auth.h"
 #include "ntioctl.h"
 #include "smbprofile.h"
+#include "libsmb/libsmb.h"
 
 extern const struct generic_mapping file_generic_mapping;
 
@@ -1363,7 +1364,7 @@
 
 	/* Ensure attributes match. */
 	fattr = dos_mode(conn, smb_fname_src);
-	if ((fattr & ~attrs) & (aHIDDEN | aSYSTEM)) {
+	if ((fattr & ~attrs) & (FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM)) {
 		status = NT_STATUS_NO_SUCH_FILE;
 		goto out;
 	}
@@ -1450,7 +1451,7 @@
 
 	status = close_file(NULL, fsp2, NORMAL_CLOSE);
 
-	/* Grrr. We have to do this as open_file_ntcreate adds aARCH when it
+	/* Grrr. We have to do this as open_file_ntcreate adds FILE_ATTRIBUTE_ARCHIVE when it
 	   creates the file. This isn't the correct thing to do in the copy
 	   case. JRA */
 	if (!parent_dirname(talloc_tos(), smb_fname_dst->base_name, &parent,

Modified: branches/samba/experimental/source3/smbd/open.c
===================================================================
--- branches/samba/experimental/source3/smbd/open.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/smbd/open.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -950,7 +950,9 @@
  * Do internal consistency checks on the share mode for a file.
  */
 
-static void find_oplock_types(struct share_mode_lock *lck,
+static void find_oplock_types(files_struct *fsp,
+				int oplock_request,
+				struct share_mode_lock *lck,
 				struct share_mode_entry **pp_batch,
 				struct share_mode_entry **pp_ex_or_batch,
 				bool *got_level2,
@@ -963,11 +965,27 @@
 	*got_level2 = false;
 	*got_no_oplock = false;
 
+	/* Ignore stat or internal opens, as is done in
+		delay_for_batch_oplocks() and
+		delay_for_exclusive_oplocks().
+	 */
+	if ((oplock_request & INTERNAL_OPEN_ONLY) || is_stat_open(fsp->access_mask)) {
+		return;
+	}
+
 	for (i=0; i<lck->num_share_modes; i++) {
 		if (!is_valid_share_mode_entry(&lck->share_modes[i])) {
 			continue;
 		}
 
+		if (lck->share_modes[i].op_type == NO_OPLOCK &&
+				is_stat_open(lck->share_modes[i].access_mask)) {
+			/* We ignore stat opens in the table - they
+			   always have NO_OPLOCK and never get or
+			   cause breaks. JRA. */
+			continue;
+		}
+
 		if (BATCH_OPLOCK_TYPE(lck->share_modes[i].op_type)) {
 			/* batch - can only be one. */
 			if (*pp_ex_or_batch || *pp_batch || *got_level2 || *got_no_oplock) {
@@ -1623,9 +1641,9 @@
 		unx_mode = (mode_t)(new_dos_attributes & ~FILE_FLAG_POSIX_SEMANTICS);
 		new_dos_attributes = 0;
 	} else {
-		/* We add aARCH to this as this mode is only used if the file is
+		/* We add FILE_ATTRIBUTE_ARCHIVE to this as this mode is only used if the file is
 		 * created new. */
-		unx_mode = unix_mode(conn, new_dos_attributes | aARCH,
+		unx_mode = unix_mode(conn, new_dos_attributes | FILE_ATTRIBUTE_ARCHIVE,
 				     smb_fname, parent_dir);
 	}
 
@@ -1907,7 +1925,9 @@
 		}
 
 		/* Get the types we need to examine. */
-		find_oplock_types(lck,
+		find_oplock_types(fsp,
+				oplock_request,
+				lck,
 				&batch_entry,
 				&exclusive_entry,
 				&got_level2_oplock,
@@ -2152,7 +2172,9 @@
 		}
 
 		/* Get the types we need to examine. */
-		find_oplock_types(lck,
+		find_oplock_types(fsp,
+				oplock_request,
+				lck,
 				&batch_entry,
 				&exclusive_entry,
 				&got_level2_oplock,
@@ -2336,7 +2358,8 @@
 		new_file_created = True;
 	}
 
-	set_share_mode(lck, fsp, get_current_uid(conn), 0,
+	set_share_mode(lck, fsp, get_current_uid(conn),
+			req ? req->mid : 0,
 		       fsp->oplock_type);
 
 	/* Handle strange delete on close create semantics. */
@@ -2362,7 +2385,7 @@
 		    lp_store_dos_attributes(SNUM(conn))) {
 			if (!posix_open) {
 				if (file_set_dosmode(conn, smb_fname,
-					    new_dos_attributes | aARCH,
+					    new_dos_attributes | FILE_ATTRIBUTE_ARCHIVE,
 					    parent_dir, true) == 0) {
 					unx_mode = smb_fname->st.st_ex_mode;
 				}
@@ -2497,7 +2520,7 @@
 		posix_open = true;
 		mode = (mode_t)(file_attributes & ~FILE_FLAG_POSIX_SEMANTICS);
 	} else {
-		mode = unix_mode(conn, aDIR, smb_dname, parent_dir);
+		mode = unix_mode(conn, FILE_ATTRIBUTE_DIRECTORY, smb_dname, parent_dir);
 	}
 
 	if (SMB_VFS_MKDIR(conn, smb_dname->base_name, mode) != 0) {
@@ -2522,7 +2545,7 @@
 	if (lp_store_dos_attributes(SNUM(conn))) {
 		if (!posix_open) {
 			file_set_dosmode(conn, smb_dname,
-					 file_attributes | aDIR,
+					 file_attributes | FILE_ATTRIBUTE_DIRECTORY,
 					 parent_dir, true);
 		}
 	}
@@ -2829,7 +2852,8 @@
 		return status;
 	}
 
-	set_share_mode(lck, fsp, get_current_uid(conn), 0, NO_OPLOCK);
+	set_share_mode(lck, fsp, get_current_uid(conn),
+			req ? req->mid : 0, NO_OPLOCK);
 
 	/* For directories the delete on close bit at open time seems
 	   always to be honored on close... See test 19 in Samba4 BASE-DELETE. */

Modified: branches/samba/experimental/source3/smbd/password.c
===================================================================
--- branches/samba/experimental/source3/smbd/password.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/smbd/password.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -549,7 +549,7 @@
 				DEBUG(10,("validate_group: = gr_mem = "
 					  "%s\n", gptr->gr_mem[i]));
 
-				safe_strcpy(member, gptr->gr_mem[i],
+				strlcpy(member, gptr->gr_mem[i],
 					list_len - (member-member_list));
 				member += member_len;
 			}

Modified: branches/samba/experimental/source3/smbd/pipes.c
===================================================================
--- branches/samba/experimental/source3/smbd/pipes.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/smbd/pipes.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -29,6 +29,7 @@
 #include "smbd/smbd.h"
 #include "smbd/globals.h"
 #include "libcli/security/security.h"
+#include "rpc_server/srv_pipe_hnd.h"
 
 #define	PIPE		"\\PIPE\\"
 #define	PIPELEN		strlen(PIPE)

Modified: branches/samba/experimental/source3/smbd/process.c
===================================================================
--- branches/samba/experimental/source3/smbd/process.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/smbd/process.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -19,6 +19,7 @@
 */
 
 #include "includes.h"
+#include "../lib/tsocket/tsocket.h"
 #include "system/filesys.h"
 #include "smbd/smbd.h"
 #include "smbd/globals.h"
@@ -32,6 +33,8 @@
 #include "auth.h"
 #include "messages.h"
 #include "smbprofile.h"
+#include "rpc_server/spoolss/srv_spoolss_nt.h"
+#include "libsmb/libsmb.h"
 
 extern bool global_machine_password_needs_changing;
 
@@ -1003,7 +1006,10 @@
 		errno = sav;
 	}
 
-	if (ret == -1 && errno != EINTR) {
+	if (ret == -1) {
+		if (errno == EINTR) {
+			return NT_STATUS_RETRY;
+		}
 		return map_nt_error_from_unix(errno);
 	}
 

Modified: branches/samba/experimental/source3/smbd/proto.h
===================================================================
--- branches/samba/experimental/source3/smbd/proto.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/smbd/proto.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -1004,7 +1004,8 @@
 void send_stat_cache_delete_message(struct messaging_context *msg_ctx,
 				    const char *name);
 void stat_cache_delete(const char *name);
-unsigned int fast_string_hash(TDB_DATA *key);
+struct TDB_DATA;
+unsigned int fast_string_hash(struct TDB_DATA *key);
 bool reset_stat_cache( void );
 
 /* The following definitions come from smbd/statvfs.c  */
@@ -1056,7 +1057,7 @@
 bool change_to_user_by_session(connection_struct *conn,
 			       const struct auth_serversupplied_info *session_info);
 bool change_to_root_user(void);
-bool become_authenticated_pipe_user(struct pipes_struct *p);
+bool become_authenticated_pipe_user(struct auth_serversupplied_info *session_info);
 bool unbecome_authenticated_pipe_user(void);
 void become_root(void);
 void unbecome_root(void);

Modified: branches/samba/experimental/source3/smbd/reply.c
===================================================================
--- branches/samba/experimental/source3/smbd/reply.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/smbd/reply.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -1108,9 +1108,9 @@
 	/* dos smetimes asks for a stat of "" - it returns a "hidden directory"
 		under WfWg - weird! */
 	if (*fname == '\0') {
-		mode = aHIDDEN | aDIR;
+		mode = FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_DIRECTORY;
 		if (!CAN_WRITE(conn)) {
-			mode |= aRONLY;
+			mode |= FILE_ATTRIBUTE_READONLY;
 		}
 		size = 0;
 		mtime = 0;
@@ -1156,7 +1156,7 @@
 		}
 
 		mtime = convert_timespec_to_time_t(smb_fname->st.st_ex_mtime);
-		if (mode & aDIR) {
+		if (mode & FILE_ATTRIBUTE_DIRECTORY) {
 			size = 0;
 		}
 	}
@@ -1257,9 +1257,9 @@
 
 	if (mode != FILE_ATTRIBUTE_NORMAL) {
 		if (VALID_STAT_OF_DIR(smb_fname->st))
-			mode |= aDIR;
+			mode |= FILE_ATTRIBUTE_DIRECTORY;
 		else
-			mode &= ~aDIR;
+			mode &= ~FILE_ATTRIBUTE_DIRECTORY;
 
 		if (file_set_dosmode(conn, smb_fname, mode, NULL,
 				     false) != 0) {
@@ -1428,7 +1428,7 @@
 	status_len = SVAL(p, 0);
 	p += 2;
 
-	/* dirtype &= ~aDIR; */
+	/* dirtype &= ~FILE_ATTRIBUTE_DIRECTORY; */
 
 	if (status_len == 0) {
 		nt_status = filename_convert(ctx, conn,
@@ -1520,11 +1520,11 @@
 	/* Initialize per SMBsearch/SMBffirst/SMBfunique operation data */
 	dptr_init_search_op(dirptr);
 
-	if ((dirtype&0x1F) == aVOLID) {
+	if ((dirtype&0x1F) == FILE_ATTRIBUTE_VOLUME) {
 		char buf[DIR_STRUCT_SIZE];
 		memcpy(buf,status,21);
 		if (!make_dir_struct(ctx,buf,"???????????",volume_label(SNUM(conn)),
-				0,aVOLID,0,!allow_long_path_components)) {
+				0,FILE_ATTRIBUTE_VOLUME,0,!allow_long_path_components)) {
 			reply_nterror(req, NT_STATUS_NO_MEMORY);
 			goto out;
 		}
@@ -1820,7 +1820,7 @@
 
 	mtime = convert_timespec_to_time_t(smb_fname->st.st_ex_mtime);
 
-	if (fattr & aDIR) {
+	if (fattr & FILE_ATTRIBUTE_DIRECTORY) {
 		DEBUG(3,("attempt to open a directory %s\n",
 			 fsp_str_dbg(fsp)));
 		close_file(req, fsp, ERROR_CLOSE);
@@ -2004,7 +2004,7 @@
 
 	fattr = dos_mode(conn, fsp->fsp_name);
 	mtime = convert_timespec_to_time_t(fsp->fsp_name->st.st_ex_mtime);
-	if (fattr & aDIR) {
+	if (fattr & FILE_ATTRIBUTE_DIRECTORY) {
 		close_file(req, fsp, ERROR_CLOSE);
 		reply_nterror(req, NT_STATUS_ACCESS_DENIED);
 		goto out;
@@ -2160,7 +2160,7 @@
 		goto out;
 	}
 
-	if (fattr & aVOLID) {
+	if (fattr & FILE_ATTRIBUTE_VOLUME) {
 		DEBUG(0,("Attempt to create file (%s) with volid set - "
 			 "please report this\n",
 			 smb_fname_str_dbg(smb_fname)));
@@ -2388,7 +2388,7 @@
 	}
 
 	fmode = dos_mode(conn, fsp->fsp_name);
-	if ((fmode & ~dirtype) & (aHIDDEN | aSYSTEM)) {
+	if ((fmode & ~dirtype) & (FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM)) {
 		return NT_STATUS_NO_SUCH_FILE;
 	}
 
@@ -2449,16 +2449,16 @@
 	fattr = dos_mode(conn, smb_fname);
 
 	if (dirtype & FILE_ATTRIBUTE_NORMAL) {
-		dirtype = aDIR|aARCH|aRONLY;
+		dirtype = FILE_ATTRIBUTE_DIRECTORY|FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_READONLY;
 	}
 
-	dirtype &= (aDIR|aARCH|aRONLY|aHIDDEN|aSYSTEM);
+	dirtype &= (FILE_ATTRIBUTE_DIRECTORY|FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_SYSTEM);
 	if (!dirtype) {
 		return NT_STATUS_NO_SUCH_FILE;
 	}
 
 	if (!dir_check_ftype(conn, fattr, dirtype)) {
-		if (fattr & aDIR) {
+		if (fattr & FILE_ATTRIBUTE_DIRECTORY) {
 			return NT_STATUS_FILE_IS_A_DIRECTORY;
 		}
 		return NT_STATUS_NO_SUCH_FILE;
@@ -2489,13 +2489,13 @@
 	}
 
 	/* Can't delete a directory. */
-	if (fattr & aDIR) {
+	if (fattr & FILE_ATTRIBUTE_DIRECTORY) {
 		return NT_STATUS_FILE_IS_A_DIRECTORY;
 	}
 #endif
 
 #if 0 /* JRATEST */
-	else if (dirtype & aDIR) /* Asked for a directory and it isn't. */
+	else if (dirtype & FILE_ATTRIBUTE_DIRECTORY) /* Asked for a directory and it isn't. */
 		return NT_STATUS_OBJECT_NAME_INVALID;
 #endif /* JRATEST */
 
@@ -2632,7 +2632,7 @@
 		const char *dname = NULL;
 		char *talloced = NULL;
 
-		if ((dirtype & SAMBA_ATTRIBUTES_MASK) == aDIR) {
+		if ((dirtype & SAMBA_ATTRIBUTES_MASK) == FILE_ATTRIBUTE_DIRECTORY) {
 			status = NT_STATUS_OBJECT_NAME_INVALID;
 			goto out;
 		}
@@ -3213,7 +3213,7 @@
 				"(%x << 32) used and we don't support "
 				"64 bit offsets.\n",
 			(unsigned int)IVAL(req->vwv+8, 0) ));
-			reply_readbraw_error();
+			reply_readbraw_error(sconn);
 			END_PROFILE(SMBreadbraw);
 			return;
 		}
@@ -6405,7 +6405,7 @@
 
 		/* Quick check for "." and ".." */
 		if (ISDOT(dname) || ISDOTDOT(dname)) {
-			if (attrs & aDIR) {
+			if (attrs & FILE_ATTRIBUTE_DIRECTORY) {
 				sysdir_entry = True;
 			} else {
 				TALLOC_FREE(talloced);
@@ -7971,7 +7971,7 @@
 	srv_put_dos_date2((char *)req->outbuf, smb_vwv4,
 			  convert_timespec_to_time_t(fsp->fsp_name->st.st_ex_mtime));
 
-	if (mode & aDIR) {
+	if (mode & FILE_ATTRIBUTE_DIRECTORY) {
 		SIVAL(req->outbuf, smb_vwv6, 0);
 		SIVAL(req->outbuf, smb_vwv8, 0);
 	} else {

Modified: branches/samba/experimental/source3/smbd/seal.c
===================================================================
--- branches/samba/experimental/source3/smbd/seal.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/smbd/seal.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -26,6 +26,7 @@
 #include "smb_crypt.h"
 #include "../lib/util/asn1.h"
 #include "auth.h"
+#include "libsmb/libsmb.h"
 
 /******************************************************************************
  Server side encryption.

Modified: branches/samba/experimental/source3/smbd/server.c
===================================================================
--- branches/samba/experimental/source3/smbd/server.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/smbd/server.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -26,7 +26,6 @@
 #include "popt_common.h"
 #include "smbd/smbd.h"
 #include "smbd/globals.h"
-#include "registry.h"
 #include "registry/reg_init_full.h"
 #include "libcli/auth/schannel.h"
 #include "secrets.h"

Modified: branches/samba/experimental/source3/smbd/server_exit.c
===================================================================
--- branches/samba/experimental/source3/smbd/server_exit.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/smbd/server_exit.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -25,7 +25,7 @@
 #include "includes.h"
 #include "smbd/smbd.h"
 #include "smbd/globals.h"
-
+#include "ntdomain.h"
 #include "../librpc/gen_ndr/srv_dfs.h"
 #include "../librpc/gen_ndr/srv_dssetup.h"
 #include "../librpc/gen_ndr/srv_echo.h"

Modified: branches/samba/experimental/source3/smbd/service.c
===================================================================
--- branches/samba/experimental/source3/smbd/service.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/smbd/service.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -19,6 +19,7 @@
 
 #include "includes.h"
 #include "system/filesys.h"
+#include "../lib/tsocket/tsocket.h"
 #include "smbd/smbd.h"
 #include "smbd/globals.h"
 #include "../librpc/gen_ndr/netlogon.h"

Modified: branches/samba/experimental/source3/smbd/sesssetup.c
===================================================================
--- branches/samba/experimental/source3/smbd/sesssetup.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/smbd/sesssetup.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -23,6 +23,7 @@
 */
 
 #include "includes.h"
+#include "../lib/tsocket/tsocket.h"
 #include "smbd/smbd.h"
 #include "smbd/globals.h"
 #include "../libcli/auth/spnego.h"

Modified: branches/samba/experimental/source3/smbd/smb2_break.c
===================================================================
--- branches/samba/experimental/source3/smbd/smb2_break.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/smbd/smb2_break.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -23,6 +23,7 @@
 #include "smbd/smbd.h"
 #include "smbd/globals.h"
 #include "../libcli/smb/smb_common.h"
+#include "../lib/util/tevent_ntstatus.h"
 
 static struct tevent_req *smbd_smb2_oplock_break_send(TALLOC_CTX *mem_ctx,
 						      struct tevent_context *ev,

Modified: branches/samba/experimental/source3/smbd/smb2_create.c
===================================================================
--- branches/samba/experimental/source3/smbd/smb2_create.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/smbd/smb2_create.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -25,6 +25,7 @@
 #include "smbd/globals.h"
 #include "../libcli/smb/smb_common.h"
 #include "../librpc/gen_ndr/ndr_security.h"
+#include "../lib/util/tevent_ntstatus.h"
 
 int map_smb2_oplock_levels_to_samba(uint8_t in_oplock_level)
 {

Modified: branches/samba/experimental/source3/smbd/smb2_find.c
===================================================================
--- branches/samba/experimental/source3/smbd/smb2_find.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/smbd/smb2_find.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -23,6 +23,7 @@
 #include "smbd/globals.h"
 #include "../libcli/smb/smb_common.h"
 #include "trans2.h"
+#include "../lib/util/tevent_ntstatus.h"
 
 static struct tevent_req *smbd_smb2_find_send(TALLOC_CTX *mem_ctx,
 					      struct tevent_context *ev,
@@ -228,7 +229,7 @@
 	int last_entry_off = 0;
 	int off = 0;
 	uint32_t num = 0;
-	uint32_t dirtype = aHIDDEN | aSYSTEM | aDIR;
+	uint32_t dirtype = FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_DIRECTORY;
 	bool dont_descend = false;
 	bool ask_sharemode = true;
 

Modified: branches/samba/experimental/source3/smbd/smb2_flush.c
===================================================================
--- branches/samba/experimental/source3/smbd/smb2_flush.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/smbd/smb2_flush.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -22,6 +22,7 @@
 #include "smbd/smbd.h"
 #include "smbd/globals.h"
 #include "../libcli/smb/smb_common.h"
+#include "../lib/util/tevent_ntstatus.h"
 
 static struct tevent_req *smbd_smb2_flush_send(TALLOC_CTX *mem_ctx,
 					       struct tevent_context *ev,

Modified: branches/samba/experimental/source3/smbd/smb2_getinfo.c
===================================================================
--- branches/samba/experimental/source3/smbd/smb2_getinfo.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/smbd/smb2_getinfo.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -24,6 +24,7 @@
 #include "smbd/globals.h"
 #include "../libcli/smb/smb_common.h"
 #include "trans2.h"
+#include "../lib/util/tevent_ntstatus.h"
 
 static struct tevent_req *smbd_smb2_getinfo_send(TALLOC_CTX *mem_ctx,
 						 struct tevent_context *ev,

Modified: branches/samba/experimental/source3/smbd/smb2_ioctl.c
===================================================================
--- branches/samba/experimental/source3/smbd/smb2_ioctl.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/smbd/smb2_ioctl.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -22,6 +22,8 @@
 #include "smbd/smbd.h"
 #include "smbd/globals.h"
 #include "../libcli/smb/smb_common.h"
+#include "../lib/util/tevent_ntstatus.h"
+#include "rpc_server/srv_pipe_hnd.h"
 
 static struct tevent_req *smbd_smb2_ioctl_send(TALLOC_CTX *mem_ctx,
 					       struct tevent_context *ev,

Modified: branches/samba/experimental/source3/smbd/smb2_lock.c
===================================================================
--- branches/samba/experimental/source3/smbd/smb2_lock.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/smbd/smb2_lock.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -23,6 +23,7 @@
 #include "smbd/smbd.h"
 #include "smbd/globals.h"
 #include "../libcli/smb/smb_common.h"
+#include "../lib/util/tevent_ntstatus.h"
 #include "messages.h"
 
 struct smbd_smb2_lock_element {

Modified: branches/samba/experimental/source3/smbd/smb2_negprot.c
===================================================================
--- branches/samba/experimental/source3/smbd/smb2_negprot.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/smbd/smb2_negprot.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -78,7 +78,7 @@
 	uint16_t dialect = 0;
 	uint32_t capabilities;
 
-/* TODO: drop the connection with INVALI_PARAMETER */
+/* TODO: drop the connection with INVALID_PARAMETER */
 
 	if (req->in.vector[i+1].iov_len != (expected_body_size & 0xFFFFFFFE)) {
 		return smbd_smb2_request_error(req, NT_STATUS_INVALID_PARAMETER);

Modified: branches/samba/experimental/source3/smbd/smb2_notify.c
===================================================================
--- branches/samba/experimental/source3/smbd/smb2_notify.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/smbd/smb2_notify.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -23,6 +23,7 @@
 #include "smbd/smbd.h"
 #include "smbd/globals.h"
 #include "../libcli/smb/smb_common.h"
+#include "../lib/util/tevent_ntstatus.h"
 
 struct smbd_smb2_notify_state {
 	struct smbd_smb2_request *smb2req;

Modified: branches/samba/experimental/source3/smbd/smb2_read.c
===================================================================
--- branches/samba/experimental/source3/smbd/smb2_read.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/smbd/smb2_read.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -24,6 +24,8 @@
 #include "smbd/globals.h"
 #include "../libcli/smb/smb_common.h"
 #include "libcli/security/security.h"
+#include "../lib/util/tevent_ntstatus.h"
+#include "rpc_server/srv_pipe_hnd.h"
 
 static struct tevent_req *smbd_smb2_read_send(TALLOC_CTX *mem_ctx,
 					      struct tevent_context *ev,

Modified: branches/samba/experimental/source3/smbd/smb2_server.c
===================================================================
--- branches/samba/experimental/source3/smbd/smb2_server.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/smbd/smb2_server.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -24,6 +24,7 @@
 #include "smbd/globals.h"
 #include "../libcli/smb/smb_common.h"
 #include "../lib/tsocket/tsocket.h"
+#include "../lib/util/tevent_ntstatus.h"
 #include "smbprofile.h"
 
 #define OUTVEC_ALLOC_SIZE (SMB2_HDR_BODY + 9)
@@ -607,7 +608,7 @@
 			srcvec[1].iov_base ==
 				((uint8_t *)srcvec[0].iov_base) +
 					SMB2_HDR_BODY) {
-		outvec[1].iov_base = ((uint8_t *)outvec[1].iov_base) +
+		outvec[1].iov_base = ((uint8_t *)outvec[0].iov_base) +
 					SMB2_HDR_BODY;
 		outvec[1].iov_len = 8;
 	} else {

Modified: branches/samba/experimental/source3/smbd/smb2_setinfo.c
===================================================================
--- branches/samba/experimental/source3/smbd/smb2_setinfo.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/smbd/smb2_setinfo.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -24,6 +24,7 @@
 #include "smbd/globals.h"
 #include "../libcli/smb/smb_common.h"
 #include "trans2.h"
+#include "../lib/util/tevent_ntstatus.h"
 
 static struct tevent_req *smbd_smb2_setinfo_send(TALLOC_CTX *mem_ctx,
 						 struct tevent_context *ev,

Modified: branches/samba/experimental/source3/smbd/smb2_write.c
===================================================================
--- branches/samba/experimental/source3/smbd/smb2_write.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/smbd/smb2_write.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -22,6 +22,8 @@
 #include "smbd/smbd.h"
 #include "smbd/globals.h"
 #include "../libcli/smb/smb_common.h"
+#include "../lib/util/tevent_ntstatus.h"
+#include "rpc_server/srv_pipe_hnd.h"
 
 static struct tevent_req *smbd_smb2_write_send(TALLOC_CTX *mem_ctx,
 					       struct tevent_context *ev,

Modified: branches/samba/experimental/source3/smbd/statcache.c
===================================================================
--- branches/samba/experimental/source3/smbd/statcache.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/smbd/statcache.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -25,6 +25,7 @@
 #include "smbd/smbd.h"
 #include "messages.h"
 #include "smbprofile.h"
+#include <tdb.h>
 
 /****************************************************************************
  Stat cache code used in unix_convert.
@@ -376,7 +377,7 @@
  JRA. Use a djb-algorithm hash for speed.
 ***************************************************************/
 
-unsigned int fast_string_hash(TDB_DATA *key)
+unsigned int fast_string_hash(struct TDB_DATA *key)
 {
         unsigned int n = 0;
         const char *p;

Modified: branches/samba/experimental/source3/smbd/trans2.c
===================================================================
--- branches/samba/experimental/source3/smbd/trans2.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/smbd/trans2.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -35,6 +35,8 @@
 #include "trans2.h"
 #include "auth.h"
 #include "smbprofile.h"
+#include "rpc_server/srv_pipe_hnd.h"
+#include "libsmb/libsmb.h"
 
 #define DIR_ENTRY_SAFETY_MARGIN 4096
 
@@ -1148,7 +1150,7 @@
 	fattr = dos_mode(conn, smb_fname);
 	mtime = convert_timespec_to_time_t(smb_fname->st.st_ex_mtime);
 	inode = smb_fname->st.st_ex_ino;
-	if (fattr & aDIR) {
+	if (fattr & FILE_ATTRIBUTE_DIRECTORY) {
 		close_file(req, fsp, ERROR_CLOSE);
 		reply_nterror(req, NT_STATUS_ACCESS_DENIED);
 		goto out;
@@ -1524,7 +1526,7 @@
 	ZERO_STRUCT(create_date_ts);
 	ZERO_STRUCT(cdate_ts);
 
-	if (!(mode & aDIR)) {
+	if (!(mode & FILE_ATTRIBUTE_DIRECTORY)) {
 		file_size = get_file_size_stat(&smb_fname->st);
 	}
 	allocation_size = SMB_VFS_GET_ALLOC_SIZE(conn, NULL, &smb_fname->st);
@@ -4227,7 +4229,7 @@
 	mode = dos_mode(conn, smb_fname);
 	nlink = psbuf->st_ex_nlink;
 
-	if (nlink && (mode&aDIR)) {
+	if (nlink && (mode&FILE_ATTRIBUTE_DIRECTORY)) {
 		nlink = 1;
 	}
 
@@ -4308,7 +4310,7 @@
 		}
 	}
 
-	if (!(mode & aDIR)) {
+	if (!(mode & FILE_ATTRIBUTE_DIRECTORY)) {
 		file_size = get_file_size_stat(psbuf);
 	}
 
@@ -4478,7 +4480,7 @@
 			SOFF_T(pdata,8,file_size);
 			SIVAL(pdata,16,nlink);
 			SCVAL(pdata,20,delete_pending?1:0);
-			SCVAL(pdata,21,(mode&aDIR)?1:0);
+			SCVAL(pdata,21,(mode&FILE_ATTRIBUTE_DIRECTORY)?1:0);
 			SSVAL(pdata,22,0); /* Padding. */
 			break;
 
@@ -4561,7 +4563,7 @@
 			SOFF_T(pdata,8,file_size);
 			SIVAL(pdata,16,nlink);
 			SCVAL(pdata,20,delete_pending);
-			SCVAL(pdata,21,(mode&aDIR)?1:0);
+			SCVAL(pdata,21,(mode&FILE_ATTRIBUTE_DIRECTORY)?1:0);
 			SSVAL(pdata,22,0);
 			pdata += 24;
 			SIVAL(pdata,0,ea_size);
@@ -4592,7 +4594,7 @@
 			SBVAL(pdata,	0x30, file_size);
 			SIVAL(pdata,	0x38, nlink);
 			SCVAL(pdata,	0x3C, delete_pending);
-			SCVAL(pdata,	0x3D, (mode&aDIR)?1:0);
+			SCVAL(pdata,	0x3D, (mode&FILE_ATTRIBUTE_DIRECTORY)?1:0);
 			SSVAL(pdata,	0x3E, 0); /* padding */
 			SBVAL(pdata,	0x40, file_index);
 			SIVAL(pdata,	0x48, ea_size);
@@ -5554,9 +5556,9 @@
 
 	if (dosmode) {
 		if (S_ISDIR(smb_fname_base->st.st_ex_mode)) {
-			dosmode |= aDIR;
+			dosmode |= FILE_ATTRIBUTE_DIRECTORY;
 		} else {
-			dosmode &= ~aDIR;
+			dosmode &= ~FILE_ATTRIBUTE_DIRECTORY;
 		}
 	}
 
@@ -7240,7 +7242,7 @@
 	uint32 mod_unixmode = 0;
 	uint32 create_disp = 0;
 	uint32 access_mask = 0;
-	uint32 create_options = 0;
+	uint32 create_options = FILE_NON_DIRECTORY_FILE;
 	NTSTATUS status = NT_STATUS_OK;
 	mode_t unixmode = (mode_t)0;
 	files_struct *fsp = NULL;
@@ -7286,20 +7288,57 @@
 
 	wire_open_mode &= ~SMB_ACCMODE;
 
-	if((wire_open_mode & (SMB_O_CREAT | SMB_O_EXCL)) == (SMB_O_CREAT | SMB_O_EXCL)) {
-		create_disp = FILE_CREATE;
-	} else if((wire_open_mode & (SMB_O_CREAT | SMB_O_TRUNC)) == (SMB_O_CREAT | SMB_O_TRUNC)) {
-		create_disp = FILE_OVERWRITE_IF;
-	} else if((wire_open_mode & SMB_O_CREAT) == SMB_O_CREAT) {
-		create_disp = FILE_OPEN_IF;
-	} else if ((wire_open_mode & (SMB_O_CREAT | SMB_O_EXCL | SMB_O_TRUNC)) == 0) {
-		create_disp = FILE_OPEN;
-	} else {
-		DEBUG(5,("smb_posix_open: invalid create mode 0x%x\n",
-			(unsigned int)wire_open_mode ));
-		return NT_STATUS_INVALID_PARAMETER;
+	/* First take care of O_CREAT|O_EXCL interactions. */
+	switch (wire_open_mode & (SMB_O_CREAT | SMB_O_EXCL)) {
+		case (SMB_O_CREAT | SMB_O_EXCL):
+			/* File exists fail. File not exist create. */
+			create_disp = FILE_CREATE;
+			break;
+		case SMB_O_CREAT:
+			/* File exists open. File not exist create. */
+			create_disp = FILE_OPEN_IF;
+			break;
+		case 0:
+			/* File exists open. File not exist fail. */
+			create_disp = FILE_OPEN;
+			break;
+		case SMB_O_EXCL:
+			/* O_EXCL on its own without O_CREAT is undefined. */
+		default:
+			DEBUG(5,("smb_posix_open: invalid create mode 0x%x\n",
+				(unsigned int)wire_open_mode ));
+			return NT_STATUS_INVALID_PARAMETER;
 	}
 
+	/* Next factor in the effects of O_TRUNC. */
+	wire_open_mode &= ~(SMB_O_CREAT | SMB_O_EXCL);
+
+	if (wire_open_mode & SMB_O_TRUNC) {
+		switch (create_disp) {
+			case FILE_CREATE:
+				/* (SMB_O_CREAT | SMB_O_EXCL | O_TRUNC) */
+				/* Leave create_disp alone as
+				   (O_CREAT|O_EXCL|O_TRUNC) == (O_CREAT|O_EXCL)
+				*/
+				/* File exists fail. File not exist create. */
+				break;
+			case FILE_OPEN_IF:
+				/* SMB_O_CREAT | SMB_O_TRUNC */
+				/* File exists overwrite. File not exist create. */
+				create_disp = FILE_OVERWRITE_IF;
+				break;
+			case FILE_OPEN:
+				/* SMB_O_TRUNC */
+				/* File exists overwrite. File not exist fail. */
+				create_disp = FILE_OVERWRITE;
+				break;
+			default:
+				/* Cannot get here. */
+				smb_panic("smb_posix_open: logic error");
+				return NT_STATUS_INVALID_PARAMETER;
+		}
+	}
+
 	raw_unixmode = IVAL(pdata,8);
 	/* Next 4 bytes are not yet defined. */
 
@@ -7317,6 +7356,14 @@
 	if (wire_open_mode & SMB_O_SYNC) {
 		create_options |= FILE_WRITE_THROUGH;
 	}
+	if ((wire_open_mode & SMB_O_DIRECTORY) ||
+			VALID_STAT_OF_DIR(smb_fname->st)) {
+		if (access_mask != FILE_READ_DATA) {
+			return NT_STATUS_FILE_IS_A_DIRECTORY;
+		}
+		create_options &= ~FILE_NON_DIRECTORY_FILE;
+		create_options |= FILE_DIRECTORY_FILE;
+	}
 	if (wire_open_mode & SMB_O_APPEND) {
 		access_mask |= FILE_APPEND_DATA;
 	}
@@ -7338,7 +7385,7 @@
 		(FILE_SHARE_READ | FILE_SHARE_WRITE |	/* share_access */
 		    FILE_SHARE_DELETE),
 		create_disp,				/* create_disposition*/
-		FILE_NON_DIRECTORY_FILE,		/* create_options */
+		create_options,				/* create_options */
 		mod_unixmode,				/* file_attributes */
 		oplock_request,				/* oplock_request */
 		0,					/* allocation_size */

Modified: branches/samba/experimental/source3/smbd/uid.c
===================================================================
--- branches/samba/experimental/source3/smbd/uid.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/smbd/uid.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -25,7 +25,6 @@
 #include "libcli/security/security.h"
 #include "passdb/lookup_sid.h"
 #include "auth.h"
-#include "ntdomain.h"
 
 /* what user is current? */
 extern struct current_user current_user;
@@ -409,14 +408,14 @@
  user. Doesn't modify current_user.
 ****************************************************************************/
 
-bool become_authenticated_pipe_user(struct pipes_struct *p)
+bool become_authenticated_pipe_user(struct auth_serversupplied_info *session_info)
 {
 	if (!push_sec_ctx())
 		return False;
 
-	set_sec_ctx(p->session_info->utok.uid, p->session_info->utok.gid,
-		    p->session_info->utok.ngroups, p->session_info->utok.groups,
-		    p->session_info->security_token);
+	set_sec_ctx(session_info->utok.uid, session_info->utok.gid,
+		    session_info->utok.ngroups, session_info->utok.groups,
+		    session_info->security_token);
 
 	return True;
 }

Modified: branches/samba/experimental/source3/torture/denytest.c
===================================================================
--- branches/samba/experimental/source3/torture/denytest.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/torture/denytest.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -20,6 +20,7 @@
 #include "includes.h"
 #include "system/filesys.h"
 #include "torture/proto.h"
+#include "libsmb/libsmb.h"
 
 extern bool torture_showall;
 
@@ -1421,9 +1422,10 @@
 	printf("starting denytest1\n");
 
 	for (i=0;i<2;i++) {
-		cli_unlink(cli1, fnames[i], aSYSTEM | aHIDDEN);
+		cli_unlink(cli1, fnames[i], FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 		cli_open(cli1, fnames[i], O_RDWR|O_CREAT, DENY_NONE, &fnum1);
-		cli_write(cli1, fnum1, 0, fnames[i], 0, strlen(fnames[i]));
+		cli_writeall(cli1, fnum1, 0, (uint8_t *)fnames[i], 0,
+			     strlen(fnames[i]), NULL);
 		cli_close(cli1, fnum1);
 	}
 
@@ -1452,7 +1454,9 @@
 			if (cli_read(cli1, fnum2, (char *)&x, 0, 1) == 1) {
 				res += A_R;
 			}
-			if (cli_write(cli1, fnum2, 0, (char *)&x, 0, 1) == 1) {
+			if (NT_STATUS_IS_OK(cli_writeall(cli1, fnum2, 0,
+							 (uint8_t *)&x, 0, 1,
+							 NULL))) {
 				res += A_W;
 			}
 		}
@@ -1481,7 +1485,7 @@
 	}
 
 	for (i=0;i<2;i++) {
-		cli_unlink(cli1, fnames[i], aSYSTEM | aHIDDEN);
+		cli_unlink(cli1, fnames[i], FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 	}
 		
 	if (!torture_close_connection(cli1)) {
@@ -1512,9 +1516,10 @@
 	printf("starting denytest2\n");
 
 	for (i=0;i<2;i++) {
-		cli_unlink(cli1, fnames[i], aSYSTEM | aHIDDEN);
+		cli_unlink(cli1, fnames[i], FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 		cli_open(cli1, fnames[i], O_RDWR|O_CREAT, DENY_NONE, &fnum1);
-		cli_write(cli1, fnum1, 0, fnames[i], 0, strlen(fnames[i]));
+		cli_writeall(cli1, fnum1, 0, (uint8_t *)fnames[i], 0,
+			     strlen(fnames[i]), NULL);
 		cli_close(cli1, fnum1);
 	}
 
@@ -1541,7 +1546,9 @@
 			if (cli_read(cli2, fnum2, (char *)&x, 0, 1) == 1) {
 				res += A_R;
 			}
-			if (cli_write(cli2, fnum2, 0, (char *)&x, 0, 1) == 1) {
+			if (NT_STATUS_IS_OK(cli_writeall(cli2, fnum2, 0,
+							 (uint8_t *)&x, 0, 1,
+							 NULL))) {
 				res += A_W;
 			}
 		}
@@ -1570,7 +1577,7 @@
 	}
 		
 	for (i=0;i<2;i++) {
-		cli_unlink(cli1, fnames[i], aSYSTEM | aHIDDEN);
+		cli_unlink(cli1, fnames[i], FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 	}
 
 	if (!torture_close_connection(cli1)) {

Modified: branches/samba/experimental/source3/torture/locktest.c
===================================================================
--- branches/samba/experimental/source3/torture/locktest.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/torture/locktest.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -18,6 +18,7 @@
 */
 
 #include "includes.h"
+#include "libsmb/libsmb.h"
 #include "system/filesys.h"
 #include "locking/proto.h"
 #include "libsmb/nmblib.h"
@@ -400,7 +401,7 @@
 		}
 	}
 	for (server=0;server<NSERVERS;server++) {
-		cli_unlink(cli[server][0], FILENAME, aSYSTEM | aHIDDEN);
+		cli_unlink(cli[server][0], FILENAME, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 	}
 }
 

Modified: branches/samba/experimental/source3/torture/locktest2.c
===================================================================
--- branches/samba/experimental/source3/torture/locktest2.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/torture/locktest2.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -18,6 +18,7 @@
 */
 
 #include "includes.h"
+#include "libsmb/libsmb.h"
 #include "system/filesys.h"
 #include "locking/proto.h"
 
@@ -325,7 +326,7 @@
 		}
 	}
 	for (server=0;server<NSERVERS;server++) {
-		cli_unlink(cli[server][0], FILENAME, aSYSTEM | aHIDDEN);
+		cli_unlink(cli[server][0], FILENAME, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 	}
 }
 

Modified: branches/samba/experimental/source3/torture/mangle_test.c
===================================================================
--- branches/samba/experimental/source3/torture/mangle_test.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/torture/mangle_test.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -20,7 +20,9 @@
 #include "includes.h"
 #include "system/filesys.h"
 #include "torture/proto.h"
+#include "libsmb/libsmb.h"
 #include "libsmb/clirap.h"
+#include "util_tdb.h"
 
 extern int torture_numops;
 
@@ -58,7 +60,7 @@
 	}
 
 	fstr_sprintf(name2, "\\mangle_test\\%s", shortname);
-	if (!NT_STATUS_IS_OK(cli_unlink(cli, name2, aSYSTEM | aHIDDEN))) {
+	if (!NT_STATUS_IS_OK(cli_unlink(cli, name2, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN))) {
 		printf("unlink of %s  (%s) failed (%s)\n", 
 		       name2, name, cli_errstr(cli));
 		return False;
@@ -75,11 +77,11 @@
 	}
 
 	/* and unlink by long name */
-	if (!NT_STATUS_IS_OK(cli_unlink(cli, name, aSYSTEM | aHIDDEN))) {
+	if (!NT_STATUS_IS_OK(cli_unlink(cli, name, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN))) {
 		printf("unlink2 of %s  (%s) failed (%s)\n", 
 		       name, name2, cli_errstr(cli));
 		failures++;
-		cli_unlink(cli, name2, aSYSTEM | aHIDDEN);
+		cli_unlink(cli, name2, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 		return True;
 	}
 
@@ -178,7 +180,7 @@
 		return False;
 	}
 
-	cli_unlink(cli, "\\mangle_test\\*", aSYSTEM | aHIDDEN);
+	cli_unlink(cli, "\\mangle_test\\*", FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 	cli_rmdir(cli, "\\mangle_test");
 
 	if (!NT_STATUS_IS_OK(cli_mkdir(cli, "\\mangle_test"))) {
@@ -202,7 +204,7 @@
 		}
 	}
 
-	cli_unlink(cli, "\\mangle_test\\*", aSYSTEM | aHIDDEN);
+	cli_unlink(cli, "\\mangle_test\\*", FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 	if (!NT_STATUS_IS_OK(cli_rmdir(cli, "\\mangle_test"))) {
 		printf("ERROR: Failed to remove directory\n");
 		return False;

Modified: branches/samba/experimental/source3/torture/masktest.c
===================================================================
--- branches/samba/experimental/source3/torture/masktest.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/torture/masktest.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -20,6 +20,7 @@
 #include "includes.h"
 #include "system/filesys.h"
 #include "trans2.h"
+#include "libsmb/libsmb.h"
 #include "libsmb/nmblib.h"
 
 static fstring password;
@@ -313,11 +314,11 @@
 	*pp_long_name = NULL;
 	/* nasty hack to force level 260 listings - tridge */
 	if (max_protocol <= PROTOCOL_LANMAN1) {
-		cli_list_trans(cli, "\\masktest\\*.*", aHIDDEN | aDIR,
+		cli_list_trans(cli, "\\masktest\\*.*", FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_DIRECTORY,
 			       SMB_FIND_FILE_BOTH_DIRECTORY_INFO, listfn,
 			       &state);
 	} else {
-		cli_list_trans(cli, "\\masktest\\*", aHIDDEN | aDIR,
+		cli_list_trans(cli, "\\masktest\\*", FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_DIRECTORY,
 			       SMB_FIND_FILE_BOTH_DIRECTORY_INFO,
 			       listfn, &state);
 	}
@@ -359,7 +360,7 @@
 		return;
 	}
 	fstrcpy(res1, "---");
-	cli_list(cli, mask, aHIDDEN | aDIR, listfn, NULL);
+	cli_list(cli, mask, FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_DIRECTORY, listfn, NULL);
 
 	res2 = reg_test(cli, mask, long_name, short_name);
 
@@ -371,7 +372,7 @@
 		if (die_on_error) exit(1);
 	}
 
-	cli_unlink(cli, file, aSYSTEM | aHIDDEN);
+	cli_unlink(cli, file, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	if (count % 100 == 0) DEBUG(0,("%d\n", count));
 	SAFE_FREE(long_name);
@@ -388,7 +389,7 @@
 
 	cli_mkdir(cli, "\\masktest");
 
-	cli_unlink(cli, "\\masktest\\*", aSYSTEM | aHIDDEN);
+	cli_unlink(cli, "\\masktest\\*", FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	if (argc >= 2) {
 		while (argc >= 2) {

Modified: branches/samba/experimental/source3/torture/nbench.c
===================================================================
--- branches/samba/experimental/source3/torture/nbench.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/torture/nbench.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -19,7 +19,9 @@
 
 #include "includes.h"
 #include "torture/proto.h"
+#include "libsmb/libsmb.h"
 #include "libsmb/clirap.h"
+#include "../lib/util/tevent_ntstatus.h"
 
 static long long int ival(const char *str)
 {

Modified: branches/samba/experimental/source3/torture/nbio.c
===================================================================
--- branches/samba/experimental/source3/torture/nbio.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/torture/nbio.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -22,6 +22,7 @@
 #include "includes.h"
 #include "torture/proto.h"
 #include "../libcli/security/security.h"
+#include "libsmb/libsmb.h"
 #include "libsmb/clirap.h"
 
 #define MAX_FILES 1000
@@ -134,7 +135,7 @@
 
 void nb_unlink(const char *fname)
 {
-	if (!NT_STATUS_IS_OK(cli_unlink(c, fname, aSYSTEM | aHIDDEN))) {
+	if (!NT_STATUS_IS_OK(cli_unlink(c, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN))) {
 #if NBDEBUG
 		printf("(%d) unlink %s failed (%s)\n", 
 		       line_count, fname, cli_errstr(c));
@@ -189,13 +190,17 @@
 void nb_writex(int handle, int offset, int size, int ret_size)
 {
 	int i;
+	NTSTATUS status;
 
 	if (buf[0] == 0) memset(buf, 1, sizeof(buf));
 
 	i = find_handle(handle);
-	if (cli_write(c, ftable[i].fd, 0, buf, offset, size) != ret_size) {
-		printf("(%d) ERROR: write failed on handle %d, fd %d \
-errno %d (%s)\n", line_count, handle, ftable[i].fd, errno, strerror(errno));
+	status = cli_writeall(c, ftable[i].fd, 0, (uint8_t *)buf, offset, size,
+			      NULL);
+	if (!NT_STATUS_IS_OK(status)) {
+		printf("(%d) ERROR: write failed on handle %d, fd %d "
+		       "error %s\n", line_count, handle, ftable[i].fd,
+		       nt_errstr(status));
 		exit(1);
 	}
 
@@ -301,13 +306,13 @@
 		printf("asprintf failed\n");
 		return NT_STATUS_NO_MEMORY;
 	}
-	if (finfo->mode & aDIR) {
+	if (finfo->mode & FILE_ATTRIBUTE_DIRECTORY) {
 		char *s2;
 		if (asprintf(&s2, "%s\\*", s) == -1) {
 			printf("asprintf failed\n");
 			return NT_STATUS_NO_MEMORY;
 		}
-		status = cli_list(c, s2, aDIR, delete_fn, NULL);
+		status = cli_list(c, s2, FILE_ATTRIBUTE_DIRECTORY, delete_fn, NULL);
 		if (!NT_STATUS_IS_OK(status)) {
 			free(n);
 			free(s2);
@@ -332,7 +337,7 @@
 	}
 
 	total_deleted = 0;
-	cli_list(c, mask, aDIR, delete_fn, NULL);
+	cli_list(c, mask, FILE_ATTRIBUTE_DIRECTORY, delete_fn, NULL);
 	free(mask);
 	cli_rmdir(c, dname);
 

Modified: branches/samba/experimental/source3/torture/proto.h
===================================================================
--- branches/samba/experimental/source3/torture/proto.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/torture/proto.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -23,6 +23,8 @@
 #ifndef __TORTURE_H__
 #define __TORTURE_H__
 
+struct cli_state;
+
 /* The following definitions come from torture/denytest.c  */
 
 bool torture_denytest1(int dummy);

Modified: branches/samba/experimental/source3/torture/scanner.c
===================================================================
--- branches/samba/experimental/source3/torture/scanner.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/torture/scanner.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -20,6 +20,7 @@
 #include "includes.h"
 #include "system/filesys.h"
 #include "torture/proto.h"
+#include "libsmb/libsmb.h"
 
 #define VERBOSE 0
 #define OP_MIN 0
@@ -172,7 +173,7 @@
 
 	status = try_trans2_len(cli, "newfile", op, level, param, data, param_len, &data_len, 
 				&rparam_len, &rdata_len);
-	cli_unlink(cli, "\\newfile.dat", aSYSTEM | aHIDDEN);
+	cli_unlink(cli, "\\newfile.dat", FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 	cli_rmdir(cli, "\\newfile.dat");
 	if (NT_STATUS_IS_OK(status)) return True;
 
@@ -379,7 +380,7 @@
 
 	status = try_nttrans_len(cli, "newfile", op, level, param, data, param_len, &data_len, 
 				&rparam_len, &rdata_len);
-	cli_unlink(cli, "\\newfile.dat", aSYSTEM | aHIDDEN);
+	cli_unlink(cli, "\\newfile.dat", FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 	cli_rmdir(cli, "\\newfile.dat");
 	if (NT_STATUS_IS_OK(status)) return True;
 

Modified: branches/samba/experimental/source3/torture/test_async_echo.c
===================================================================
--- branches/samba/experimental/source3/torture/test_async_echo.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/torture/test_async_echo.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -19,6 +19,7 @@
 
 #include "includes.h"
 #include "torture/proto.h"
+#include "libsmb/libsmb.h"
 #include "rpc_client/cli_pipe.h"
 #include "librpc/gen_ndr/ndr_echo_c.h"
 

Copied: branches/samba/experimental/source3/torture/test_case_insensitive.c (from rev 3778, tags/samba/upstream_3.6.0~rc1/source3/torture/test_case_insensitive.c)
===================================================================
--- branches/samba/experimental/source3/torture/test_case_insensitive.c	                        (rev 0)
+++ branches/samba/experimental/source3/torture/test_case_insensitive.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -0,0 +1,80 @@
+/*
+   Unix SMB/CIFS implementation.
+   reproducer for bug 8042
+   Copyright (C) Volker Lendecke 2011
+
+   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/>.
+*/
+
+#include "includes.h"
+#include "torture/proto.h"
+#include "system/filesys.h"
+#include "libsmb/libsmb.h"
+
+/*
+ * Regression test file creates on case insensitive file systems (e.g. OS/X)
+ * https://bugzilla.samba.org/show_bug.cgi?id=8042
+ */
+
+bool run_case_insensitive_create(int dummy)
+{
+	struct cli_state *cli;
+	uint16_t fnum;
+	NTSTATUS status;
+
+	printf("Starting case_insensitive_create\n");
+
+	if (!torture_open_connection(&cli, 0)) {
+		return false;
+	}
+
+	status = cli_mkdir(cli, "x");
+	if (!NT_STATUS_IS_OK(status)) {
+		printf("cli_mkdir failed: %s\n", nt_errstr(status));
+		goto done;
+	}
+	status = cli_chkpath(cli, "X");
+	if (!NT_STATUS_IS_OK(status)) {
+		printf("cli_chkpath failed: %s\n", nt_errstr(status));
+		goto rmdir;
+	}
+	status = cli_open(cli, "x\\y", O_RDWR|O_CREAT, 0, &fnum);
+	if (!NT_STATUS_IS_OK(status)) {
+		printf("cli_open failed: %s\n", nt_errstr(status));
+
+		if (NT_STATUS_EQUAL(status, NT_STATUS_FILE_IS_A_DIRECTORY)) {
+			printf("Bug 8042 reappeared!!\n");
+		}
+		goto unlink;
+	}
+	status = cli_close(cli, fnum);
+	if (!NT_STATUS_IS_OK(status)) {
+		printf("cli_close failed: %s\n", nt_errstr(status));
+		goto done;
+	}
+unlink:
+	status = cli_unlink(cli, "x\\y", 0);
+	if (!NT_STATUS_IS_OK(status)) {
+		printf("cli_unlink failed: %s\n", nt_errstr(status));
+		goto done;
+	}
+rmdir:
+	status = cli_rmdir(cli, "x");
+	if (!NT_STATUS_IS_OK(status)) {
+		printf("cli_close failed: %s\n", nt_errstr(status));
+	}
+done:
+	torture_close_connection(cli);
+	return NT_STATUS_IS_OK(status);
+}

Copied: branches/samba/experimental/source3/torture/test_notify_online.c (from rev 3778, tags/samba/upstream_3.6.0~rc1/source3/torture/test_notify_online.c)
===================================================================
--- branches/samba/experimental/source3/torture/test_notify_online.c	                        (rev 0)
+++ branches/samba/experimental/source3/torture/test_notify_online.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -0,0 +1,294 @@
+/*
+   Unix SMB/CIFS implementation.
+   Make sure that for offline files pread and pwrite trigger a notify
+   Copyright (C) Volker Lendecke 2011
+
+   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/>.
+*/
+
+#include "includes.h"
+#include "torture/proto.h"
+#include "libcli/security/security.h"
+#include "lib/util/tevent_ntstatus.h"
+#include "libsmb/libsmb.h"
+
+extern char *test_filename;
+
+struct notify_online_state {
+	struct tevent_context *ev;
+	struct cli_state *cli;
+	uint16_t dnum;
+	const char *fname;
+	uint16_t fnum;
+	bool got_notify;
+};
+
+static void notify_online_opened_dir(struct tevent_req *subreq);
+static void notify_online_notify_callback(struct tevent_req *subreq);
+static void notify_online_opened_file(struct tevent_req *subreq);
+static void notify_online_sent_read(struct tevent_req *subreq);
+static void notify_online_sent_closefile(struct tevent_req *subreq);
+static void notify_online_waited(struct tevent_req *subreq);
+static void notify_online_sent_closedir(struct tevent_req *subreq);
+
+static struct tevent_req *notify_online_send(
+	TALLOC_CTX *mem_ctx, struct tevent_context *ev,
+	struct cli_state *cli, const char *dname, const char *fname)
+{
+	struct tevent_req *req, *subreq;
+	struct notify_online_state *state;
+
+	req = tevent_req_create(mem_ctx, &state, struct notify_online_state);
+	if (req == NULL) {
+		return NULL;
+	}
+	state->ev = ev;
+	state->cli = cli;
+	state->fname = fname;
+
+	subreq = cli_ntcreate_send(
+		state, ev, cli, dname, EXTENDED_RESPONSE_REQUIRED,
+		SEC_FILE_READ_DATA, 0,
+		FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
+		FILE_OPEN, 0, 0);
+	if (tevent_req_nomem(subreq, req)) {
+		return tevent_req_post(req, ev);
+	}
+	tevent_req_set_callback(subreq, notify_online_opened_dir, req);
+	return req;
+}
+
+static void notify_online_opened_dir(struct tevent_req *subreq)
+{
+	struct tevent_req *req = tevent_req_callback_data(
+		subreq, struct tevent_req);
+	struct notify_online_state *state = tevent_req_data(
+		req, struct notify_online_state);
+	NTSTATUS status;
+
+	status = cli_ntcreate_recv(subreq, &state->dnum);
+	TALLOC_FREE(subreq);
+	if (tevent_req_nterror(req, status)) {
+		return;
+	}
+	subreq = cli_notify_send(state, state->ev, state->cli, state->dnum,
+				 128, FILE_NOTIFY_CHANGE_ATTRIBUTES, false);
+	if (tevent_req_nomem(subreq, req)) {
+		return;
+	}
+	tevent_req_set_callback(subreq, notify_online_notify_callback, req);
+
+	subreq = cli_ntcreate_send(
+		state, state->ev, state->cli, state->fname, 0,
+		GENERIC_READ_ACCESS, FILE_ATTRIBUTE_NORMAL,
+		FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,
+		FILE_OPEN, FILE_NON_DIRECTORY_FILE, 0);
+	if (tevent_req_nomem(subreq, req)) {
+		return;
+	}
+	tevent_req_set_callback(subreq, notify_online_opened_file, req);
+}
+
+static void notify_online_notify_callback(struct tevent_req *subreq)
+{
+	struct tevent_req *req = tevent_req_callback_data(
+		subreq, struct tevent_req);
+	struct notify_online_state *state = tevent_req_data(
+		req, struct notify_online_state);
+	NTSTATUS status;
+	uint32_t num_changes;
+	struct notify_change *changes;
+
+	status = cli_notify_recv(subreq, state, &num_changes, &changes);
+	TALLOC_FREE(subreq);
+	if (tevent_req_nterror(req, status)) {
+		return;
+	}
+	if ((num_changes == 1)
+	    && (changes[0].action == NOTIFY_ACTION_MODIFIED)
+	    && (strcmp(changes[0].name, state->fname) == 0)) {
+		state->got_notify = true;
+	}
+	tevent_req_done(req);
+}
+
+static void notify_online_opened_file(struct tevent_req *subreq)
+{
+	struct tevent_req *req = tevent_req_callback_data(
+		subreq, struct tevent_req);
+	struct notify_online_state *state = tevent_req_data(
+		req, struct notify_online_state);
+	NTSTATUS status;
+
+	status = cli_ntcreate_recv(subreq, &state->fnum);
+	TALLOC_FREE(subreq);
+	if (tevent_req_nterror(req, status)) {
+		return;
+	}
+	subreq = cli_read_andx_send(
+		state, state->ev, state->cli, state->fnum, 0, 1);
+	if (tevent_req_nomem(subreq, req)) {
+		return;
+	}
+	tevent_req_set_callback(subreq, notify_online_sent_read, req);
+}
+
+static void notify_online_sent_read(struct tevent_req *subreq)
+{
+	struct tevent_req *req = tevent_req_callback_data(
+		subreq, struct tevent_req);
+	struct notify_online_state *state = tevent_req_data(
+		req, struct notify_online_state);
+	NTSTATUS status;
+	ssize_t received;
+	uint8_t *buf;
+
+	status = cli_read_andx_recv(subreq, &received, &buf);
+	TALLOC_FREE(subreq);
+	if (tevent_req_nterror(req, status)) {
+		return;
+	}
+	subreq = cli_close_send(
+		state, state->ev, state->cli, state->fnum);
+	if (tevent_req_nomem(subreq, req)) {
+		return;
+	}
+	tevent_req_set_callback(subreq, notify_online_sent_closefile, req);
+}
+
+static void notify_online_sent_closefile(struct tevent_req *subreq)
+{
+	struct tevent_req *req = tevent_req_callback_data(
+		subreq, struct tevent_req);
+	struct notify_online_state *state = tevent_req_data(
+		req, struct notify_online_state);
+	NTSTATUS status;
+
+	status = cli_close_recv(subreq);
+	TALLOC_FREE(subreq);
+	if (tevent_req_nterror(req, status)) {
+		return;
+	}
+	subreq = tevent_wakeup_send(
+		state, state->ev, timeval_current_ofs(10, 0));
+	if (tevent_req_nomem(subreq, req)) {
+		return;
+	}
+	tevent_req_set_callback(subreq, notify_online_waited, req);
+}
+
+static void notify_online_waited(struct tevent_req *subreq)
+{
+	struct tevent_req *req = tevent_req_callback_data(
+		subreq, struct tevent_req);
+	struct notify_online_state *state = tevent_req_data(
+		req, struct notify_online_state);
+
+	tevent_wakeup_recv(subreq);
+	TALLOC_FREE(subreq);
+	subreq = cli_close_send(
+		state, state->ev, state->cli, state->dnum);
+	if (tevent_req_nomem(subreq, req)) {
+		return;
+	}
+	tevent_req_set_callback(subreq, notify_online_sent_closedir, req);
+}
+
+static void notify_online_sent_closedir(struct tevent_req *subreq)
+{
+	struct tevent_req *req = tevent_req_callback_data(
+		subreq, struct tevent_req);
+	NTSTATUS status;
+
+	status = cli_close_recv(subreq);
+	TALLOC_FREE(subreq);
+	if (tevent_req_nterror(req, status)) {
+		return;
+	}
+}
+
+static NTSTATUS notify_online_recv(struct tevent_req *req, bool *got_notify)
+{
+	struct notify_online_state *state = tevent_req_data(
+		req, struct notify_online_state);
+	NTSTATUS status;
+
+	if (tevent_req_is_nterror(req, &status)) {
+		return status;
+	}
+	*got_notify = state->got_notify;
+	return NT_STATUS_OK;
+}
+
+static NTSTATUS notify_online(struct cli_state *cli,
+			      const char *dirname, const char *filename,
+			      bool *got_notify)
+{
+	TALLOC_CTX *frame = talloc_stackframe();
+	struct event_context *ev;
+	struct tevent_req *req;
+	NTSTATUS status = NT_STATUS_NO_MEMORY;
+
+	ev = event_context_init(frame);
+	if (ev == NULL) {
+		goto fail;
+	}
+	req = notify_online_send(frame, ev, cli, dirname, filename);
+	if (req == NULL) {
+		goto fail;
+	}
+	if (!tevent_req_poll_ntstatus(req, ev, &status)) {
+		goto fail;
+	}
+	status = notify_online_recv(req, got_notify);
+ fail:
+	TALLOC_FREE(frame);
+	return status;
+}
+
+bool run_notify_online(int dummy)
+{
+	struct cli_state *cli;
+	NTSTATUS status;
+	char *p;
+	const char *dir;
+	const char *file;
+	bool got_notify = false;
+
+	printf("Starting NOTIFY_ONLINE\n");
+
+	if (test_filename == NULL) {
+		fprintf(stderr, "<-f filename> missing\n");
+		return false;
+	}
+
+	if (!torture_open_connection(&cli, 0)) {
+		return false;
+	}
+
+	p = strrchr(test_filename, '/');
+	if (p != NULL) {
+		dir = SMB_STRNDUP(test_filename, p-test_filename);
+		file = SMB_STRDUP(p+1);
+	} else {
+		dir = "";
+		file = test_filename;
+	}
+
+	status = notify_online(cli, dir, file, &got_notify);
+	d_printf("notify_online returned %s (%d)\n", nt_errstr(status),
+		 (int)got_notify);
+	torture_close_connection(cli);
+	return NT_STATUS_IS_OK(status) && got_notify;
+}

Modified: branches/samba/experimental/source3/torture/test_posix_append.c
===================================================================
--- branches/samba/experimental/source3/torture/test_posix_append.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/torture/test_posix_append.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -20,6 +20,7 @@
 #include "includes.h"
 #include "torture/proto.h"
 #include "../libcli/security/security.h"
+#include "libsmb/libsmb.h"
 
 /*
  * Make sure that GENERIC_WRITE does not trigger append. See
@@ -32,9 +33,8 @@
 	const char *fname = "append";
 	NTSTATUS status;
 	uint16_t fnum;
-	ssize_t written;
 	SMB_OFF_T size;
-	char c = '\0';
+	uint8_t c = '\0';
 	bool ret = false;
 
 	printf("Starting POSIX_APPEND\n");
@@ -69,14 +69,14 @@
 	 * with a file of 2 byte length.
 	 */
 
-	written = cli_write(cli, fnum, 0, &c, 0, sizeof(c));
-	if (written != sizeof(c)) {
-		printf("cli_write failed\n");
+	status = cli_writeall(cli, fnum, 0, &c, 0, sizeof(c), NULL);
+	if (!NT_STATUS_IS_OK(status)) {
+		printf("cli_write failed: %s\n", nt_errstr(status));
 		goto fail;
 	}
-	written = cli_write(cli, fnum, 0, &c, 0, sizeof(c));
-	if (written != sizeof(c)) {
-		printf("cli_write failed\n");
+	status = cli_writeall(cli, fnum, 0, &c, 0, sizeof(c), NULL);
+	if (!NT_STATUS_IS_OK(status)) {
+		printf("cli_write failed: %s\n", nt_errstr(status));
 		goto fail;
 	}
 

Modified: branches/samba/experimental/source3/torture/torture.c
===================================================================
--- branches/samba/experimental/source3/torture/torture.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/torture/torture.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -31,9 +31,12 @@
 #include "dbwrap.h"
 #include "talloc_dict.h"
 #include "async_smb.h"
+#include "libsmb/libsmb.h"
 #include "libsmb/clirap.h"
 #include "trans2.h"
 #include "libsmb/nmblib.h"
+#include "../lib/util/tevent_ntstatus.h"
+#include "util_tdb.h"
 
 extern char *optarg;
 extern int optind;
@@ -578,6 +581,7 @@
 
 	for (i=0;i<torture_numops;i++) {
 		unsigned n = (unsigned)sys_random()%10;
+
 		if (i % 10 == 0) {
 			printf("%d\r", i); fflush(stdout);
 		}
@@ -593,16 +597,20 @@
 			break;
 		}
 
-		if (cli_write(c, fnum, 0, (char *)&pid, 0, sizeof(pid)) != sizeof(pid)) {
-			printf("write failed (%s)\n", cli_errstr(c));
+		status = cli_writeall(c, fnum, 0, (uint8_t *)&pid, 0,
+				      sizeof(pid), NULL);
+		if (!NT_STATUS_IS_OK(status)) {
+			printf("write failed (%s)\n", nt_errstr(status));
 			correct = False;
 		}
 
 		for (j=0;j<50;j++) {
-			if (cli_write(c, fnum, 0, (char *)buf, 
-				      sizeof(pid)+(j*sizeof(buf)), 
-				      sizeof(buf)) != sizeof(buf)) {
-				printf("write failed (%s)\n", cli_errstr(c));
+			status = cli_writeall(c, fnum, 0, (uint8_t *)buf,
+					      sizeof(pid)+(j*sizeof(buf)),
+					      sizeof(buf), NULL);
+			if (!NT_STATUS_IS_OK(status)) {
+				printf("write failed (%s)\n",
+				       nt_errstr(status));
 				correct = False;
 			}
 		}
@@ -624,7 +632,7 @@
 			correct = False;
 		}
 
-		if (!NT_STATUS_IS_OK(cli_unlink(c, fname, aSYSTEM | aHIDDEN))) {
+		if (!NT_STATUS_IS_OK(cli_unlink(c, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN))) {
 			printf("unlink failed (%s)\n", cli_errstr(c));
 			correct = False;
 		}
@@ -636,7 +644,7 @@
 	}
 
 	cli_close(c, fnum2);
-	cli_unlink(c, lockfname, aSYSTEM | aHIDDEN);
+	cli_unlink(c, lockfname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	printf("%d\n", i);
 
@@ -681,7 +689,7 @@
 
 	if (procnum == 0)
 	{
-		if (!NT_STATUS_IS_OK(cli_unlink(c, lockfname, aSYSTEM | aHIDDEN))) {
+		if (!NT_STATUS_IS_OK(cli_unlink(c, lockfname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN))) {
 			printf("unlink failed (%s) (normal, this file should not exist)\n", cli_errstr(c));
 		}
 
@@ -728,8 +736,11 @@
 				sent = sizeof(buf) - count;
 			}
 
-			if (cli_write(c, fnum, 0, buf+count, count, (size_t)sent) != sent) {
-				printf("write failed (%s)\n", cli_errstr(c));
+			status = cli_writeall(c, fnum, 0, (uint8_t *)buf+count,
+					      count, (size_t)sent, NULL);
+			if (!NT_STATUS_IS_OK(status)) {
+				printf("write failed (%s)\n",
+				       nt_errstr(status));
 				correct = False;
 			}
 		}
@@ -778,7 +789,7 @@
 	bool correct = True;
 	ssize_t bytes_read;
 
-	if (!NT_STATUS_IS_OK(cli_unlink(c1, lockfname, aSYSTEM | aHIDDEN))) {
+	if (!NT_STATUS_IS_OK(cli_unlink(c1, lockfname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN))) {
 		printf("unlink failed (%s) (normal, this file should not exist)\n", cli_errstr(c1));
 	}
 
@@ -798,6 +809,7 @@
 
 	for (i=0;i<torture_numops;i++)
 	{
+		NTSTATUS status;
 		size_t buf_size = ((unsigned)sys_random()%(sizeof(buf)-1))+ 1;
 		if (i % 10 == 0) {
 			printf("%d\r", i); fflush(stdout);
@@ -805,8 +817,10 @@
 
 		generate_random_buffer((unsigned char *)buf, buf_size);
 
-		if (cli_write(c1, fnum1, 0, buf, 0, buf_size) != buf_size) {
-			printf("write failed (%s)\n", cli_errstr(c1));
+		status = cli_writeall(c1, fnum1, 0, (uint8_t *)buf, 0,
+				      buf_size, NULL);
+		if (!NT_STATUS_IS_OK(status)) {
+			printf("write failed (%s)\n", nt_errstr(status));
 			correct = False;
 			break;
 		}
@@ -836,7 +850,7 @@
 		correct = False;
 	}
 
-	if (!NT_STATUS_IS_OK(cli_unlink(c1, lockfname, aSYSTEM | aHIDDEN))) {
+	if (!NT_STATUS_IS_OK(cli_unlink(c1, lockfname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN))) {
 		printf("unlink failed (%s)\n", cli_errstr(c1));
 		correct = False;
 	}
@@ -922,14 +936,14 @@
 
 	printf("starting readwritelarge_internal\n");
 
-	cli_unlink(cli1, lockfname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli1, lockfname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	if (!NT_STATUS_IS_OK(cli_open(cli1, lockfname, O_RDWR | O_CREAT | O_EXCL, DENY_NONE, &fnum1))) {
 		printf("open read/write of %s failed (%s)\n", lockfname, cli_errstr(cli1));
 		return False;
 	}
 
-	cli_write(cli1, fnum1, 0, buf, 0, sizeof(buf));
+	cli_writeall(cli1, fnum1, 0, (uint8_t *)buf, 0, sizeof(buf), NULL);
 
 	if (!NT_STATUS_IS_OK(cli_qfileinfo_basic(
 				     cli1, fnum1, NULL, &fsize, NULL, NULL,
@@ -952,7 +966,7 @@
 		correct = False;
 	}
 
-	if (!NT_STATUS_IS_OK(cli_unlink(cli1, lockfname, aSYSTEM | aHIDDEN))) {
+	if (!NT_STATUS_IS_OK(cli_unlink(cli1, lockfname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN))) {
 		printf("unlink failed (%s)\n", cli_errstr(cli1));
 		correct = False;
 	}
@@ -1169,7 +1183,7 @@
 
 	printf("starting locktest1\n");
 
-	cli_unlink(cli1, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	if (!NT_STATUS_IS_OK(cli_open(cli1, fname, O_RDWR|O_CREAT|O_EXCL, DENY_NONE, &fnum1))) {
 		printf("open of %s failed (%s)\n", fname, cli_errstr(cli1));
@@ -1241,7 +1255,7 @@
 		return False;
 	}
 
-	if (!NT_STATUS_IS_OK(cli_unlink(cli1, fname, aSYSTEM | aHIDDEN))) {
+	if (!NT_STATUS_IS_OK(cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN))) {
 		printf("unlink failed (%s)\n", cli_errstr(cli1));
 		return False;
 	}
@@ -1283,7 +1297,7 @@
 
 	printf("starting tcontest\n");
 
-	cli_unlink(cli, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	if (!NT_STATUS_IS_OK(cli_open(cli, fname, O_RDWR|O_CREAT|O_EXCL, DENY_NONE, &fnum1))) {
 		printf("open of %s failed (%s)\n", fname, cli_errstr(cli));
@@ -1293,8 +1307,9 @@
 	cnum1 = cli->cnum;
 	vuid1 = cli->vuid;
 
-	if (cli_write(cli, fnum1, 0, buf, 130, 4) != 4) {
-		printf("initial write failed (%s)", cli_errstr(cli));
+	status = cli_writeall(cli, fnum1, 0, (uint8_t *)buf, 130, 4, NULL);
+	if (!NT_STATUS_IS_OK(status)) {
+		printf("initial write failed (%s)", nt_errstr(status));
 		return False;
 	}
 
@@ -1314,33 +1329,39 @@
 	/* try a write with the wrong tid */
 	cli->cnum = cnum2;
 
-	if (cli_write(cli, fnum1, 0, buf, 130, 4) == 4) {
+	status = cli_writeall(cli, fnum1, 0, (uint8_t *)buf, 130, 4, NULL);
+	if (NT_STATUS_IS_OK(status)) {
 		printf("* server allows write with wrong TID\n");
 		ret = False;
 	} else {
-		printf("server fails write with wrong TID : %s\n", cli_errstr(cli));
+		printf("server fails write with wrong TID : %s\n",
+		       nt_errstr(status));
 	}
 
 
 	/* try a write with an invalid tid */
 	cli->cnum = cnum3;
 
-	if (cli_write(cli, fnum1, 0, buf, 130, 4) == 4) {
+	status = cli_writeall(cli, fnum1, 0, (uint8_t *)buf, 130, 4, NULL);
+	if (NT_STATUS_IS_OK(status)) {
 		printf("* server allows write with invalid TID\n");
 		ret = False;
 	} else {
-		printf("server fails write with invalid TID : %s\n", cli_errstr(cli));
+		printf("server fails write with invalid TID : %s\n",
+		       nt_errstr(status));
 	}
 
 	/* try a write with an invalid vuid */
 	cli->vuid = vuid2;
 	cli->cnum = cnum1;
 
-	if (cli_write(cli, fnum1, 0, buf, 130, 4) == 4) {
+	status = cli_writeall(cli, fnum1, 0, (uint8_t *)buf, 130, 4, NULL);
+	if (NT_STATUS_IS_OK(status)) {
 		printf("* server allows write with invalid VUID\n");
 		ret = False;
 	} else {
-		printf("server fails write with invalid VUID : %s\n", cli_errstr(cli));
+		printf("server fails write with invalid VUID : %s\n",
+		       nt_errstr(status));
 	}
 
 	cli->cnum = cnum1;
@@ -1543,7 +1564,7 @@
 
 	printf("starting locktest2\n");
 
-	cli_unlink(cli, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	cli_setpid(cli, 1);
 
@@ -1680,7 +1701,7 @@
 
 	printf("starting locktest3\n");
 
-	cli_unlink(cli1, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	if (!NT_STATUS_IS_OK(cli_open(cli1, fname, O_RDWR|O_CREAT|O_EXCL, DENY_NONE, &fnum1))) {
 		printf("open of %s failed (%s)\n", fname, cli_errstr(cli1));
@@ -1760,7 +1781,7 @@
 		return False;
 	}
 
-	if (!NT_STATUS_IS_OK(cli_unlink(cli1, fname, aSYSTEM | aHIDDEN))) {
+	if (!NT_STATUS_IS_OK(cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN))) {
 		printf("unlink failed (%s)\n", cli_errstr(cli1));
 		return False;
 	}
@@ -1793,6 +1814,7 @@
 	bool ret;
 	char buf[1000];
 	bool correct = True;
+	NTSTATUS status;
 
 	if (!torture_open_connection(&cli1, 0) || !torture_open_connection(&cli2, 1)) {
 		return False;
@@ -1803,15 +1825,17 @@
 
 	printf("starting locktest4\n");
 
-	cli_unlink(cli1, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	cli_open(cli1, fname, O_RDWR|O_CREAT|O_EXCL, DENY_NONE, &fnum1);
 	cli_open(cli2, fname, O_RDWR, DENY_NONE, &fnum2);
 
 	memset(buf, 0, sizeof(buf));
 
-	if (cli_write(cli1, fnum1, 0, buf, 0, sizeof(buf)) != sizeof(buf)) {
-		printf("Failed to create file\n");
+	status = cli_writeall(cli1, fnum1, 0, (uint8_t *)buf, 0, sizeof(buf),
+			      NULL);
+	if (!NT_STATUS_IS_OK(status)) {
+		printf("Failed to create file: %s\n", nt_errstr(status));
 		correct = False;
 		goto fail;
 	}
@@ -1883,8 +1907,12 @@
 	EXPECTED(ret, False);
 	printf("this server %s strict write locking\n", ret?"doesn't do":"does");
 
-	ret = cli_lock(cli1, fnum1, 130, 4, 0, READ_LOCK) &&
-	      (cli_write(cli2, fnum2, 0, buf, 130, 4) == 4);
+	ret = cli_lock(cli1, fnum1, 130, 4, 0, READ_LOCK);
+	if (ret) {
+		status = cli_writeall(cli2, fnum2, 0, (uint8_t *)buf, 130, 4,
+				      NULL);
+		ret = NT_STATUS_IS_OK(status);
+	}
 	EXPECTED(ret, False);
 	printf("this server %s strict read locking\n", ret?"doesn't do":"does");
 
@@ -1901,21 +1929,24 @@
 	      cli_lock(cli1, fnum1, 150, 4, 0, READ_LOCK) &&
 	      NT_STATUS_IS_OK(cli_unlock(cli1, fnum1, 150, 4)) &&
 	      (cli_read(cli2, fnum2, buf, 150, 4) == 4) &&
-	      !(cli_write(cli2, fnum2, 0, buf, 150, 4) == 4) &&
+	      !(NT_STATUS_IS_OK(cli_writeall(cli2, fnum2, 0, (uint8_t *)buf,
+					     150, 4, NULL))) &&
 	      NT_STATUS_IS_OK(cli_unlock(cli1, fnum1, 150, 4));
 	EXPECTED(ret, True);
 	printf("this server %s do recursive lock overlays\n", ret?"does":"doesn't");
 
 	ret = cli_lock(cli1, fnum1, 160, 4, 0, READ_LOCK) &&
 	      NT_STATUS_IS_OK(cli_unlock(cli1, fnum1, 160, 4)) &&
-	      (cli_write(cli2, fnum2, 0, buf, 160, 4) == 4) &&		
+	      NT_STATUS_IS_OK(cli_writeall(cli2, fnum2, 0, (uint8_t *)buf,
+					   160, 4, NULL)) &&
 	      (cli_read(cli2, fnum2, buf, 160, 4) == 4);		
 	EXPECTED(ret, True);
 	printf("the same process %s remove a read lock using write locking\n", ret?"can":"cannot");
 
 	ret = cli_lock(cli1, fnum1, 170, 4, 0, WRITE_LOCK) &&
 	      NT_STATUS_IS_OK(cli_unlock(cli1, fnum1, 170, 4)) &&
-	      (cli_write(cli2, fnum2, 0, buf, 170, 4) == 4) &&		
+	      NT_STATUS_IS_OK(cli_writeall(cli2, fnum2, 0, (uint8_t *)buf,
+					   170, 4, NULL)) &&
 	      (cli_read(cli2, fnum2, buf, 170, 4) == 4);		
 	EXPECTED(ret, True);
 	printf("the same process %s remove a write lock using read locking\n", ret?"can":"cannot");
@@ -1923,7 +1954,8 @@
 	ret = cli_lock(cli1, fnum1, 190, 4, 0, WRITE_LOCK) &&
 	      cli_lock(cli1, fnum1, 190, 4, 0, READ_LOCK) &&
 	      NT_STATUS_IS_OK(cli_unlock(cli1, fnum1, 190, 4)) &&
-	      !(cli_write(cli2, fnum2, 0, buf, 190, 4) == 4) &&		
+	      !NT_STATUS_IS_OK(cli_writeall(cli2, fnum2, 0, (uint8_t *)buf,
+					    190, 4, NULL)) &&
 	      (cli_read(cli2, fnum2, buf, 190, 4) == 4);		
 	EXPECTED(ret, True);
 	printf("the same process %s remove the first lock first\n", ret?"does":"doesn't");
@@ -1945,7 +1977,7 @@
  fail:
 	cli_close(cli1, fnum1);
 	cli_close(cli2, fnum2);
-	cli_unlink(cli1, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 	torture_close_connection(cli1);
 	torture_close_connection(cli2);
 
@@ -1964,6 +1996,7 @@
 	bool ret;
 	char buf[1000];
 	bool correct = True;
+	NTSTATUS status;
 
 	if (!torture_open_connection(&cli1, 0) || !torture_open_connection(&cli2, 1)) {
 		return False;
@@ -1974,7 +2007,7 @@
 
 	printf("starting locktest5\n");
 
-	cli_unlink(cli1, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	cli_open(cli1, fname, O_RDWR|O_CREAT|O_EXCL, DENY_NONE, &fnum1);
 	cli_open(cli2, fname, O_RDWR, DENY_NONE, &fnum2);
@@ -1982,8 +2015,10 @@
 
 	memset(buf, 0, sizeof(buf));
 
-	if (cli_write(cli1, fnum1, 0, buf, 0, sizeof(buf)) != sizeof(buf)) {
-		printf("Failed to create file\n");
+	status = cli_writeall(cli1, fnum1, 0, (uint8_t *)buf, 0, sizeof(buf),
+			      NULL);
+	if (!NT_STATUS_IS_OK(status)) {
+		printf("Failed to create file: %s\n", nt_errstr(status));
 		correct = False;
 		goto fail;
 	}
@@ -2064,7 +2099,7 @@
  fail:
 	cli_close(cli1, fnum1);
 	cli_close(cli2, fnum2);
-	cli_unlink(cli1, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 	if (!torture_close_connection(cli1)) {
 		correct = False;
 	}
@@ -2099,7 +2134,7 @@
 	for (i=0;i<1;i++) {
 		printf("Testing %s\n", fname[i]);
 
-		cli_unlink(cli, fname[i], aSYSTEM | aHIDDEN);
+		cli_unlink(cli, fname[i], FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 		cli_open(cli, fname[i], O_RDWR|O_CREAT|O_EXCL, DENY_NONE, &fnum);
 		status = cli_locktype(cli, fnum, 0, 8, 0, LOCKING_ANDX_CHANGE_LOCKTYPE);
@@ -2111,7 +2146,7 @@
 		cli_close(cli, fnum);
 		printf("CANCEL_LOCK gave %s\n", nt_errstr(status));
 
-		cli_unlink(cli, fname[i], aSYSTEM | aHIDDEN);
+		cli_unlink(cli, fname[i], FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 	}
 
 	torture_close_connection(cli);
@@ -2127,6 +2162,7 @@
 	uint16_t fnum1;
 	char buf[200];
 	bool correct = False;
+	NTSTATUS status;
 
 	if (!torture_open_connection(&cli1, 0)) {
 		return False;
@@ -2136,14 +2172,16 @@
 
 	printf("starting locktest7\n");
 
-	cli_unlink(cli1, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	cli_open(cli1, fname, O_RDWR|O_CREAT|O_EXCL, DENY_NONE, &fnum1);
 
 	memset(buf, 0, sizeof(buf));
 
-	if (cli_write(cli1, fnum1, 0, buf, 0, sizeof(buf)) != sizeof(buf)) {
-		printf("Failed to create file\n");
+	status = cli_writeall(cli1, fnum1, 0, (uint8_t *)buf, 0, sizeof(buf),
+			      NULL);
+	if (!NT_STATUS_IS_OK(status)) {
+		printf("Failed to create file: %s\n", nt_errstr(status));
 		goto fail;
 	}
 
@@ -2163,9 +2201,11 @@
 		printf("pid1 successfully read the range 130:4\n");
 	}
 
-	if (cli_write(cli1, fnum1, 0, buf, 130, 4) != 4) {
-		printf("pid1 unable to write to the range 130:4, error was %s\n", cli_errstr(cli1));
-		if (NT_STATUS_V(cli_nt_error(cli1)) != NT_STATUS_V(NT_STATUS_FILE_LOCK_CONFLICT)) {
+	status = cli_writeall(cli1, fnum1, 0, (uint8_t *)buf, 130, 4, NULL);
+	if (!NT_STATUS_IS_OK(status)) {
+		printf("pid1 unable to write to the range 130:4, error was "
+		       "%s\n", nt_errstr(status));
+		if (!NT_STATUS_EQUAL(status, NT_STATUS_FILE_LOCK_CONFLICT)) {
 			printf("Incorrect error (should be NT_STATUS_FILE_LOCK_CONFLICT)\n");
 			goto fail;
 		}
@@ -2182,9 +2222,11 @@
 		printf("pid2 successfully read the range 130:4\n");
 	}
 
-	if (cli_write(cli1, fnum1, 0, buf, 130, 4) != 4) {
-		printf("pid2 unable to write to the range 130:4, error was %s\n", cli_errstr(cli1));
-		if (NT_STATUS_V(cli_nt_error(cli1)) != NT_STATUS_V(NT_STATUS_FILE_LOCK_CONFLICT)) {
+	status = cli_writeall(cli1, fnum1, 0, (uint8_t *)buf, 130, 4, NULL);
+	if (!NT_STATUS_IS_OK(status)) {
+		printf("pid2 unable to write to the range 130:4, error was "
+		       "%s\n", nt_errstr(status));
+		if (!NT_STATUS_EQUAL(status, NT_STATUS_FILE_LOCK_CONFLICT)) {
 			printf("Incorrect error (should be NT_STATUS_FILE_LOCK_CONFLICT)\n");
 			goto fail;
 		}
@@ -2210,8 +2252,10 @@
 		printf("pid1 successfully read the range 130:4\n");
 	}
 
-	if (cli_write(cli1, fnum1, 0, buf, 130, 4) != 4) {
-		printf("pid1 unable to write to the range 130:4, error was %s\n", cli_errstr(cli1));
+	status = cli_writeall(cli1, fnum1, 0, (uint8_t *)buf, 130, 4, NULL);
+	if (!NT_STATUS_IS_OK(status)) {
+		printf("pid1 unable to write to the range 130:4, error was "
+		       "%s\n", nt_errstr(status));
 		goto fail;
 	} else {
 		printf("pid1 successfully wrote to the range 130:4\n");
@@ -2230,9 +2274,11 @@
 		goto fail;
 	}
 
-	if (cli_write(cli1, fnum1, 0, buf, 130, 4) != 4) {
-		printf("pid2 unable to write to the range 130:4, error was %s\n", cli_errstr(cli1));
-		if (NT_STATUS_V(cli_nt_error(cli1)) != NT_STATUS_V(NT_STATUS_FILE_LOCK_CONFLICT)) {
+	status = cli_writeall(cli1, fnum1, 0, (uint8_t *)buf, 130, 4, NULL);
+	if (!NT_STATUS_IS_OK(status)) {
+		printf("pid2 unable to write to the range 130:4, error was "
+		       "%s\n", nt_errstr(status));
+		if (!NT_STATUS_EQUAL(status, NT_STATUS_FILE_LOCK_CONFLICT)) {
 			printf("Incorrect error (should be NT_STATUS_FILE_LOCK_CONFLICT)\n");
 			goto fail;
 		}
@@ -2246,7 +2292,7 @@
 
 fail:
 	cli_close(cli1, fnum1);
-	cli_unlink(cli1, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 	torture_close_connection(cli1);
 
 	printf("finished locktest7\n");
@@ -2278,7 +2324,7 @@
 
 	printf("starting locktest8\n");
 
-	cli_unlink(cli1, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	status = cli_open(cli1, fname, O_RDWR|O_CREAT|O_EXCL, DENY_WRITE,
 			  &fnum1);
@@ -2320,7 +2366,7 @@
 fail:
 	cli_close(cli1, fnum1);
 	cli_close(cli1, fnum2);
-	cli_unlink(cli1, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 	torture_close_connection(cli1);
 
 	printf("finished locktest8\n");
@@ -2540,6 +2586,7 @@
 	const char *fname = "\\fdpass.tst";
 	uint16_t fnum1;
 	char buf[1024];
+	NTSTATUS status;
 
 	if (!torture_open_connection(&cli1, 0) || !torture_open_connection(&cli2, 1)) {
 		return False;
@@ -2549,15 +2596,17 @@
 
 	printf("starting fdpasstest\n");
 
-	cli_unlink(cli1, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	if (!NT_STATUS_IS_OK(cli_open(cli1, fname, O_RDWR|O_CREAT|O_EXCL, DENY_NONE, &fnum1))) {
 		printf("open of %s failed (%s)\n", fname, cli_errstr(cli1));
 		return False;
 	}
 
-	if (cli_write(cli1, fnum1, 0, "hello world\n", 0, 13) != 13) {
-		printf("write failed (%s)\n", cli_errstr(cli1));
+	status = cli_writeall(cli1, fnum1, 0, (uint8_t *)"hello world\n", 0,
+			      13, NULL);
+	if (!NT_STATUS_IS_OK(status)) {
+		printf("write failed (%s)\n", nt_errstr(status));
 		return False;
 	}
 
@@ -2572,7 +2621,7 @@
 	}
 
 	cli_close(cli1, fnum1);
-	cli_unlink(cli1, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	torture_close_connection(cli1);
 	torture_close_connection(cli2);
@@ -2594,6 +2643,7 @@
 	uint16_t fnum2;
 	char buf[1024];
 	bool ret = True;
+	NTSTATUS status;
 
 	if (!torture_open_connection(&cli, 0))
 		return False;
@@ -2610,16 +2660,18 @@
 
 	printf("starting fdsesstest\n");
 
-	cli_unlink(cli, fname, aSYSTEM | aHIDDEN);
-	cli_unlink(cli, fname1, aSYSTEM | aHIDDEN);
+	cli_unlink(cli, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
+	cli_unlink(cli, fname1, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	if (!NT_STATUS_IS_OK(cli_open(cli, fname, O_RDWR|O_CREAT|O_EXCL, DENY_NONE, &fnum1))) {
 		printf("open of %s failed (%s)\n", fname, cli_errstr(cli));
 		return False;
 	}
 
-	if (cli_write(cli, fnum1, 0, "hello world\n", 0, 13) != 13) {
-		printf("write failed (%s)\n", cli_errstr(cli));
+	status = cli_writeall(cli, fnum1, 0, (uint8_t *)"hello world\n", 0, 13,
+			      NULL);
+	if (!NT_STATUS_IS_OK(status)) {
+		printf("write failed (%s)\n", nt_errstr(status));
 		return False;
 	}
 
@@ -2635,7 +2687,7 @@
 	if (NT_STATUS_IS_OK(cli_open(cli, fname1, O_RDWR|O_CREAT|O_EXCL, DENY_NONE, &fnum2))) {
 		printf("create with different vuid, same cnum succeeded.\n");
 		cli_close(cli, fnum2);
-		cli_unlink(cli, fname1, aSYSTEM | aHIDDEN);
+		cli_unlink(cli, fname1, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 	} else {
 		printf("create with different vuid, same cnum failed.\n");
 		printf("This will cause problems with service clients.\n");
@@ -2655,7 +2707,7 @@
 
 	cli->cnum = saved_cnum;
 	cli_close(cli, fnum1);
-	cli_unlink(cli, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	torture_close_connection(cli);
 
@@ -2683,7 +2735,7 @@
 
 	printf("starting unlink test\n");
 
-	cli_unlink(cli, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	cli_setpid(cli, 1);
 
@@ -2692,7 +2744,7 @@
 		return False;
 	}
 
-	if (NT_STATUS_IS_OK(cli_unlink(cli, fname, aSYSTEM | aHIDDEN))) {
+	if (NT_STATUS_IS_OK(cli_unlink(cli, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN))) {
 		printf("error: server allowed unlink on an open file\n");
 		correct = False;
 	} else {
@@ -2701,7 +2753,7 @@
 	}
 
 	cli_close(cli, fnum);
-	cli_unlink(cli, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	if (!torture_close_connection(cli)) {
 		correct = False;
@@ -2753,7 +2805,7 @@
 	for (;i>=0;i--) {
 		slprintf(fname,sizeof(fname)-1,ftemplate, i,(int)getpid());
 		cli_close(cli, fnums[i]);
-		if (!NT_STATUS_IS_OK(cli_unlink(cli, fname, aSYSTEM | aHIDDEN))) {
+		if (!NT_STATUS_IS_OK(cli_unlink(cli, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN))) {
 			printf("unlink of %s failed (%s)\n", 
 			       fname, cli_errstr(cli));
 			correct = False;
@@ -2949,7 +3001,7 @@
 		return False;
 	}
 
-	cli_unlink(cli, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 	cli_open(cli, fname, 
 			O_RDWR | O_CREAT | O_TRUNC, DENY_NONE, &fnum);
 	cli_close(cli, fnum);
@@ -2984,7 +3036,7 @@
 		correct = True;
 	}
 
-	cli_unlink(cli, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	if (!torture_close_connection(cli)) {
 		correct = False;
@@ -3027,7 +3079,7 @@
 		correct = false;
 	}
 
-	cli_unlink(cli, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 	cli_open(cli, fname, 
 			O_RDWR | O_CREAT | O_TRUNC, DENY_NONE, &fnum);
 	if (!NT_STATUS_IS_OK(cli_qfileinfo_basic(
@@ -3053,7 +3105,7 @@
 
 	sleep(2);
 
-	cli_unlink(cli, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 	if (!NT_STATUS_IS_OK(cli_open(cli, fname, 
 			O_RDWR | O_CREAT | O_TRUNC, DENY_NONE, &fnum))) {
 		printf("open of %s failed (%s)\n", fname, cli_errstr(cli));
@@ -3085,7 +3137,7 @@
 	}
 
 
-	cli_unlink(cli, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 	cli_open(cli, fname, 
 			O_RDWR | O_CREAT | O_TRUNC, DENY_NONE, &fnum);
 	cli_close(cli, fnum);
@@ -3102,7 +3154,7 @@
 		}
 	}
 
-	cli_unlink(cli, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 
 	/* check if the server updates the directory modification time
@@ -3121,7 +3173,7 @@
 
 	cli_open(cli, fname2, 
 			O_RDWR | O_CREAT | O_TRUNC, DENY_NONE, &fnum);
-	cli_write(cli, fnum,  0, (char *)&fnum, 0, sizeof(fnum));
+	cli_writeall(cli, fnum,  0, (uint8_t *)&fnum, 0, sizeof(fnum), NULL);
 	cli_close(cli, fnum);
 	status = cli_qpathinfo2(cli, "\\trans2\\", &c_time_ts, &a_time_ts,
 				&w_time_ts, &m_time2_ts, &size, NULL, NULL);
@@ -3135,7 +3187,7 @@
 			correct = False;
 		}
 	}
-	cli_unlink(cli, fname2, aSYSTEM | aHIDDEN);
+	cli_unlink(cli, fname2, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 	cli_rmdir(cli, dname);
 
 	if (!torture_close_connection(cli)) {
@@ -3220,7 +3272,7 @@
 		return False;
 	}
 
-	cli_unlink(cli1, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	cli_sockopt(cli1, sockops);
 
@@ -3233,15 +3285,15 @@
 
 	cli1->use_oplocks = False;
 
-	cli_unlink(cli1, fname, aSYSTEM | aHIDDEN);
-	cli_unlink(cli1, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
+	cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	if (!NT_STATUS_IS_OK(cli_close(cli1, fnum1))) {
 		printf("close2 failed (%s)\n", cli_errstr(cli1));
 		return False;
 	}
 
-	if (!NT_STATUS_IS_OK(cli_unlink(cli1, fname, aSYSTEM | aHIDDEN))) {
+	if (!NT_STATUS_IS_OK(cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN))) {
 		printf("unlink failed (%s)\n", cli_errstr(cli1));
 		return False;
 	}
@@ -3291,7 +3343,7 @@
 	cli2->use_oplocks = True;
 	cli2->use_level_II_oplocks = True;
 
-	cli_unlink(cli1, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	cli_sockopt(cli1, sockops);
 	cli_sockopt(cli2, sockops);
@@ -3356,13 +3408,6 @@
 
 	cli_read(cli1, fnum1, buf, 0, 4);
 
-#if 0
-	if (cli_write(cli1, fnum1, 0, buf, 0, 4) != 4) {
-		printf("write on fnum1 failed (%s)\n", cli_errstr(cli1));
-		correct = False;
-	}
-#endif
-
 	if (!NT_STATUS_IS_OK(cli_close(cli1, fnum1))) {
 		printf("close1 failed (%s)\n", cli_errstr(cli1));
 		correct = False;
@@ -3370,7 +3415,7 @@
 
 	sleep(4);
 
-	if (!NT_STATUS_IS_OK(cli_unlink(cli1, fname, aSYSTEM | aHIDDEN))) {
+	if (!NT_STATUS_IS_OK(cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN))) {
 		printf("unlink failed (%s)\n", cli_errstr(cli1));
 		correct = False;
 	}
@@ -3421,7 +3466,7 @@
 		sleep(2);
 		/* try to trigger a oplock break in parent */
 		cli_open(cli, fname, O_RDWR, DENY_NONE, &fnum);
-		cli_write(cli, fnum, 0, buf, 0, 4);
+		cli_writeall(cli, fnum, 0, (uint8_t *)buf, 0, 4, NULL);
 		exit(0);
 	}
 
@@ -3433,7 +3478,7 @@
 	}
 	cli_oplock_handler(cli, oplock3_handler);
 	cli_open(cli, fname, O_RDWR|O_CREAT, DENY_NONE, &fnum);
-	cli_write(cli, fnum, 0, buf, 0, 4);
+	cli_writeall(cli, fnum, 0, (uint8_t *)buf, 0, 4, NULL);
 	cli_close(cli, fnum);
 	cli_open(cli, fname, O_RDWR, DENY_NONE, &fnum);
 	cli->timeout = 20000;
@@ -3484,8 +3529,8 @@
 		return false;
 	}
 
-	cli_unlink(cli1, fname, aSYSTEM | aHIDDEN);
-	cli_unlink(cli1, fname_ln, aSYSTEM | aHIDDEN);
+	cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
+	cli_unlink(cli1, fname_ln, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	cli_sockopt(cli1, sockops);
 	cli_sockopt(cli2, sockops);
@@ -3569,11 +3614,11 @@
 		correct = false;
 	}
 
-	if (!NT_STATUS_IS_OK(cli_unlink(cli1, fname, aSYSTEM | aHIDDEN))) {
+	if (!NT_STATUS_IS_OK(cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN))) {
 		printf("unlink failed (%s)\n", cli_errstr(cli1));
 		correct = false;
 	}
-	if (!NT_STATUS_IS_OK(cli_unlink(cli1, fname_ln, aSYSTEM | aHIDDEN))) {
+	if (!NT_STATUS_IS_OK(cli_unlink(cli1, fname_ln, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN))) {
 		printf("unlink failed (%s)\n", cli_errstr(cli1));
 		correct = false;
 	}
@@ -3615,7 +3660,7 @@
 	/* Test 1 - this should delete the file on close. */
 
 	cli_setatr(cli1, fname, 0, 0);
-	cli_unlink(cli1, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	if (!NT_STATUS_IS_OK(cli_ntcreate(cli1, fname, 0, GENERIC_ALL_ACCESS|DELETE_ACCESS, FILE_ATTRIBUTE_NORMAL,
 				   0, FILE_OVERWRITE_IF, 
@@ -3642,7 +3687,7 @@
 	/* Test 2 - this should delete the file on close. */
 
 	cli_setatr(cli1, fname, 0, 0);
-	cli_unlink(cli1, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	if (!NT_STATUS_IS_OK(cli_ntcreate(cli1, fname, 0, GENERIC_ALL_ACCESS,
 				   FILE_ATTRIBUTE_NORMAL, FILE_SHARE_NONE, 
@@ -3671,13 +3716,13 @@
 			correct = False;
 			goto fail;
 		}
-		cli_unlink(cli1, fname, aSYSTEM | aHIDDEN);
+		cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 	} else
 		printf("second delete on close test succeeded.\n");
 
 	/* Test 3 - ... */
 	cli_setatr(cli1, fname, 0, 0);
-	cli_unlink(cli1, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	if (!NT_STATUS_IS_OK(cli_ntcreate(cli1, fname, 0, GENERIC_ALL_ACCESS, FILE_ATTRIBUTE_NORMAL,
 				   FILE_SHARE_READ|FILE_SHARE_WRITE, FILE_OVERWRITE_IF, 0, 0, &fnum1))) {
@@ -3730,7 +3775,7 @@
 		if (!NT_STATUS_IS_OK(cli_close(cli1, fnum1))) {
 			printf("[3] close failed (%s)\n", cli_errstr(cli1));
 		}
-		cli_unlink(cli1, fname, aSYSTEM | aHIDDEN);
+		cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 		correct = False;
 		goto fail;
 	} else
@@ -3738,7 +3783,7 @@
 
 	/* Test 4 ... */
 	cli_setatr(cli1, fname, 0, 0);
-	cli_unlink(cli1, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	if (!NT_STATUS_IS_OK(cli_ntcreate(cli1, fname, 0, FILE_READ_DATA|FILE_WRITE_DATA|DELETE_ACCESS,
 			FILE_ATTRIBUTE_NORMAL, FILE_SHARE_READ|FILE_SHARE_WRITE, FILE_OVERWRITE_IF, 0, 0, &fnum1))) {
@@ -3785,7 +3830,7 @@
 
 	/* Test 5 ... */
 	cli_setatr(cli1, fname, 0, 0);
-	cli_unlink(cli1, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	if (!NT_STATUS_IS_OK(cli_open(cli1, fname, O_RDWR|O_CREAT, DENY_NONE, &fnum1))) {
 		printf("[5] open of %s failed (%s)\n", fname, cli_errstr(cli1));
@@ -3811,7 +3856,7 @@
 
 	/* Test 6 ... */
 	cli_setatr(cli1, fname, 0, 0);
-	cli_unlink(cli1, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	if (!NT_STATUS_IS_OK(cli_ntcreate(cli1, fname, 0, FILE_READ_DATA|FILE_WRITE_DATA,
 				   FILE_ATTRIBUTE_NORMAL, FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,
@@ -3839,7 +3884,7 @@
 
 	/* Test 7 ... */
 	cli_setatr(cli1, fname, 0, 0);
-	cli_unlink(cli1, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	if (!NT_STATUS_IS_OK(cli_ntcreate(cli1, fname, 0, FILE_READ_DATA|FILE_WRITE_DATA|DELETE_ACCESS,
 				   FILE_ATTRIBUTE_NORMAL, 0, FILE_OVERWRITE_IF, 0, 0, &fnum1))) {
@@ -3884,7 +3929,7 @@
 
 	/* Test 7 ... */
 	cli_setatr(cli1, fname, 0, 0);
-	cli_unlink(cli1, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	if (!torture_open_connection(&cli2, 1)) {
 		printf("[8] failed to open second connection.\n");
@@ -3969,7 +4014,7 @@
 		printf("tenth delete on close test succeeded.\n");
 
 	cli_setatr(cli1, fname, 0, 0);
-	cli_unlink(cli1, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	/* What error do we get when attempting to open a read-only file with
 	   delete access ? */
@@ -4017,7 +4062,7 @@
 	if (fnum1 != (uint16_t)-1) cli_close(cli1, fnum1);
 	if (fnum2 != (uint16_t)-1) cli_close(cli1, fnum2);
 	cli_setatr(cli1, fname, 0, 0);
-	cli_unlink(cli1, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	if (cli1 && !torture_close_connection(cli1)) {
 		correct = False;
@@ -4045,8 +4090,8 @@
 		return false;
 	}
 
-	cli_unlink(cli, fname, aSYSTEM | aHIDDEN);
-	cli_unlink(cli, fname_ln, aSYSTEM | aHIDDEN);
+	cli_unlink(cli, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
+	cli_unlink(cli, fname_ln, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	cli_sockopt(cli, sockops);
 
@@ -4127,8 +4172,8 @@
                 correct = False;
         }
 
-	cli_unlink(cli, fname, aSYSTEM | aHIDDEN);
-	cli_unlink(cli, fname_ln, aSYSTEM | aHIDDEN);
+	cli_unlink(cli, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
+	cli_unlink(cli, fname_ln, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	if (!torture_close_connection(cli)) {
 		correct = false;
@@ -4245,8 +4290,8 @@
 		return False;
 	}
 
-	cli_unlink(cli1, fname, aSYSTEM | aHIDDEN);
-	cli_unlink(cli1, fname1, aSYSTEM | aHIDDEN);
+	cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
+	cli_unlink(cli1, fname1, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 	if (!NT_STATUS_IS_OK(cli_ntcreate(cli1, fname, 0, GENERIC_READ_ACCESS, FILE_ATTRIBUTE_NORMAL,
 				   FILE_SHARE_READ, FILE_OVERWRITE_IF, 0, 0, &fnum1))) {
 		printf("First open failed - %s\n", cli_errstr(cli1));
@@ -4265,8 +4310,8 @@
 		return False;
 	}
 
-	cli_unlink(cli1, fname, aSYSTEM | aHIDDEN);
-	cli_unlink(cli1, fname1, aSYSTEM | aHIDDEN);
+	cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
+	cli_unlink(cli1, fname1, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 	status = cli_ntcreate(cli1, fname, 0, GENERIC_READ_ACCESS, FILE_ATTRIBUTE_NORMAL,
 #if 0
 			      FILE_SHARE_DELETE|FILE_SHARE_NONE,
@@ -4291,8 +4336,8 @@
 		return False;
 	}
 
-	cli_unlink(cli1, fname, aSYSTEM | aHIDDEN);
-	cli_unlink(cli1, fname1, aSYSTEM | aHIDDEN);
+	cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
+	cli_unlink(cli1, fname1, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	if (!NT_STATUS_IS_OK(cli_ntcreate(cli1, fname, 0, READ_CONTROL_ACCESS, FILE_ATTRIBUTE_NORMAL,
 				   FILE_SHARE_NONE, FILE_OVERWRITE_IF, 0, 0, &fnum1))) {
@@ -4334,8 +4379,8 @@
 		return False;
 	}
 
-	cli_unlink(cli1, fname, aSYSTEM | aHIDDEN);
-	cli_unlink(cli1, fname1, aSYSTEM | aHIDDEN);
+	cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
+	cli_unlink(cli1, fname1, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
         /*----*/
 
@@ -4357,8 +4402,8 @@
 		return False;
 	}
 
-	cli_unlink(cli1, fname, aSYSTEM | aHIDDEN);
-	cli_unlink(cli1, fname1, aSYSTEM | aHIDDEN);
+	cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
+	cli_unlink(cli1, fname1, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
         /*--*/
 
@@ -4415,8 +4460,8 @@
 		}
 	}
 
-	cli_unlink(cli1, fname, aSYSTEM | aHIDDEN);
-	cli_unlink(cli1, fname1, aSYSTEM | aHIDDEN);
+	cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
+	cli_unlink(cli1, fname1, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	if (!torture_close_connection(cli1)) {
 		correct = False;
@@ -4475,7 +4520,7 @@
 	}
 
 	cli_setatr(cli1, fname, 0, 0);
-	cli_unlink(cli1, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	cli_sockopt(cli1, sockops);
 
@@ -4489,7 +4534,7 @@
 		return False;
 	}
 
-	if (!NT_STATUS_IS_OK(cli_setatr(cli1, fname, aRONLY, 0))) {
+	if (!NT_STATUS_IS_OK(cli_setatr(cli1, fname, FILE_ATTRIBUTE_READONLY, 0))) {
 		printf("cli_setatr failed (%s)\n", cli_errstr(cli1));
 		return False;
 	}
@@ -4533,7 +4578,7 @@
 		return False;
 	}
 
-	cli_unlink(cli1, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	printf("finished open test 2\n");
 
@@ -4548,8 +4593,9 @@
 
 	memset(buf, '\0', 20);
 
-	if (cli_write(cli1, fnum1, 0, buf, 0, 20) != 20) {
-		printf("write failed (%s)\n", cli_errstr(cli1));
+	status = cli_writeall(cli1, fnum1, 0, (uint8_t *)buf, 0, 20, NULL);
+	if (!NT_STATUS_IS_OK(status)) {
+		printf("write failed (%s)\n", nt_errstr(status));
 		correct = False;
 	}
 
@@ -4593,7 +4639,7 @@
 	}
 	printf("finished open test 3\n");
 
-	cli_unlink(cli1, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	printf("Do ctemp tests\n");
 	if (!NT_STATUS_IS_OK(cli_ctemp(cli1, talloc_tos(), "\\", &fnum1, &tmp_path))) {
@@ -4604,7 +4650,7 @@
 	if (!NT_STATUS_IS_OK(cli_close(cli1, fnum1))) {
 		printf("close of temp failed (%s)\n", cli_errstr(cli1));
 	}
-	if (!NT_STATUS_IS_OK(cli_unlink(cli1, tmp_path, aSYSTEM | aHIDDEN))) {
+	if (!NT_STATUS_IS_OK(cli_unlink(cli1, tmp_path, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN))) {
 		printf("unlink of temp failed (%s)\n", cli_errstr(cli1));
 	}
 
@@ -4615,7 +4661,7 @@
 	}
 
 	cli_setatr(cli2, fname, 0, 0);
-	cli_unlink(cli2, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli2, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	cli_sockopt(cli2, sockops);
 
@@ -4644,7 +4690,7 @@
 
 	printf("non-io open test #1 passed.\n");
 
-	cli_unlink(cli1, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	printf("TEST #2 testing 2 non-io opens (first with delete)\n");
 
@@ -4671,7 +4717,7 @@
 
 	printf("non-io open test #2 passed.\n");
 
-	cli_unlink(cli1, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	printf("TEST #3 testing 2 non-io opens (second with delete)\n");
 
@@ -4698,7 +4744,7 @@
 
 	printf("non-io open test #3 passed.\n");
 
-	cli_unlink(cli1, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	printf("TEST #4 testing 2 non-io opens (both with delete)\n");
 
@@ -4723,7 +4769,7 @@
 
 	printf("non-io open test #4 passed.\n");
 
-	cli_unlink(cli1, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	printf("TEST #5 testing 2 non-io opens (both with delete - both with file share delete)\n");
 
@@ -4753,7 +4799,7 @@
 
 	printf("TEST #6 testing 1 non-io open, one io open\n");
 
-	cli_unlink(cli1, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	if (!NT_STATUS_IS_OK(cli_ntcreate(cli1, fname, 0, FILE_READ_DATA, FILE_ATTRIBUTE_NORMAL,
 				   FILE_SHARE_NONE, FILE_OVERWRITE_IF, 0, 0, &fnum1))) {
@@ -4781,7 +4827,7 @@
 
 	printf("TEST #7 testing 1 non-io open, one io open with delete\n");
 
-	cli_unlink(cli1, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	if (!NT_STATUS_IS_OK(cli_ntcreate(cli1, fname, 0, FILE_READ_DATA, FILE_ATTRIBUTE_NORMAL,
 				   FILE_SHARE_NONE, FILE_OVERWRITE_IF, 0, 0, &fnum1))) {
@@ -4804,7 +4850,7 @@
 
 	printf("non-io open test #7 passed.\n");
 
-	cli_unlink(cli1, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	printf("TEST #8 testing open without WRITE_ATTRIBUTES, updating close write time.\n");
 	status = cli_ntcreate(cli1, fname, 0, FILE_WRITE_DATA, FILE_ATTRIBUTE_NORMAL,
@@ -4817,8 +4863,10 @@
 	}
 
 	/* Write to ensure we have to update the file time. */
-	if (cli_write(cli1, fnum1, 0, "TEST DATA\n", 0, 10) != 10) {
-		printf("TEST #8 cli_write failed: %s\n", cli_errstr(cli1));
+	status = cli_writeall(cli1, fnum1, 0, (uint8_t *)"TEST DATA\n", 0, 10,
+			      NULL);
+	if (!NT_STATUS_IS_OK(status)) {
+		printf("TEST #8 cli_write failed: %s\n", nt_errstr(status));
 		correct = false;
 		goto out;
 	}
@@ -4972,8 +5020,71 @@
 		goto out;
 	}
 
-	/* What happens when we try and POSIX open a directory ? */
-	if (NT_STATUS_IS_OK(cli_posix_open(cli1, dname, O_RDONLY, 0, &fnum1))) {
+	/* Create again to test open with O_TRUNC. */
+	if (!NT_STATUS_IS_OK(cli_posix_open(cli1, fname, O_RDWR|O_CREAT|O_EXCL, 0600, &fnum1))) {
+		printf("POSIX create of %s failed (%s)\n", fname, cli_errstr(cli1));
+		goto out;
+	}
+
+	/* Test ftruncate - set file size. */
+	if (!NT_STATUS_IS_OK(cli_ftruncate(cli1, fnum1, 1000))) {
+		printf("ftruncate failed (%s)\n", cli_errstr(cli1));
+		goto out;
+	}
+
+	/* Ensure st_size == 1000 */
+	if (!NT_STATUS_IS_OK(cli_posix_stat(cli1, fname, &sbuf))) {
+		printf("stat failed (%s)\n", cli_errstr(cli1));
+		goto out;
+	}
+
+	if (sbuf.st_ex_size != 1000) {
+		printf("ftruncate - stat size (%u) != 1000\n", (unsigned int)sbuf.st_ex_size);
+		goto out;
+	}
+
+	if (!NT_STATUS_IS_OK(cli_close(cli1, fnum1))) {
+		printf("close(2) failed (%s)\n", cli_errstr(cli1));
+		goto out;
+	}
+
+	/* Re-open with O_TRUNC. */
+	if (!NT_STATUS_IS_OK(cli_posix_open(cli1, fname, O_WRONLY|O_TRUNC, 0600, &fnum1))) {
+		printf("POSIX create of %s failed (%s)\n", fname, cli_errstr(cli1));
+		goto out;
+	}
+
+	/* Ensure st_size == 0 */
+	if (!NT_STATUS_IS_OK(cli_posix_stat(cli1, fname, &sbuf))) {
+		printf("stat failed (%s)\n", cli_errstr(cli1));
+		goto out;
+	}
+
+	if (sbuf.st_ex_size != 0) {
+		printf("O_TRUNC - stat size (%u) != 0\n", (unsigned int)sbuf.st_ex_size);
+		goto out;
+	}
+
+	if (!NT_STATUS_IS_OK(cli_close(cli1, fnum1))) {
+		printf("close failed (%s)\n", cli_errstr(cli1));
+		goto out;
+	}
+
+	if (!NT_STATUS_IS_OK(cli_posix_unlink(cli1, fname))) {
+		printf("POSIX unlink of %s failed (%s)\n", fname, cli_errstr(cli1));
+		goto out;
+	}
+
+	if (!NT_STATUS_IS_OK(cli_posix_open(cli1, dname, O_RDONLY, 0, &fnum1))) {
+		printf("POSIX open directory O_RDONLY of %s failed (%s)\n",
+			dname, cli_errstr(cli1));
+		goto out;
+	}
+
+	cli_close(cli1, fnum1);
+
+	/* What happens when we try and POSIX open a directory for write ? */
+	if (NT_STATUS_IS_OK(cli_posix_open(cli1, dname, O_RDWR, 0, &fnum1))) {
 		printf("POSIX open of directory %s succeeded, should have failed.\n", fname);
 		goto out;
 	} else {
@@ -4990,8 +5101,10 @@
 	}
 
 	/* Write some data into it. */
-	if (cli_write(cli1, fnum1, 0, "TEST DATA\n", 0, 10) != 10) {
-		printf("cli_write failed: %s\n", cli_errstr(cli1));
+	status = cli_writeall(cli1, fnum1, 0, (uint8_t *)"TEST DATA\n", 0, 10,
+			      NULL);
+	if (!NT_STATUS_IS_OK(status)) {
+		printf("cli_write failed: %s\n", nt_errstr(status));
 		goto out;
 	}
 
@@ -5173,7 +5286,7 @@
 
 	for (k = 0, i = 0; i < sizeof(open_attrs_table)/sizeof(uint32); i++) {
 		cli_setatr(cli1, fname, 0, 0);
-		cli_unlink(cli1, fname, aSYSTEM | aHIDDEN);
+		cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 		if (!NT_STATUS_IS_OK(cli_ntcreate(cli1, fname, 0, FILE_WRITE_DATA, open_attrs_table[i],
 				   FILE_SHARE_NONE, FILE_OVERWRITE_IF, 0, 0, &fnum1))) {
 			printf("open %d (1) of %s failed (%s)\n", i, fname, cli_errstr(cli1));
@@ -5245,7 +5358,7 @@
 	}
 
 	cli_setatr(cli1, fname, 0, 0);
-	cli_unlink(cli1, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	printf("open attr test %s.\n", correct ? "passed" : "failed");
 
@@ -5316,7 +5429,7 @@
 	for (i=0;i<torture_numops;i++) {
 		fstring fname;
 		slprintf(fname, sizeof(fname), "\\%x", (int)random());
-		cli_unlink(cli, fname, aSYSTEM | aHIDDEN);
+		cli_unlink(cli, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 	}
 
 	if (!torture_close_connection(cli)) {
@@ -5338,11 +5451,11 @@
 	if (strcmp(finfo->name, ".") == 0 || strcmp(finfo->name, "..") == 0)
 		return NT_STATUS_OK;
 
-	if (finfo->mode & aDIR) {
+	if (finfo->mode & FILE_ATTRIBUTE_DIRECTORY) {
 		if (!NT_STATUS_IS_OK(cli_rmdir(pcli, fname)))
 			printf("del_fn: failed to rmdir %s\n,", fname );
 	} else {
-		if (!NT_STATUS_IS_OK(cli_unlink(pcli, fname, aSYSTEM | aHIDDEN)))
+		if (!NT_STATUS_IS_OK(cli_unlink(pcli, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN)))
 			printf("del_fn: failed to unlink %s\n,", fname );
 	}
 	return NT_STATUS_OK;
@@ -5367,7 +5480,7 @@
 
 	printf("starting ioctl test\n");
 
-	cli_unlink(cli, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	if (!NT_STATUS_IS_OK(cli_open(cli, fname, O_RDWR|O_CREAT|O_EXCL, DENY_NONE, &fnum))) {
 		printf("open of %s failed (%s)\n", fname, cli_errstr(cli));
@@ -5420,7 +5533,7 @@
 
 	/* cleanup from an old run */
 	cli_rmdir(cli, "\\chkpath.dir\\dir2");
-	cli_unlink(cli, "\\chkpath.dir\\*", aSYSTEM | aHIDDEN);
+	cli_unlink(cli, "\\chkpath.dir\\*", FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 	cli_rmdir(cli, "\\chkpath.dir");
 
 	if (!NT_STATUS_IS_OK(cli_mkdir(cli, "\\chkpath.dir"))) {
@@ -5474,7 +5587,7 @@
 	}
 
 	cli_rmdir(cli, "\\chkpath.dir\\dir2");
-	cli_unlink(cli, "\\chkpath.dir\\*", aSYSTEM | aHIDDEN);
+	cli_unlink(cli, "\\chkpath.dir\\*", FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 	cli_rmdir(cli, "\\chkpath.dir");
 
 	if (!torture_close_connection(cli)) {
@@ -5503,7 +5616,7 @@
 		return False;
 	}
 
-	cli_unlink(cli, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 	if (!NT_STATUS_IS_OK(cli_ntcreate(cli, fname, 0,
 				   FIRST_DESIRED_ACCESS, FILE_ATTRIBUTE_ARCHIVE,
 				   FILE_SHARE_NONE, FILE_OVERWRITE_IF, 
@@ -5631,7 +5744,7 @@
 	cli_sockopt(cli, sockops);
 
 	cli_list(cli, "\\LISTDIR\\*", 0, del_fn, cli);
-	cli_list(cli, "\\LISTDIR\\*", aDIR, del_fn, cli);
+	cli_list(cli, "\\LISTDIR\\*", FILE_ATTRIBUTE_DIRECTORY, del_fn, cli);
 	cli_rmdir(cli, "\\LISTDIR");
 	cli_mkdir(cli, "\\LISTDIR");
 
@@ -5657,7 +5770,7 @@
 
 	/* Now ensure that doing an old list sees both files and directories. */
 	num_seen = 0;
-	cli_list_old(cli, "\\LISTDIR\\*", aDIR, list_fn, &num_seen);
+	cli_list_old(cli, "\\LISTDIR\\*", FILE_ATTRIBUTE_DIRECTORY, list_fn, &num_seen);
 	printf("num_seen = %d\n", num_seen );
 	/* We should see 100 files + 1000 directories + . and .. */
 	if (num_seen != 2002)
@@ -5667,20 +5780,20 @@
 	 * relevent entries.
 	 */
 	num_seen = 0;
-	cli_list_old(cli, "\\LISTDIR\\*", (aDIR<<8)|aDIR, list_fn, &num_seen);
+	cli_list_old(cli, "\\LISTDIR\\*", (FILE_ATTRIBUTE_DIRECTORY<<8)|FILE_ATTRIBUTE_DIRECTORY, list_fn, &num_seen);
 	printf("num_seen = %d\n", num_seen );
 	if (num_seen != 1002)
 		correct = False;
 
 	num_seen = 0;
-	cli_list_old(cli, "\\LISTDIR\\*", (aARCH<<8)|aDIR, list_fn, &num_seen);
+	cli_list_old(cli, "\\LISTDIR\\*", (FILE_ATTRIBUTE_ARCHIVE<<8)|FILE_ATTRIBUTE_DIRECTORY, list_fn, &num_seen);
 	printf("num_seen = %d\n", num_seen );
 	if (num_seen != 1000)
 		correct = False;
 
 	/* Delete everything. */
 	cli_list(cli, "\\LISTDIR\\*", 0, del_fn, cli);
-	cli_list(cli, "\\LISTDIR\\*", aDIR, del_fn, cli);
+	cli_list(cli, "\\LISTDIR\\*", FILE_ATTRIBUTE_DIRECTORY, del_fn, cli);
 	cli_rmdir(cli, "\\LISTDIR");
 
 #if 0
@@ -6510,14 +6623,15 @@
 	start_time = timeval_current();
 
 	for (i=0; i<torture_numops; i++) {
-		char c = 0;
+		uint8_t c = 0;
 		off_t start = i * torture_blocksize;
 		NTSTATUS status;
 		size_t to_pull = torture_blocksize - 1;
 
-		if (cli_write(cli1, fnum, 0, &c,
-			      start + torture_blocksize - 1, 1) != 1) {
-			printf("cli_write failed: %s\n", cli_errstr(cli1));
+		status = cli_writeall(cli1, fnum, 0, &c,
+				      start + torture_blocksize - 1, 1, NULL);
+		if (!NT_STATUS_IS_OK(status)) {
+			printf("cli_write failed: %s\n", nt_errstr(status));
 			goto fail;
 		}
 
@@ -6539,7 +6653,7 @@
 	ret = true;
  fail:
 	cli_close(cli1, fnum);
-	cli_unlink(cli1, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli1, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 	torture_close_connection(cli1);
 	return ret;
 }
@@ -6666,13 +6780,13 @@
 	if (strcmp(finfo->name, ".") == 0 || strcmp(finfo->name, "..") == 0)
 		return NT_STATUS_OK;
 
-	if (finfo->mode & aDIR) {
+	if (finfo->mode & FILE_ATTRIBUTE_DIRECTORY) {
 		status = cli_rmdir(pcli, fname);
 		if (!NT_STATUS_IS_OK(status)) {
 			printf("del_fn: failed to rmdir %s\n,", fname );
 		}
 	} else {
-		status = cli_unlink(pcli, fname, aSYSTEM | aHIDDEN);
+		status = cli_unlink(pcli, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 		if (!NT_STATUS_IS_OK(status)) {
 			printf("del_fn: failed to unlink %s\n,", fname );
 		}
@@ -6731,7 +6845,7 @@
 	cli_sockopt(cli, sockops);
 
 	cli_list(cli, "\\shortname\\*", 0, shortname_del_fn, cli);
-	cli_list(cli, "\\shortname\\*", aDIR, shortname_del_fn, cli);
+	cli_list(cli, "\\shortname\\*", FILE_ATTRIBUTE_DIRECTORY, shortname_del_fn, cli);
 	cli_rmdir(cli, "\\shortname");
 
 	if (!NT_STATUS_IS_OK(cli_mkdir(cli, "\\shortname"))) {
@@ -6776,7 +6890,7 @@
 			correct = false;
 			goto out;
 		}
-		if (!NT_STATUS_IS_OK(cli_unlink(cli, fname, aSYSTEM | aHIDDEN))) {
+		if (!NT_STATUS_IS_OK(cli_unlink(cli, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN))) {
 			d_printf("(%s) failed to delete %s: %s\n",
 				__location__, fname, cli_errstr(cli));
 			correct = false;
@@ -6792,7 +6906,7 @@
   out:
 
 	cli_list(cli, "\\shortname\\*", 0, shortname_del_fn, cli);
-	cli_list(cli, "\\shortname\\*", aDIR, shortname_del_fn, cli);
+	cli_list(cli, "\\shortname\\*", FILE_ATTRIBUTE_DIRECTORY, shortname_del_fn, cli);
 	cli_rmdir(cli, "\\shortname");
 	torture_close_connection(cli);
 	return correct;
@@ -6921,7 +7035,7 @@
 		return false;
 	}
 
-	cli_unlink(cli, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 	cli_rmdir(cli, dname);
 
 	status = cli_mkdir(cli, dname);
@@ -6965,7 +7079,7 @@
 
   out:
 
-	cli_unlink(cli, fname, aSYSTEM | aHIDDEN);
+	cli_unlink(cli, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 	cli_rmdir(cli, dname);
 	if (!torture_close_connection(cli)) {
 		ret = false;
@@ -6990,7 +7104,7 @@
 		return false;
 	}
 
-	cli_unlink(cli, "\\testdir\\*", aSYSTEM | aHIDDEN);
+	cli_unlink(cli, "\\testdir\\*", FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 	cli_rmdir(cli, dname);
 
 	status = cli_mkdir(cli, dname);

Modified: branches/samba/experimental/source3/torture/utable.c
===================================================================
--- branches/samba/experimental/source3/torture/utable.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/torture/utable.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -21,6 +21,7 @@
 #include "system/filesys.h"
 #include "torture/proto.h"
 #include "../libcli/security/security.h"
+#include "libsmb/libsmb.h"
 #include "libsmb/clirap.h"
 
 bool torture_utable(int dummy)
@@ -42,7 +43,7 @@
 	memset(valid, 0, sizeof(valid));
 
 	cli_mkdir(cli, "\\utable");
-	cli_unlink(cli, "\\utable\\*", aSYSTEM | aHIDDEN);
+	cli_unlink(cli, "\\utable\\*", FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 	for (c=1; c < 0x10000; c++) {
 		char *p;
@@ -72,7 +73,7 @@
 		}
 
 		cli_close(cli, fnum);
-		cli_unlink(cli, fname, aSYSTEM | aHIDDEN);
+		cli_unlink(cli, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
 		if (c % 100 == 0) {
 			printf("%d (%d/%d)\r", c, chars_allowed, alt_allowed);
@@ -135,7 +136,7 @@
 
 	memset(equiv, 0, sizeof(equiv));
 
-	cli_unlink(cli, "\\utable\\*", aSYSTEM | aHIDDEN);
+	cli_unlink(cli, "\\utable\\*", FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 	cli_rmdir(cli, "\\utable");
 	if (!NT_STATUS_IS_OK(cli_mkdir(cli, "\\utable"))) {
 		printf("Failed to create utable directory!\n");
@@ -189,11 +190,12 @@
 			fflush(stdout);
 		}
 
-		cli_write(cli, fnum, 0, (char *)&c, size, sizeof(c));
+		cli_writeall(cli, fnum, 0, (uint8_t *)&c, size, sizeof(c),
+			     NULL);
 		cli_close(cli, fnum);
 	}
 
-	cli_unlink(cli, "\\utable\\*", aSYSTEM | aHIDDEN);
+	cli_unlink(cli, "\\utable\\*", FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 	cli_rmdir(cli, "\\utable");
 
 	return True;

Modified: branches/samba/experimental/source3/utils/net.c
===================================================================
--- branches/samba/experimental/source3/utils/net.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/utils/net.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -832,7 +832,7 @@
 
 	setlocale(LC_ALL, "");
 #if defined(HAVE_BINDTEXTDOMAIN)
-	bindtextdomain(MODULE_NAME, dyn_LOCALEDIR);
+	bindtextdomain(MODULE_NAME, get_dyn_LOCALEDIR());
 #endif
 #if defined(HAVE_TEXTDOMAIN)
 	textdomain(MODULE_NAME);

Modified: branches/samba/experimental/source3/utils/net.h
===================================================================
--- branches/samba/experimental/source3/utils/net.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/utils/net.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -22,7 +22,8 @@
  * include
  */
 
-#include "localedir.h"
+struct cli_state;
+
 #include "../librpc/gen_ndr/lsa.h"
 
 #include "intl.h"

Modified: branches/samba/experimental/source3/utils/net_ads.c
===================================================================
--- branches/samba/experimental/source3/utils/net_ads.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/utils/net_ads.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -36,6 +36,7 @@
 #include "secrets.h"
 #include "krb5_env.h"
 #include "../libcli/security/security.h"
+#include "libsmb/libsmb.h"
 
 #ifdef HAVE_ADS
 

Modified: branches/samba/experimental/source3/utils/net_conf.c
===================================================================
--- branches/samba/experimental/source3/utils/net_conf.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/utils/net_conf.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -174,12 +174,12 @@
 /**
  * This functions process a service previously loaded with libsmbconf.
  */
-static WERROR import_process_service(struct net_context *c,
+static sbcErr import_process_service(struct net_context *c,
 				     struct smbconf_ctx *conf_ctx,
 				     struct smbconf_service *service)
 {
 	uint32_t idx;
-	WERROR werr = WERR_OK;
+	sbcErr err = SBC_ERR_OK;
 	uint32_t num_includes = 0;
 	char **includes = NULL;
 	TALLOC_CTX *mem_ctx = talloc_stackframe();
@@ -200,13 +200,13 @@
 	}
 
 	if (smbconf_share_exists(conf_ctx, service->name)) {
-		werr = smbconf_delete_share(conf_ctx, service->name);
-		if (!W_ERROR_IS_OK(werr)) {
+		err = smbconf_delete_share(conf_ctx, service->name);
+		if (!SBC_ERROR_IS_OK(err)) {
 			goto done;
 		}
 	}
-	werr = smbconf_create_share(conf_ctx, service->name);
-	if (!W_ERROR_IS_OK(werr)) {
+	err = smbconf_create_share(conf_ctx, service->name);
+	if (!SBC_ERROR_IS_OK(err)) {
 		goto done;
 	}
 
@@ -217,37 +217,41 @@
 							char *,
 							num_includes+1);
 			if (includes == NULL) {
-				werr = WERR_NOMEM;
+				err = SBC_ERR_NOMEM;
 				goto done;
 			}
 			includes[num_includes] = talloc_strdup(includes,
 						service->param_values[idx]);
 			if (includes[num_includes] == NULL) {
-				werr = WERR_NOMEM;
+				err = SBC_ERR_NOMEM;
 				goto done;
 			}
 			num_includes++;
 		} else {
-			werr = smbconf_set_parameter(conf_ctx,
+			err = smbconf_set_parameter(conf_ctx,
 						     service->name,
 						     service->param_names[idx],
 						     service->param_values[idx]);
-			if (!W_ERROR_IS_OK(werr)) {
+			if (!SBC_ERROR_IS_OK(err)) {
 				d_fprintf(stderr,
 					  _("Error in section [%s], parameter \"%s\": %s\n"),
 					  service->name, service->param_names[idx],
-					  win_errstr(werr));
+					  sbcErrorString(err));
 				goto done;
 			}
 		}
 	}
 
-	werr = smbconf_set_includes(conf_ctx, service->name, num_includes,
-				    (const char **)includes);
+	err = smbconf_set_includes(conf_ctx, service->name, num_includes,
+				   (const char **)includes);
+	if (!SBC_ERROR_IS_OK(err)) {
+		goto done;
+	}
 
+	err = SBC_ERR_OK;
 done:
 	TALLOC_FREE(mem_ctx);
-	return werr;
+	return err;
 }
 
 
@@ -260,7 +264,7 @@
 static int net_conf_list(struct net_context *c, struct smbconf_ctx *conf_ctx,
 			 int argc, const char **argv)
 {
-	WERROR werr = WERR_OK;
+	sbcErr err;
 	int ret = -1;
 	TALLOC_CTX *mem_ctx;
 	uint32_t num_shares;
@@ -274,10 +278,10 @@
 		goto done;
 	}
 
-	werr = smbconf_get_config(conf_ctx, mem_ctx, &num_shares, &shares);
-	if (!W_ERROR_IS_OK(werr)) {
+	err = smbconf_get_config(conf_ctx, mem_ctx, &num_shares, &shares);
+	if (!SBC_ERROR_IS_OK(err)) {
 		d_fprintf(stderr, _("Error getting config: %s\n"),
-			  win_errstr(werr));
+			  sbcErrorString(err));
 		goto done;
 	}
 
@@ -315,7 +319,7 @@
 	char *conf_source = NULL;
 	TALLOC_CTX *mem_ctx;
 	struct smbconf_ctx *txt_ctx;
-	WERROR werr;
+	sbcErr err;
 
 	if (c->display_usage)
 		return net_conf_import_usage(c, argc, argv);
@@ -347,10 +351,10 @@
 		goto done;
 	}
 
-	werr = smbconf_init(mem_ctx, &txt_ctx, conf_source);
-	if (!W_ERROR_IS_OK(werr)) {
+	err = smbconf_init(mem_ctx, &txt_ctx, conf_source);
+	if (!SBC_ERROR_IS_OK(err)) {
 		d_printf(_("error loading file '%s': %s\n"), filename,
-			 win_errstr(werr));
+			 sbcErrorString(err));
 		goto done;
 	}
 
@@ -362,37 +366,36 @@
 	if (servicename != NULL) {
 		struct smbconf_service *service = NULL;
 
-		werr = smbconf_get_share(txt_ctx, mem_ctx,
-					 servicename,
-					 &service);
-		if (!W_ERROR_IS_OK(werr)) {
+		err = smbconf_get_share(txt_ctx, mem_ctx,
+					servicename,
+					&service);
+		if (!SBC_ERROR_IS_OK(err)) {
 			goto cancel;
 		}
 
-		werr = smbconf_transaction_start(conf_ctx);
-		if (!W_ERROR_IS_OK(werr)) {
+		err = smbconf_transaction_start(conf_ctx);
+		if (!SBC_ERROR_IS_OK(err)) {
 			d_printf(_("error starting transaction: %s\n"),
-				 win_errstr(werr));
+				 sbcErrorString(err));
 			goto done;
 		}
 
-		werr = import_process_service(c, conf_ctx, service);
-		if (!W_ERROR_IS_OK(werr)) {
+		err = import_process_service(c, conf_ctx, service);
+		if (!SBC_ERROR_IS_OK(err)) {
 			goto cancel;
 		}
 	} else {
 		struct smbconf_service **services = NULL;
 		uint32_t num_shares, sidx;
 
-		werr = smbconf_get_config(txt_ctx, mem_ctx,
+		err = smbconf_get_config(txt_ctx, mem_ctx,
 					  &num_shares,
 					  &services);
-		if (!W_ERROR_IS_OK(werr)) {
+		if (!SBC_ERROR_IS_OK(err)) {
 			goto cancel;
 		}
 		if (!c->opt_testmode) {
-			werr = smbconf_drop(conf_ctx);
-			if (!W_ERROR_IS_OK(werr)) {
+			if (!SBC_ERROR_IS_OK(smbconf_drop(conf_ctx))) {
 				goto cancel;
 			}
 		}
@@ -405,17 +408,17 @@
 		 * imported shares, the MAX_TALLOC_SIZE of 256 MB
 		 * was exceeded.
 		 */
-		werr = smbconf_transaction_start(conf_ctx);
-		if (!W_ERROR_IS_OK(werr)) {
+		err = smbconf_transaction_start(conf_ctx);
+		if (!SBC_ERROR_IS_OK(err)) {
 			d_printf(_("error starting transaction: %s\n"),
-				 win_errstr(werr));
+				 sbcErrorString(err));
 			goto done;
 		}
 
 		for (sidx = 0; sidx < num_shares; sidx++) {
-			werr = import_process_service(c, conf_ctx,
-						      services[sidx]);
-			if (!W_ERROR_IS_OK(werr)) {
+			err = import_process_service(c, conf_ctx,
+						     services[sidx]);
+			if (!SBC_ERROR_IS_OK(err)) {
 				goto cancel;
 			}
 
@@ -423,26 +426,26 @@
 				continue;
 			}
 
-			werr = smbconf_transaction_commit(conf_ctx);
-			if (!W_ERROR_IS_OK(werr)) {
+			err = smbconf_transaction_commit(conf_ctx);
+			if (!SBC_ERROR_IS_OK(err)) {
 				d_printf(_("error committing transaction: "
 					   "%s\n"),
-					 win_errstr(werr));
+					 sbcErrorString(err));
 				goto done;
 			}
-			werr = smbconf_transaction_start(conf_ctx);
-			if (!W_ERROR_IS_OK(werr)) {
+			err = smbconf_transaction_start(conf_ctx);
+			if (!SBC_ERROR_IS_OK(err)) {
 				d_printf(_("error starting transaction: %s\n"),
-					 win_errstr(werr));
+					 sbcErrorString(err));
 				goto done;
 			}
 		}
 	}
 
-	werr = smbconf_transaction_commit(conf_ctx);
-	if (!W_ERROR_IS_OK(werr)) {
+	err = smbconf_transaction_commit(conf_ctx);
+	if (!SBC_ERROR_IS_OK(err)) {
 		d_printf(_("error committing transaction: %s\n"),
-			 win_errstr(werr));
+			 sbcErrorString(err));
 	} else {
 		ret = 0;
 	}
@@ -450,10 +453,10 @@
 	goto done;
 
 cancel:
-	werr = smbconf_transaction_cancel(conf_ctx);
-	if (!W_ERROR_IS_OK(werr)) {
+	err = smbconf_transaction_cancel(conf_ctx);
+	if (!SBC_ERROR_IS_OK(err)) {
 		d_printf(_("error cancelling transaction: %s\n"),
-			 win_errstr(werr));
+			 sbcErrorString(err));
 	}
 
 done:
@@ -465,7 +468,7 @@
 			       struct smbconf_ctx *conf_ctx, int argc,
 			       const char **argv)
 {
-	WERROR werr = WERR_OK;
+	sbcErr err;
 	int ret = -1;
 	uint32_t count, num_shares = 0;
 	char **share_names = NULL;
@@ -478,9 +481,9 @@
 		goto done;
 	}
 
-	werr = smbconf_get_share_names(conf_ctx, mem_ctx, &num_shares,
-				       &share_names);
-	if (!W_ERROR_IS_OK(werr)) {
+	err = smbconf_get_share_names(conf_ctx, mem_ctx, &num_shares,
+				      &share_names);
+	if (!SBC_ERROR_IS_OK(err)) {
 		goto done;
 	}
 
@@ -500,17 +503,17 @@
 			 int argc, const char **argv)
 {
 	int ret = -1;
-	WERROR werr;
+	sbcErr err;
 
 	if (argc != 0 || c->display_usage) {
 		net_conf_drop_usage(c, argc, argv);
 		goto done;
 	}
 
-	werr = smbconf_drop(conf_ctx);
-	if (!W_ERROR_IS_OK(werr)) {
+	err = smbconf_drop(conf_ctx);
+	if (!SBC_ERROR_IS_OK(err)) {
 		d_fprintf(stderr, _("Error deleting configuration: %s\n"),
-			  win_errstr(werr));
+			  sbcErrorString(err));
 		goto done;
 	}
 
@@ -525,7 +528,7 @@
 			      const char **argv)
 {
 	int ret = -1;
-	WERROR werr = WERR_OK;
+	sbcErr err;
 	const char *sharename = NULL;
 	TALLOC_CTX *mem_ctx;
 	uint32_t count;
@@ -544,10 +547,10 @@
 		goto done;
 	}
 
-	werr = smbconf_get_share(conf_ctx, mem_ctx, sharename, &service);
-	if (!W_ERROR_IS_OK(werr)) {
+	err = smbconf_get_share(conf_ctx, mem_ctx, sharename, &service);
+	if (!SBC_ERROR_IS_OK(err)) {
 		d_printf(_("error getting share parameters: %s\n"),
-			 win_errstr(werr));
+			 sbcErrorString(err));
 		goto done;
 	}
 
@@ -576,7 +579,7 @@
 			     const char **argv)
 {
 	int ret = -1;
-	WERROR werr = WERR_OK;
+	sbcErr err;
 	char *sharename = NULL;
 	const char *path = NULL;
 	const char *comment = NULL;
@@ -702,10 +705,10 @@
 	 * start a transaction
 	 */
 
-	werr = smbconf_transaction_start(conf_ctx);
-	if (!W_ERROR_IS_OK(werr)) {
+	err = smbconf_transaction_start(conf_ctx);
+	if (!SBC_ERROR_IS_OK(err)) {
 		d_printf("error starting transaction: %s\n",
-			 win_errstr(werr));
+			 sbcErrorString(err));
 		goto done;
 	}
 
@@ -713,10 +716,10 @@
 	 * create the share
 	 */
 
-	werr = smbconf_create_share(conf_ctx, sharename);
-	if (!W_ERROR_IS_OK(werr)) {
+	err = smbconf_create_share(conf_ctx, sharename);
+	if (!SBC_ERROR_IS_OK(err)) {
 		d_fprintf(stderr, _("Error creating share %s: %s\n"),
-			  sharename, win_errstr(werr));
+			  sharename, sbcErrorString(err));
 		goto cancel;
 	}
 
@@ -724,35 +727,35 @@
 	 * fill the share with parameters
 	 */
 
-	werr = smbconf_set_parameter(conf_ctx, sharename, "path", path);
-	if (!W_ERROR_IS_OK(werr)) {
+	err = smbconf_set_parameter(conf_ctx, sharename, "path", path);
+	if (!SBC_ERROR_IS_OK(err)) {
 		d_fprintf(stderr, _("Error setting parameter %s: %s\n"),
-			  "path", win_errstr(werr));
+			  "path", sbcErrorString(err));
 		goto cancel;
 	}
 
 	if (comment != NULL) {
-		werr = smbconf_set_parameter(conf_ctx, sharename, "comment",
-					     comment);
-		if (!W_ERROR_IS_OK(werr)) {
+		err = smbconf_set_parameter(conf_ctx, sharename, "comment",
+					    comment);
+		if (!SBC_ERROR_IS_OK(err)) {
 			d_fprintf(stderr, _("Error setting parameter %s: %s\n"),
-				  "comment", win_errstr(werr));
+				  "comment", sbcErrorString(err));
 			goto cancel;
 		}
 	}
 
-	werr = smbconf_set_parameter(conf_ctx, sharename, "guest ok", guest_ok);
-	if (!W_ERROR_IS_OK(werr)) {
+	err = smbconf_set_parameter(conf_ctx, sharename, "guest ok", guest_ok);
+	if (!SBC_ERROR_IS_OK(err)) {
 		d_fprintf(stderr, _("Error setting parameter %s: %s\n"),
-			  "'guest ok'", win_errstr(werr));
+			  "'guest ok'", sbcErrorString(err));
 		goto cancel;
 	}
 
-	werr = smbconf_set_parameter(conf_ctx, sharename, "writeable",
-				     writeable);
-	if (!W_ERROR_IS_OK(werr)) {
+	err = smbconf_set_parameter(conf_ctx, sharename, "writeable",
+				    writeable);
+	if (!SBC_ERROR_IS_OK(err)) {
 		d_fprintf(stderr, _("Error setting parameter %s: %s\n"),
-			  "writeable", win_errstr(werr));
+			  "writeable", sbcErrorString(err));
 		goto cancel;
 	}
 
@@ -760,10 +763,10 @@
 	 * commit the whole thing
 	 */
 
-	werr = smbconf_transaction_commit(conf_ctx);
-	if (!W_ERROR_IS_OK(werr)) {
+	err = smbconf_transaction_commit(conf_ctx);
+	if (!SBC_ERROR_IS_OK(err)) {
 		d_printf("error committing transaction: %s\n",
-			 win_errstr(werr));
+			 sbcErrorString(err));
 	} else {
 		ret = 0;
 	}
@@ -771,10 +774,10 @@
 	goto done;
 
 cancel:
-	werr = smbconf_transaction_cancel(conf_ctx);
-	if (!W_ERROR_IS_OK(werr)) {
+	err = smbconf_transaction_cancel(conf_ctx);
+	if (!SBC_ERROR_IS_OK(err)) {
 		d_printf("error cancelling transaction: %s\n",
-			 win_errstr(werr));
+			 sbcErrorString(err));
 	}
 
 done:
@@ -788,7 +791,7 @@
 {
 	int ret = -1;
 	const char *sharename = NULL;
-	WERROR werr = WERR_OK;
+	sbcErr err;
 	TALLOC_CTX *mem_ctx = talloc_stackframe();
 
 	if (argc != 1 || c->display_usage) {
@@ -801,10 +804,10 @@
 		goto done;
 	}
 
-	werr = smbconf_delete_share(conf_ctx, sharename);
-	if (!W_ERROR_IS_OK(werr)) {
+	err = smbconf_delete_share(conf_ctx, sharename);
+	if (!SBC_ERROR_IS_OK(err)) {
 		d_fprintf(stderr, _("Error deleting share %s: %s\n"),
-			  sharename, win_errstr(werr));
+			  sharename, sbcErrorString(err));
 		goto done;
 	}
 
@@ -818,7 +821,7 @@
 			    int argc, const char **argv)
 {
 	int ret = -1;
-	WERROR werr = WERR_OK;
+	sbcErr err;
 	char *service = NULL;
 	char *param = NULL;
 	const char *value_str = NULL;
@@ -846,34 +849,33 @@
 	}
 	value_str = argv[2];
 
-	werr = smbconf_transaction_start(conf_ctx);
-	if (!W_ERROR_IS_OK(werr)) {
+	err = smbconf_transaction_start(conf_ctx);
+	if (!SBC_ERROR_IS_OK(err)) {
 		d_printf(_("error starting transaction: %s\n"),
-			 win_errstr(werr));
+			 sbcErrorString(err));
 		goto done;
 	}
 
 	if (!smbconf_share_exists(conf_ctx, service)) {
-		werr = smbconf_create_share(conf_ctx, service);
-		if (!W_ERROR_IS_OK(werr)) {
+		err = smbconf_create_share(conf_ctx, service);
+		if (!SBC_ERROR_IS_OK(err)) {
 			d_fprintf(stderr, _("Error creating share '%s': %s\n"),
-				  service, win_errstr(werr));
+				  service, sbcErrorString(err));
 			goto cancel;
 		}
 	}
 
-	werr = smbconf_set_parameter(conf_ctx, service, param, value_str);
-
-	if (!W_ERROR_IS_OK(werr)) {
+	err = smbconf_set_parameter(conf_ctx, service, param, value_str);
+	if (!SBC_ERROR_IS_OK(err)) {
 		d_fprintf(stderr, _("Error setting value '%s': %s\n"),
-			  param, win_errstr(werr));
+			  param, sbcErrorString(err));
 		goto cancel;
 	}
 
-	werr = smbconf_transaction_commit(conf_ctx);
-	if (!W_ERROR_IS_OK(werr)) {
+	err = smbconf_transaction_commit(conf_ctx);
+	if (!SBC_ERROR_IS_OK(err)) {
 		d_printf(_("error committing transaction: %s\n"),
-			 win_errstr(werr));
+			 sbcErrorString(err));
 	} else {
 		ret = 0;
 	}
@@ -881,10 +883,10 @@
 	goto done;
 
 cancel:
-	werr = smbconf_transaction_cancel(conf_ctx);
-	if (!W_ERROR_IS_OK(werr)) {
+	err = smbconf_transaction_cancel(conf_ctx);
+	if (!SBC_ERROR_IS_OK(err)) {
 		d_printf(_("error cancelling transaction: %s\n"),
-			 win_errstr(werr));
+			 sbcErrorString(err));
 	}
 
 done:
@@ -896,7 +898,7 @@
 			    int argc, const char **argv)
 {
 	int ret = -1;
-	WERROR werr = WERR_OK;
+	sbcErr err;
 	char *service = NULL;
 	char *param = NULL;
 	char *valstr = NULL;
@@ -925,21 +927,20 @@
 		goto done;
 	}
 
-	werr = smbconf_get_parameter(conf_ctx, mem_ctx, service, param, &valstr);
-
-	if (W_ERROR_EQUAL(werr, WERR_NO_SUCH_SERVICE)) {
+	err = smbconf_get_parameter(conf_ctx, mem_ctx, service, param, &valstr);
+	if (SBC_ERROR_EQUAL(err, SBC_ERR_NO_SUCH_SERVICE)) {
 		d_fprintf(stderr,
 			  _("Error: given service '%s' does not exist.\n"),
 			  service);
 		goto done;
-	} else if (W_ERROR_EQUAL(werr, WERR_INVALID_PARAM)) {
+	} else if (SBC_ERROR_EQUAL(err, SBC_ERR_INVALID_PARAM)) {
 		d_fprintf(stderr,
 			  _("Error: given parameter '%s' is not set.\n"),
 			  param);
 		goto done;
-	} else if (!W_ERROR_IS_OK(werr)) {
+	} else if (!SBC_ERROR_IS_OK(err)) {
 		d_fprintf(stderr, _("Error getting value '%s': %s.\n"),
-			  param, win_errstr(werr));
+			  param, sbcErrorString(err));
 		goto done;
 	}
 
@@ -955,7 +956,7 @@
 			    int argc, const char **argv)
 {
 	int ret = -1;
-	WERROR werr = WERR_OK;
+	sbcErr err;
 	char *service = NULL;
 	char *param = NULL;
 	TALLOC_CTX *mem_ctx = talloc_stackframe();
@@ -981,21 +982,20 @@
 		goto done;
 	}
 
-	werr = smbconf_delete_parameter(conf_ctx, service, param);
-
-	if (W_ERROR_EQUAL(werr, WERR_NO_SUCH_SERVICE)) {
+	err = smbconf_delete_parameter(conf_ctx, service, param);
+	if (SBC_ERROR_EQUAL(err, SBC_ERR_NO_SUCH_SERVICE)) {
 		d_fprintf(stderr,
 			  _("Error: given service '%s' does not exist.\n"),
 			  service);
 		goto done;
-	} else if (W_ERROR_EQUAL(werr, WERR_INVALID_PARAM)) {
+	} else if (SBC_ERROR_EQUAL(err, SBC_ERR_INVALID_PARAM)) {
 		d_fprintf(stderr,
 			  _("Error: given parameter '%s' is not set.\n"),
 			  param);
 		goto done;
-	} else if (!W_ERROR_IS_OK(werr)) {
+	} else if (!SBC_ERROR_IS_OK(err)) {
 		d_fprintf(stderr, _("Error deleting value '%s': %s.\n"),
-			  param, win_errstr(werr));
+			  param, sbcErrorString(err));
 		goto done;
 	}
 
@@ -1010,7 +1010,7 @@
 				struct smbconf_ctx *conf_ctx,
 				int argc, const char **argv)
 {
-	WERROR werr;
+	sbcErr err;
 	uint32_t num_includes;
 	uint32_t count;
 	char *service;
@@ -1029,10 +1029,10 @@
 		goto done;
 	}
 
-	werr = smbconf_get_includes(conf_ctx, mem_ctx, service,
+	err = smbconf_get_includes(conf_ctx, mem_ctx, service,
 				    &num_includes, &includes);
-	if (!W_ERROR_IS_OK(werr)) {
-		d_printf(_("error getting includes: %s\n"), win_errstr(werr));
+	if (!SBC_ERROR_IS_OK(err)) {
+		d_printf(_("error getting includes: %s\n"), sbcErrorString(err));
 		goto done;
 	}
 
@@ -1051,7 +1051,7 @@
 				struct smbconf_ctx *conf_ctx,
 				int argc, const char **argv)
 {
-	WERROR werr;
+	sbcErr err;
 	char *service;
 	uint32_t num_includes;
 	const char **includes;
@@ -1076,9 +1076,9 @@
 		includes = argv + 1;
 	}
 
-	werr = smbconf_set_includes(conf_ctx, service, num_includes, includes);
-	if (!W_ERROR_IS_OK(werr)) {
-		d_printf(_("error setting includes: %s\n"), win_errstr(werr));
+	err = smbconf_set_includes(conf_ctx, service, num_includes, includes);
+	if (!SBC_ERROR_IS_OK(err)) {
+		d_printf(_("error setting includes: %s\n"), sbcErrorString(err));
 		goto done;
 	}
 
@@ -1093,7 +1093,7 @@
 				struct smbconf_ctx *conf_ctx,
 				int argc, const char **argv)
 {
-	WERROR werr;
+	sbcErr err;
 	char *service;
 	int ret = -1;
 	TALLOC_CTX *mem_ctx = talloc_stackframe();
@@ -1109,9 +1109,9 @@
 		goto done;
 	}
 
-	werr = smbconf_delete_includes(conf_ctx, service);
-	if (!W_ERROR_IS_OK(werr)) {
-		d_printf(_("error deleting includes: %s\n"), win_errstr(werr));
+	err = smbconf_delete_includes(conf_ctx, service);
+	if (!SBC_ERROR_IS_OK(err)) {
+		d_printf(_("error deleting includes: %s\n"), sbcErrorString(err));
 		goto done;
 	}
 
@@ -1140,14 +1140,13 @@
 					    int, const char **),
 				  int argc, const char **argv)
 {
-	WERROR werr;
+	sbcErr err;
 	TALLOC_CTX *mem_ctx = talloc_stackframe();
 	struct smbconf_ctx *conf_ctx;
 	int ret = -1;
 
-	werr = smbconf_init(mem_ctx, &conf_ctx, "registry:");
-
-	if (!W_ERROR_IS_OK(werr)) {
+	err = smbconf_init(mem_ctx, &conf_ctx, "registry:");
+	if (!SBC_ERROR_IS_OK(err)) {
 		return -1;
 	}
 

Modified: branches/samba/experimental/source3/utils/net_dom.c
===================================================================
--- branches/samba/experimental/source3/utils/net_dom.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/utils/net_dom.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -23,6 +23,7 @@
 #include "../librpc/gen_ndr/ndr_winreg.h"
 #include "lib/netapi/netapi.h"
 #include "lib/netapi/netapi_net.h"
+#include "libsmb/libsmb.h"
 
 int net_dom_usage(struct net_context *c, int argc, const char **argv)
 {

Modified: branches/samba/experimental/source3/utils/net_idmap.c
===================================================================
--- branches/samba/experimental/source3/utils/net_idmap.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/utils/net_idmap.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -25,6 +25,7 @@
 #include "dbwrap.h"
 #include "../libcli/security/security.h"
 #include "net_idmap_check.h"
+#include "util_tdb.h"
 
 #define ALLOC_CHECK(mem) do { \
 	if (!mem) { \

Modified: branches/samba/experimental/source3/utils/net_idmap_check.c
===================================================================
--- branches/samba/experimental/source3/utils/net_idmap_check.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/utils/net_idmap_check.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -32,6 +32,7 @@
 #include "cbuf.h"
 #include "srprs.h"
 #include <termios.h>
+#include "util_tdb.h"
 
 static int traverse_commit(struct db_record *diff_rec, void* data);
 static int traverse_check(struct db_record *rec, void* data);

Modified: branches/samba/experimental/source3/utils/net_printing.c
===================================================================
--- branches/samba/experimental/source3/utils/net_printing.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/utils/net_printing.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -28,6 +28,7 @@
 #include "rpc_client/cli_spoolss.h"
 #include "../libcli/security/security.h"
 #include "../librpc/gen_ndr/ndr_security.h"
+#include "util_tdb.h"
 
 #define FORMS_PREFIX "FORMS/"
 #define DRIVERS_PREFIX "DRIVERS/"

Modified: branches/samba/experimental/source3/utils/net_proto.h
===================================================================
--- branches/samba/experimental/source3/utils/net_proto.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/utils/net_proto.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -23,6 +23,7 @@
 #ifndef _NET_PROTO_H_
 #define _NET_PROTO_H_
 
+#include "libads/ads_status.h"
 
 /* The following definitions come from utils/net.c  */
 

Modified: branches/samba/experimental/source3/utils/net_rap.c
===================================================================
--- branches/samba/experimental/source3/utils/net_rap.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/utils/net_rap.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -26,6 +26,7 @@
 #include "../librpc/gen_ndr/rap.h"
 #include "../librpc/gen_ndr/svcctl.h"
 #include "utils/net.h"
+#include "libsmb/libsmb.h"
 #include "libsmb/clirap.h"
 
 /* The following messages were for error checking that is not properly

Modified: branches/samba/experimental/source3/utils/net_rpc.c
===================================================================
--- branches/samba/experimental/source3/utils/net_rpc.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/utils/net_rpc.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -39,6 +39,7 @@
 #include "lib/netapi/netapi_net.h"
 #include "rpc_client/init_lsa.h"
 #include "../libcli/security/security.h"
+#include "libsmb/libsmb.h"
 #include "libsmb/clirap.h"
 #include "nsswitch/libwbclient/wbclient.h"
 #include "passdb.h"
@@ -3730,7 +3731,7 @@
 	DEBUG(3,("got mask: %s, name: %s\n", mask, f->name));
 
 	/* DIRECTORY */
-	if (f->mode & aDIR) {
+	if (f->mode & FILE_ATTRIBUTE_DIRECTORY) {
 
 		DEBUG(3,("got dir: %s\n", f->name));
 
@@ -3968,7 +3969,7 @@
 		cp_clistate.cli_share_src = NULL;
 		cp_clistate.cli_share_dst = NULL;
 		cp_clistate.cwd = NULL;
-		cp_clistate.attribute = aSYSTEM | aHIDDEN | aDIR;
+		cp_clistate.attribute = FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_DIRECTORY;
 		cp_clistate.c = c;
 
 	        /* open share source */

Modified: branches/samba/experimental/source3/utils/net_rpc_join.c
===================================================================
--- branches/samba/experimental/source3/utils/net_rpc_join.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/utils/net_rpc_join.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -30,6 +30,7 @@
 #include "rpc_client/cli_netlogon.h"
 #include "secrets.h"
 #include "rpc_client/init_lsa.h"
+#include "libsmb/libsmb.h"
 
 /* Macro for checking RPC error codes to make things more readable */
 

Modified: branches/samba/experimental/source3/utils/net_rpc_printer.c
===================================================================
--- branches/samba/experimental/source3/utils/net_rpc_printer.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/utils/net_rpc_printer.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -27,7 +27,7 @@
 #include "registry/reg_objects.h"
 #include "../libcli/security/security.h"
 #include "../libcli/registry/util_reg.h"
-#include "ntdomain.h"
+#include "libsmb/libsmb.h"
 
 /* support itanium as well */
 static const struct print_architecture_table_node archi_table[]= {
@@ -70,7 +70,7 @@
 	printf(_("\tConfigfile: [%s]\n\n"), r->config_file);
 	printf(_("\tHelpfile: [%s]\n\n"), r->help_file);
 
-	for (i=0; r->dependent_files[i] != NULL; i++) {
+	for (i=0; r->dependent_files && r->dependent_files[i] != NULL; i++) {
 		printf(_("\tDependentfiles: [%s]\n"), r->dependent_files[i]);
 	}
 
@@ -387,20 +387,19 @@
 	while (is_file) {
 
 		/* copying file */
-		int n, ret;
+		int n;
 		n = cli_read(cli_share_src, fnum_src, data, nread,
 				read_size);
 
 		if (n <= 0)
 			break;
 
-		ret = cli_write(cli_share_dst, fnum_dst, 0, data,
-			nread, n);
+		nt_status = cli_writeall(cli_share_dst, fnum_dst, 0,
+					 (uint8_t *)data, nread, n, NULL);
 
-		if (n != ret) {
+		if (!NT_STATUS_IS_OK(nt_status)) {
 			d_fprintf(stderr, _("Error writing file: %s\n"),
-				cli_errstr(cli_share_dst));
-			nt_status = cli_nt_error(cli_share_dst);
+				  nt_errstr(nt_status));
 			goto out;
 		}
 

Modified: branches/samba/experimental/source3/utils/net_rpc_registry.c
===================================================================
--- branches/samba/experimental/source3/utils/net_rpc_registry.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/utils/net_rpc_registry.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -31,6 +31,7 @@
 #include <assert.h>
 #include "../libcli/security/display_sec.h"
 #include "../libcli/registry/util_reg.h"
+#include "client.h"
 
 
 /*******************************************************************

Modified: branches/samba/experimental/source3/utils/net_rpc_shell.c
===================================================================
--- branches/samba/experimental/source3/utils/net_rpc_shell.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/utils/net_rpc_shell.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -26,6 +26,7 @@
 #include "lib/netapi/netapi.h"
 #include "lib/netapi/netapi_net.h"
 #include "../libcli/smbreadline/smbreadline.h"
+#include "libsmb/libsmb.h"
 
 static NTSTATUS rpc_sh_info(struct net_context *c,
 			    TALLOC_CTX *mem_ctx, struct rpc_sh_ctx *ctx,

Modified: branches/samba/experimental/source3/utils/net_rpc_trust.c
===================================================================
--- branches/samba/experimental/source3/utils/net_rpc_trust.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/utils/net_rpc_trust.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -25,6 +25,7 @@
 #include "../librpc/gen_ndr/ndr_lsa_c.h"
 #include "../lib/crypto/crypto.h"
 #include "../libcli/security/dom_sid.h"
+#include "libsmb/libsmb.h"
 
 
 #define ARG_OTHERSERVER "otherserver="

Modified: branches/samba/experimental/source3/utils/net_time.c
===================================================================
--- branches/samba/experimental/source3/utils/net_time.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/utils/net_time.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -19,6 +19,7 @@
 #include "includes.h"
 #include "utils/net.h"
 #include "libsmb/nmblib.h"
+#include "libsmb/libsmb.h"
 
 /*
   return the time on a server. This does not require any authentication

Modified: branches/samba/experimental/source3/utils/net_util.c
===================================================================
--- branches/samba/experimental/source3/utils/net_util.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/utils/net_util.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -27,6 +27,7 @@
 #include "../librpc/gen_ndr/ndr_dssetup_c.h"
 #include "secrets.h"
 #include "../libcli/security/security.h"
+#include "libsmb/libsmb.h"
 
 NTSTATUS net_rpc_lookup_name(struct net_context *c,
 			     TALLOC_CTX *mem_ctx, struct cli_state *cli,

Modified: branches/samba/experimental/source3/utils/netlookup.c
===================================================================
--- branches/samba/experimental/source3/utils/netlookup.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/utils/netlookup.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -24,6 +24,7 @@
 #include "rpc_client/cli_pipe.h"
 #include "../librpc/gen_ndr/ndr_lsa.h"
 #include "rpc_client/cli_lsarpc.h"
+#include "libsmb/libsmb.h"
 
 /********************************************************
  Connection cachine struct. Goes away when ctx destroyed.

Modified: branches/samba/experimental/source3/utils/smbcacls.c
===================================================================
--- branches/samba/experimental/source3/utils/smbcacls.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/utils/smbcacls.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -27,6 +27,7 @@
 #include "../librpc/gen_ndr/ndr_lsa.h"
 #include "rpc_client/cli_lsarpc.h"
 #include "../libcli/security/security.h"
+#include "libsmb/libsmb.h"
 #include "libsmb/clirap.h"
 #include "passdb/machine_sid.h"
 
@@ -1044,7 +1045,7 @@
 				/* Add inherited flag to all aces */
 				ace->flags=ace->flags|
 				           SEC_ACE_FLAG_INHERITED_ACE;
-				if ((oldattr & aDIR) == aDIR) {
+				if ((oldattr & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY) {
 					if ((ace->flags & SEC_ACE_FLAG_CONTAINER_INHERIT) ==
 					    SEC_ACE_FLAG_CONTAINER_INHERIT) {
 						add_ace(&old->dacl, ace);

Modified: branches/samba/experimental/source3/utils/smbcontrol.c
===================================================================
--- branches/samba/experimental/source3/utils/smbcontrol.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/utils/smbcontrol.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -31,6 +31,7 @@
 #include "printing/notify.h"
 #include "libsmb/nmblib.h"
 #include "messages.h"
+#include "util_tdb.h"
 
 #if HAVE_LIBUNWIND_H
 #include <libunwind.h>

Modified: branches/samba/experimental/source3/utils/smbcquotas.c
===================================================================
--- branches/samba/experimental/source3/utils/smbcquotas.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/utils/smbcquotas.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -28,6 +28,7 @@
 #include "rpc_client/cli_lsarpc.h"
 #include "fake_file.h"
 #include "../libcli/security/security.h"
+#include "libsmb/libsmb.h"
 
 static char *server;
 

Modified: branches/samba/experimental/source3/utils/smbtree.c
===================================================================
--- branches/samba/experimental/source3/utils/smbtree.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/utils/smbtree.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -23,6 +23,7 @@
 #include "popt_common.h"
 #include "rpc_client/cli_pipe.h"
 #include "../librpc/gen_ndr/ndr_srvsvc_c.h"
+#include "libsmb/libsmb.h"
 #include "libsmb/clirap.h"
 
 static int use_bcast;

Modified: branches/samba/experimental/source3/web/diagnose.c
===================================================================
--- branches/samba/experimental/source3/web/diagnose.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/web/diagnose.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -20,6 +20,7 @@
 #include "includes.h"
 #include "web/swat_proto.h"
 #include "lib/winbind_util.h"
+#include "libsmb/libsmb.h"
 
 #ifdef WITH_WINBIND
 

Modified: branches/samba/experimental/source3/winbindd/idmap_autorid.c
===================================================================
--- branches/samba/experimental/source3/winbindd/idmap_autorid.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/winbindd/idmap_autorid.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -28,6 +28,7 @@
 #include "dbwrap.h"
 #include "idmap.h"
 #include "../libcli/security/dom_sid.h"
+#include "util_tdb.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_IDMAP

Modified: branches/samba/experimental/source3/winbindd/idmap_tdb.c
===================================================================
--- branches/samba/experimental/source3/winbindd/idmap_tdb.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/winbindd/idmap_tdb.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -30,6 +30,7 @@
 #include "idmap_rw.h"
 #include "dbwrap.h"
 #include "../libcli/security/security.h"
+#include "util_tdb.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_IDMAP

Modified: branches/samba/experimental/source3/winbindd/idmap_tdb2.c
===================================================================
--- branches/samba/experimental/source3/winbindd/idmap_tdb2.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/winbindd/idmap_tdb2.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -38,6 +38,7 @@
 #include "idmap_rw.h"
 #include "dbwrap.h"
 #include "../libcli/security/dom_sid.h"
+#include "util_tdb.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_IDMAP

Modified: branches/samba/experimental/source3/winbindd/wb_fill_pwent.c
===================================================================
--- branches/samba/experimental/source3/winbindd/wb_fill_pwent.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/winbindd/wb_fill_pwent.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -72,8 +72,7 @@
 
 	status = wb_sid2uid_recv(subreq, &state->pw->pw_uid);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 
@@ -98,8 +97,7 @@
 
 	status = wb_sid2gid_recv(subreq, &state->pw->pw_gid);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 

Modified: branches/samba/experimental/source3/winbindd/wb_getgrsid.c
===================================================================
--- branches/samba/experimental/source3/winbindd/wb_getgrsid.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/winbindd/wb_getgrsid.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -83,8 +83,7 @@
 	status = wb_lookupsid_recv(subreq, state, &state->type,
 				   &state->domname, &state->name);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 
@@ -115,8 +114,7 @@
 
 	status = wb_sid2gid_recv(subreq, &state->gid);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	subreq = wb_group_members_send(state, state->ev, &state->sid,
@@ -137,8 +135,7 @@
 
 	status = wb_group_members_recv(subreq, state, &state->members);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	tevent_req_done(req);

Modified: branches/samba/experimental/source3/winbindd/wb_getpwsid.c
===================================================================
--- branches/samba/experimental/source3/winbindd/wb_getpwsid.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/winbindd/wb_getpwsid.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -74,8 +74,7 @@
 
 	status = wb_queryuser_recv(subreq, state, &state->userinfo);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 
@@ -118,8 +117,7 @@
 	status = wb_lookupsid_recv(subreq, state->userinfo, &type, &domain,
 				   &state->userinfo->acct_name);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	subreq = wb_fill_pwent_send(state, state->ev, state->userinfo,
@@ -137,8 +135,7 @@
 	NTSTATUS status;
 
 	status = wb_fill_pwent_recv(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	tevent_req_done(req);

Modified: branches/samba/experimental/source3/winbindd/wb_gettoken.c
===================================================================
--- branches/samba/experimental/source3/winbindd/wb_gettoken.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/winbindd/wb_gettoken.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -90,8 +90,7 @@
 	status = wb_lookupusergroups_recv(subreq, state, &state->num_sids,
 					  &state->sids);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 
@@ -135,8 +134,7 @@
 
 	status = wb_lookupuseraliases_recv(subreq, state, &num_rids, &rids);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	domain = find_domain_from_sid_noinit(get_global_sam_sid());
@@ -181,8 +179,7 @@
 
 	status = wb_lookupuseraliases_recv(subreq, state, &num_rids, &rids);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	if (!wb_add_rids_to_sids(state, &state->num_sids, &state->sids,

Modified: branches/samba/experimental/source3/winbindd/wb_group_members.c
===================================================================
--- branches/samba/experimental/source3/winbindd/wb_group_members.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/winbindd/wb_group_members.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -155,8 +155,7 @@
 	state->all_members = NULL;
 
 	status = wb_groups_members_next_subreq(state, state, &subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return tevent_req_post(req, ev);
 	}
 	if (subreq == NULL) {
@@ -210,8 +209,7 @@
 	 * and just continue if an error occured.
 	 */
 
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 
@@ -235,8 +233,7 @@
 	TALLOC_FREE(members);
 
 	status = wb_groups_members_next_subreq(state, state, &subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	if (subreq == NULL) {
@@ -313,8 +310,7 @@
 	state->groups->type = type;
 
 	status = wb_group_members_next_subreq(state, state, &subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return tevent_req_post(req, ev);
 	}
 	if (subreq == NULL) {
@@ -361,8 +357,7 @@
 
 	status = wb_groups_members_recv(subreq, state, &num_members, &members);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 
@@ -440,8 +435,7 @@
 	}
 
 	status = wb_group_members_next_subreq(state, state, &subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	if (subreq == NULL) {

Modified: branches/samba/experimental/source3/winbindd/wb_lookupname.c
===================================================================
--- branches/samba/experimental/source3/winbindd/wb_lookupname.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/winbindd/wb_lookupname.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -91,8 +91,7 @@
 
 	status = dcerpc_wbint_LookupName_recv(subreq, state, &result);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	if (NT_STATUS_IS_OK(result)) {

Modified: branches/samba/experimental/source3/winbindd/wb_lookupsid.c
===================================================================
--- branches/samba/experimental/source3/winbindd/wb_lookupsid.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/winbindd/wb_lookupsid.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -76,8 +76,7 @@
 
 	status = dcerpc_wbint_LookupSid_recv(subreq, state, &result);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	if (NT_STATUS_IS_OK(result)) {

Modified: branches/samba/experimental/source3/winbindd/wb_next_grent.c
===================================================================
--- branches/samba/experimental/source3/winbindd/wb_next_grent.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/winbindd/wb_next_grent.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -101,12 +101,11 @@
 
 	status = dcerpc_wbint_QueryGroupList_recv(subreq, state, &result);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
+	if (tevent_req_nterror(req, status)) {
 		/* Ignore errors here, just log it */
 		DEBUG(10, ("query_user_list for domain %s returned %s\n",
 			   state->gstate->domain->name,
 			   nt_errstr(status)));
-		tevent_req_nterror(req, status);
 		return;
 	}
 	if (!NT_STATUS_IS_OK(result)) {
@@ -169,8 +168,7 @@
 	status = wb_getgrsid_recv(subreq, talloc_tos(), &domname, &name,
 				  &state->gr->gr_gid, &state->members);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	if (!fill_grent(talloc_tos(), state->gr, domname, name,

Modified: branches/samba/experimental/source3/winbindd/wb_next_pwent.c
===================================================================
--- branches/samba/experimental/source3/winbindd/wb_next_pwent.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/winbindd/wb_next_pwent.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -148,8 +148,7 @@
 
 	status = wb_fill_pwent_recv(subreq);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	state->gstate->next_user += 1;

Modified: branches/samba/experimental/source3/winbindd/wb_sid2gid.c
===================================================================
--- branches/samba/experimental/source3/winbindd/wb_sid2gid.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/winbindd/wb_sid2gid.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -94,8 +94,7 @@
 
 	status = wb_lookupsid_recv(subreq, talloc_tos(), &type, &domname,
 				   &name);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 

Modified: branches/samba/experimental/source3/winbindd/wb_sid2uid.c
===================================================================
--- branches/samba/experimental/source3/winbindd/wb_sid2uid.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/winbindd/wb_sid2uid.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -93,8 +93,7 @@
 
 	status = wb_lookupsid_recv(subreq, talloc_tos(), &type, &domname,
 				   &name);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 

Modified: branches/samba/experimental/source3/winbindd/winbindd.c
===================================================================
--- branches/samba/experimental/source3/winbindd/winbindd.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/winbindd/winbindd.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -27,6 +27,7 @@
 #include "winbindd.h"
 #include "nsswitch/winbind_client.h"
 #include "nsswitch/wb_reqtrans.h"
+#include "ntdomain.h"
 #include "../librpc/gen_ndr/srv_lsa.h"
 #include "../librpc/gen_ndr/srv_samr.h"
 #include "secrets.h"
@@ -387,6 +388,7 @@
 {
 	uint8 ret;
 	pid_t child_pid;
+	NTSTATUS status;
 
 	DEBUG(10, ("winbindd_msg_validate_cache: got validate-cache "
 		   "message.\n"));
@@ -413,7 +415,10 @@
 
 	/* child */
 
-	if (!winbindd_reinit_after_fork(NULL)) {
+	status = winbindd_reinit_after_fork(NULL, NULL);
+	if (!NT_STATUS_IS_OK(status)) {
+		DEBUG(1, ("winbindd_reinit_after_fork failed: %s\n",
+			  nt_errstr(status)));
 		_exit(0);
 	}
 

Modified: branches/samba/experimental/source3/winbindd/winbindd.h
===================================================================
--- branches/samba/experimental/source3/winbindd/winbindd.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/winbindd/winbindd.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -30,6 +30,8 @@
 #include "talloc_dict.h"
 #include "smb_ldap.h"
 
+#include "../lib/util/tevent_ntstatus.h"
+
 #ifdef HAVE_LIBNSCD
 #include <libnscd.h>
 #endif

Modified: branches/samba/experimental/source3/winbindd/winbindd_cache.c
===================================================================
--- branches/samba/experimental/source3/winbindd/winbindd_cache.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/winbindd/winbindd_cache.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -33,6 +33,7 @@
 #include "nss_info.h"
 #include "../libcli/security/security.h"
 #include "passdb/machine_sid.h"
+#include "util_tdb.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_WINBIND

Modified: branches/samba/experimental/source3/winbindd/winbindd_cm.c
===================================================================
--- branches/samba/experimental/source3/winbindd/winbindd_cm.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/winbindd/winbindd_cm.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -69,13 +69,13 @@
 #include "rpc_client/cli_lsarpc.h"
 #include "../librpc/gen_ndr/ndr_dssetup_c.h"
 #include "libads/sitename_cache.h"
+#include "libsmb/libsmb.h"
 #include "libsmb/clidgram.h"
 #include "ads.h"
 #include "secrets.h"
 #include "../libcli/security/security.h"
 #include "passdb.h"
 #include "messages.h"
-#include "ntdomain.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_WINBIND
@@ -189,6 +189,7 @@
 	TALLOC_CTX *mem_ctx = NULL;
 	pid_t parent_pid = sys_getpid();
 	char *lfile = NULL;
+	NTSTATUS status;
 
 	if (domain->dc_probe_pid != (pid_t)-1) {
 		/*
@@ -233,7 +234,10 @@
 		}
 	}
 
-	if (!winbindd_reinit_after_fork(lfile)) {
+	status = winbindd_reinit_after_fork(NULL, lfile);
+	if (!NT_STATUS_IS_OK(status)) {
+		DEBUG(1, ("winbindd_reinit_after_fork failed: %s\n",
+			  nt_errstr(status)));
 		messaging_send_buf(winbind_messaging_context(),
 				   pid_to_procid(parent_pid),
 				   MSG_WINBIND_FAILED_TO_GO_ONLINE,
@@ -816,7 +820,12 @@
 
 	(*cli)->timeout = 10000; 	/* 10 seconds */
 	(*cli)->fd = sockfd;
-	fstrcpy((*cli)->desthost, controller);
+	(*cli)->desthost = talloc_strdup((*cli), controller);
+	if ((*cli)->desthost == NULL) {
+		result = NT_STATUS_NO_MEMORY;
+		goto done;
+	}
+
 	(*cli)->use_kerberos = True;
 
 	peeraddr_len = sizeof(peeraddr);
@@ -1699,6 +1708,7 @@
 void close_conns_after_fork(void)
 {
 	struct winbindd_domain *domain;
+	struct winbindd_cli_state *cli_state;
 
 	for (domain = domain_list(); domain; domain = domain->next) {
 		struct cli_state *cli = domain->conn.cli;
@@ -1715,6 +1725,15 @@
 
 		invalidate_cm_connection(&domain->conn);
 	}
+
+	for (cli_state = winbindd_client_list();
+	     cli_state != NULL;
+	     cli_state = cli_state->next) {
+		if (cli_state->sock >= 0) {
+			close(cli_state->sock);
+			cli_state->sock = -1;
+		}
+	}
 }
 
 static bool connection_ok(struct winbindd_domain *domain)

Modified: branches/samba/experimental/source3/winbindd/winbindd_dual.c
===================================================================
--- branches/samba/experimental/source3/winbindd/winbindd_dual.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/winbindd/winbindd_dual.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -35,7 +35,7 @@
 #include "../libcli/security/security.h"
 #include "system/select.h"
 #include "messages.h"
-#include "ntdomain.h"
+#include "../lib/util/tevent_unix.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_WINBIND
@@ -510,6 +510,11 @@
 
 	DLIST_REMOVE(winbindd_children, child);
 	child->pid = 0;
+
+	if (child->sock != -1) {
+		close(child->sock);
+		child->sock = -1;
+	}
 }
 
 /* Ensure any negative cache entries with the netbios or realm names are removed. */
@@ -1166,7 +1171,8 @@
 	dump_event_list(winbind_event_context());
 }
 
-bool winbindd_reinit_after_fork(const char *logfilename)
+NTSTATUS winbindd_reinit_after_fork(const struct winbindd_child *myself,
+				    const char *logfilename)
 {
 	struct winbindd_domain *domain;
 	struct winbindd_child *cl;
@@ -1179,7 +1185,7 @@
 		true);
 	if (!NT_STATUS_IS_OK(status)) {
 		DEBUG(0,("reinit_after_fork() failed\n"));
-		return false;
+		return status;
 	}
 
 	close_conns_after_fork();
@@ -1190,10 +1196,10 @@
 	}
 
 	if (!winbindd_setup_sig_term_handler(false))
-		return false;
+		return NT_STATUS_NO_MEMORY;
 	if (!winbindd_setup_sig_hup_handler(override_logfile ? NULL :
 					    logfilename))
-		return false;
+		return NT_STATUS_NO_MEMORY;
 
 	/* Stop zombies in children */
 	CatchChild();
@@ -1241,6 +1247,14 @@
 		 * go through the parent.
 		 */
 		cl->pid = (pid_t)0;
+
+		/*
+		 * Close service sockets to all other children
+		 */
+		if ((cl != myself) && (cl->sock != -1)) {
+			close(cl->sock);
+			cl->sock = -1;
+		}
         }
 	/*
 	 * This is a little tricky, children must not
@@ -1261,7 +1275,7 @@
 	cl = idmap_child();
 	cl->pid = (pid_t)0;
 
-	return true;
+	return NT_STATUS_OK;
 }
 
 /*
@@ -1281,6 +1295,8 @@
 	struct winbindd_request request;
 	struct winbindd_response response;
 	struct winbindd_domain *primary_domain = NULL;
+	NTSTATUS status;
+	ssize_t nwritten;
 
 	if (child->domain) {
 		DEBUG(10, ("fork_domain_child called for domain '%s'\n",
@@ -1309,7 +1325,25 @@
 
 	if (child->pid != 0) {
 		/* Parent */
+		ssize_t nread;
+
 		close(fdpair[0]);
+
+		nread = read(fdpair[1], &status, sizeof(status));
+		if (nread != sizeof(status)) {
+			DEBUG(1, ("fork_domain_child: Could not read child status: "
+				  "nread=%d, error=%s\n", (int)nread,
+				  strerror(errno)));
+			close(fdpair[1]);
+			return false;
+		}
+		if (!NT_STATUS_IS_OK(status)) {
+			DEBUG(1, ("fork_domain_child: Child status is %s\n",
+				  nt_errstr(status)));
+			close(fdpair[1]);
+			return false;
+		}
+
 		child->next = child->prev = NULL;
 		DLIST_ADD(winbindd_children, child);
 		child->sock = fdpair[1];
@@ -1324,9 +1358,20 @@
 	state.sock = fdpair[0];
 	close(fdpair[1]);
 
-	if (!winbindd_reinit_after_fork(child->logfilename)) {
+	status = winbindd_reinit_after_fork(child, child->logfilename);
+
+	nwritten = write(state.sock, &status, sizeof(status));
+	if (nwritten != sizeof(status)) {
+		DEBUG(1, ("fork_domain_child: Could not write status: "
+			  "nwritten=%d, error=%s\n", (int)nwritten,
+			  strerror(errno)));
 		_exit(0);
 	}
+	if (!NT_STATUS_IS_OK(status)) {
+		DEBUG(1, ("winbindd_reinit_after_fork failed: %s\n",
+			  nt_errstr(status)));
+		_exit(0);
+	}
 
 	/* Handle online/offline messages. */
 	messaging_register(winbind_messaging_context(), NULL,
@@ -1424,7 +1469,6 @@
 		TALLOC_CTX *frame = talloc_stackframe();
 		struct iovec iov[2];
 		int iov_count;
-		NTSTATUS status;
 
 		if (run_events_poll(winbind_event_context(), 0, NULL, 0)) {
 			TALLOC_FREE(frame);

Modified: branches/samba/experimental/source3/winbindd/winbindd_dual_ndr.c
===================================================================
--- branches/samba/experimental/source3/winbindd/winbindd_dual_ndr.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/winbindd/winbindd_dual_ndr.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -29,8 +29,8 @@
 #include "includes.h"
 #include "winbindd/winbindd.h"
 #include "winbindd/winbindd_proto.h"
+#include "ntdomain.h"
 #include "librpc/gen_ndr/srv_wbint.h"
-#include "ntdomain.h"
 
 struct wbint_bh_state {
 	struct winbindd_domain *domain;

Modified: branches/samba/experimental/source3/winbindd/winbindd_dual_srv.c
===================================================================
--- branches/samba/experimental/source3/winbindd/winbindd_dual_srv.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/winbindd/winbindd_dual_srv.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -24,11 +24,11 @@
 #include "winbindd/winbindd.h"
 #include "winbindd/winbindd_proto.h"
 #include "rpc_client/cli_pipe.h"
+#include "ntdomain.h"
 #include "librpc/gen_ndr/srv_wbint.h"
 #include "../librpc/gen_ndr/ndr_netlogon_c.h"
 #include "idmap.h"
 #include "../libcli/security/security.h"
-#include "ntdomain.h"
 
 void _wbint_Ping(struct pipes_struct *p, struct wbint_Ping *r)
 {

Modified: branches/samba/experimental/source3/winbindd/winbindd_getdcname.c
===================================================================
--- branches/samba/experimental/source3/winbindd/winbindd_getdcname.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/winbindd/winbindd_getdcname.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -65,8 +65,7 @@
 
 	status = wb_dsgetdcname_recv(subreq, state, &state->dcinfo);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	tevent_req_done(req);

Modified: branches/samba/experimental/source3/winbindd/winbindd_getgrgid.c
===================================================================
--- branches/samba/experimental/source3/winbindd/winbindd_getgrgid.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/winbindd/winbindd_getgrgid.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -68,8 +68,7 @@
 
 	status = wb_gid2sid_recv(subreq, &state->sid);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 
@@ -92,8 +91,7 @@
 	status = wb_getgrsid_recv(subreq, state, &state->domname, &state->name,
 				  &state->gid, &state->members);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	tevent_req_done(req);

Modified: branches/samba/experimental/source3/winbindd/winbindd_getgrnam.c
===================================================================
--- branches/samba/experimental/source3/winbindd/winbindd_getgrnam.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/winbindd/winbindd_getgrnam.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -97,8 +97,7 @@
 
 	status = wb_lookupname_recv(subreq, &state->sid, &type);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 
@@ -127,8 +126,7 @@
 	status = wb_getgrsid_recv(subreq, state, &state->domname, &state->name,
 				  &state->gid, &state->members);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	tevent_req_done(req);

Modified: branches/samba/experimental/source3/winbindd/winbindd_getgroups.c
===================================================================
--- branches/samba/experimental/source3/winbindd/winbindd_getgroups.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/winbindd/winbindd_getgroups.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -96,8 +96,7 @@
 
 	status = wb_lookupname_recv(subreq, &state->sid, &state->type);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 
@@ -119,8 +118,7 @@
 	status = wb_gettoken_recv(subreq, state, &state->num_sids,
 				  &state->sids);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 

Modified: branches/samba/experimental/source3/winbindd/winbindd_getpwent.c
===================================================================
--- branches/samba/experimental/source3/winbindd/winbindd_getpwent.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/winbindd/winbindd_getpwent.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -97,8 +97,7 @@
 		tevent_req_done(req);
 		return;
 	}
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	state->num_users += 1;

Modified: branches/samba/experimental/source3/winbindd/winbindd_getpwnam.c
===================================================================
--- branches/samba/experimental/source3/winbindd/winbindd_getpwnam.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/winbindd/winbindd_getpwnam.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -100,8 +100,7 @@
 
 	status = wb_lookupname_recv(subreq, &state->sid, &state->type);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 
@@ -120,8 +119,7 @@
 
 	status = wb_getpwsid_recv(subreq);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	tevent_req_done(req);

Modified: branches/samba/experimental/source3/winbindd/winbindd_getpwsid.c
===================================================================
--- branches/samba/experimental/source3/winbindd/winbindd_getpwsid.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/winbindd/winbindd_getpwsid.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -70,8 +70,7 @@
 
 	status = wb_getpwsid_recv(subreq);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	tevent_req_done(req);

Modified: branches/samba/experimental/source3/winbindd/winbindd_getpwuid.c
===================================================================
--- branches/samba/experimental/source3/winbindd/winbindd_getpwuid.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/winbindd/winbindd_getpwuid.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -65,8 +65,7 @@
 
 	status = wb_uid2sid_recv(subreq, &state->sid);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 
@@ -85,8 +84,7 @@
 
 	status = wb_getpwsid_recv(subreq);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	tevent_req_done(req);

Modified: branches/samba/experimental/source3/winbindd/winbindd_getsidaliases.c
===================================================================
--- branches/samba/experimental/source3/winbindd/winbindd_getsidaliases.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/winbindd/winbindd_getsidaliases.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -112,8 +112,7 @@
 	status = wb_lookupuseraliases_recv(subreq, state, &state->num_aliases,
 					   &state->aliases);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	tevent_req_done(req);

Modified: branches/samba/experimental/source3/winbindd/winbindd_getuserdomgroups.c
===================================================================
--- branches/samba/experimental/source3/winbindd/winbindd_getuserdomgroups.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/winbindd/winbindd_getuserdomgroups.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -83,8 +83,7 @@
 	status = wb_lookupusergroups_recv(subreq, state, &state->num_sids,
 					  &state->sids);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	tevent_req_done(req);

Modified: branches/samba/experimental/source3/winbindd/winbindd_getusersids.c
===================================================================
--- branches/samba/experimental/source3/winbindd/winbindd_getusersids.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/winbindd/winbindd_getusersids.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -74,8 +74,7 @@
 	status = wb_gettoken_recv(subreq, state, &state->num_sids,
 				  &state->sids);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	tevent_req_done(req);

Modified: branches/samba/experimental/source3/winbindd/winbindd_gid_to_sid.c
===================================================================
--- branches/samba/experimental/source3/winbindd/winbindd_gid_to_sid.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/winbindd/winbindd_gid_to_sid.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -63,8 +63,7 @@
 
 	status = wb_gid2sid_recv(subreq, &state->sid);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	tevent_req_done(req);

Modified: branches/samba/experimental/source3/winbindd/winbindd_lookupname.c
===================================================================
--- branches/samba/experimental/source3/winbindd/winbindd_lookupname.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/winbindd/winbindd_lookupname.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -86,8 +86,7 @@
 
 	status = wb_lookupname_recv(subreq, &state->sid, &state->type);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	tevent_req_done(req);

Modified: branches/samba/experimental/source3/winbindd/winbindd_lookupsids.c
===================================================================
--- branches/samba/experimental/source3/winbindd/winbindd_lookupsids.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/winbindd/winbindd_lookupsids.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -80,8 +80,7 @@
 	status = wb_lookupsids_recv(subreq, state, &state->domains,
 				    &state->names);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	tevent_req_done(req);

Modified: branches/samba/experimental/source3/winbindd/winbindd_pam.c
===================================================================
--- branches/samba/experimental/source3/winbindd/winbindd_pam.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/winbindd/winbindd_pam.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -37,7 +37,6 @@
 #include "../librpc/gen_ndr/krb5pac.h"
 #include "passdb/machine_sid.h"
 #include "auth.h"
-#include "ntdomain.h"
 
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_WINBIND

Modified: branches/samba/experimental/source3/winbindd/winbindd_proto.h
===================================================================
--- branches/samba/experimental/source3/winbindd/winbindd_proto.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/winbindd/winbindd_proto.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -291,7 +291,8 @@
 				   uint32_t msg_type,
 				   struct server_id server_id,
 				   DATA_BLOB *data);
-bool winbindd_reinit_after_fork(const char *logfilename);
+NTSTATUS winbindd_reinit_after_fork(const struct winbindd_child *myself,
+				    const char *logfilename);
 struct winbindd_domain *wb_child_domain(void);
 
 /* The following definitions come from winbindd/winbindd_group.c  */
@@ -391,7 +392,6 @@
 bool parse_domain_user(const char *domuser, fstring domain, fstring user);
 bool parse_domain_user_talloc(TALLOC_CTX *mem_ctx, const char *domuser,
 			      char **domain, char **user);
-void parse_add_domuser(void *buf, char *domuser, int *len);
 bool canonicalize_username(fstring username_inout, fstring domain, fstring user);
 void fill_domain_username(fstring name, const char *domain, const char *user, bool can_assume);
 char *fill_domain_username_talloc(TALLOC_CTX *ctx,

Modified: branches/samba/experimental/source3/winbindd/winbindd_rpc.c
===================================================================
--- branches/samba/experimental/source3/winbindd/winbindd_rpc.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/winbindd/winbindd_rpc.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -26,12 +26,9 @@
 #include "includes.h"
 #include "winbindd.h"
 #include "winbindd_rpc.h"
-
 #include "rpc_client/rpc_client.h"
 #include "librpc/gen_ndr/ndr_samr_c.h"
-#include "librpc/gen_ndr/srv_samr.h"
 #include "librpc/gen_ndr/ndr_lsa_c.h"
-#include "librpc/gen_ndr/srv_lsa.h"
 #include "rpc_client/cli_samr.h"
 #include "rpc_client/cli_lsarpc.h"
 #include "../libcli/security/security.h"

Modified: branches/samba/experimental/source3/winbindd/winbindd_samr.c
===================================================================
--- branches/samba/experimental/source3/winbindd/winbindd_samr.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/winbindd/winbindd_samr.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -26,14 +26,11 @@
 #include "includes.h"
 #include "winbindd.h"
 #include "winbindd_rpc.h"
-
 #include "rpc_client/rpc_client.h"
 #include "../librpc/gen_ndr/ndr_samr_c.h"
 #include "rpc_client/cli_samr.h"
-#include "../librpc/gen_ndr/srv_samr.h"
 #include "../librpc/gen_ndr/ndr_lsa_c.h"
 #include "rpc_client/cli_lsarpc.h"
-#include "../librpc/gen_ndr/srv_lsa.h"
 #include "rpc_server/rpc_ncacn_np.h"
 #include "../libcli/security/security.h"
 #include "passdb/machine_sid.h"

Modified: branches/samba/experimental/source3/winbindd/winbindd_show_sequence.c
===================================================================
--- branches/samba/experimental/source3/winbindd/winbindd_show_sequence.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/winbindd/winbindd_show_sequence.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -97,8 +97,7 @@
 
 	status = wb_seqnum_recv(subreq, &state->seqnum);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	tevent_req_done(req);
@@ -116,8 +115,7 @@
 				 &state->domains, &state->stati,
 				 &state->seqnums);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	tevent_req_done(req);

Modified: branches/samba/experimental/source3/winbindd/winbindd_sid_to_gid.c
===================================================================
--- branches/samba/experimental/source3/winbindd/winbindd_sid_to_gid.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/winbindd/winbindd_sid_to_gid.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -72,8 +72,7 @@
 
 	status = wb_sid2gid_recv(subreq, &state->gid);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	tevent_req_done(req);

Modified: branches/samba/experimental/source3/winbindd/winbindd_sid_to_uid.c
===================================================================
--- branches/samba/experimental/source3/winbindd/winbindd_sid_to_uid.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/winbindd/winbindd_sid_to_uid.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -72,8 +72,7 @@
 
 	status = wb_sid2uid_recv(subreq, &state->uid);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	tevent_req_done(req);

Modified: branches/samba/experimental/source3/winbindd/winbindd_sids_to_xids.c
===================================================================
--- branches/samba/experimental/source3/winbindd/winbindd_sids_to_xids.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/winbindd/winbindd_sids_to_xids.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -171,8 +171,7 @@
 	status = wb_lookupsids_recv(subreq, state, &state->domains,
 				    &state->names);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 

Modified: branches/samba/experimental/source3/winbindd/winbindd_uid_to_sid.c
===================================================================
--- branches/samba/experimental/source3/winbindd/winbindd_uid_to_sid.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/winbindd/winbindd_uid_to_sid.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -63,8 +63,7 @@
 
 	status = wb_uid2sid_recv(subreq, &state->sid);
 	TALLOC_FREE(subreq);
-	if (!NT_STATUS_IS_OK(status)) {
-		tevent_req_nterror(req, status);
+	if (tevent_req_nterror(req, status)) {
 		return;
 	}
 	tevent_req_done(req);

Modified: branches/samba/experimental/source3/winbindd/winbindd_util.c
===================================================================
--- branches/samba/experimental/source3/winbindd/winbindd_util.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/winbindd/winbindd_util.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -894,31 +894,6 @@
 	return ((*domain != NULL) && (*user != NULL));
 }
 
-/* add a domain user name to a buffer */
-void parse_add_domuser(void *buf, char *domuser, int *len)
-{
-	fstring domain;
-	char *p, *user;
-
-	user = domuser;
-	p = strchr(domuser, *lp_winbind_separator());
-
-	if (p) {
-
-		fstrcpy(domain, domuser);
-		domain[PTR_DIFF(p, domuser)] = 0;
-		p++;
-
-		if (assume_domain(domain)) {
-
-			user = p;
-			*len -= (PTR_DIFF(p, domuser));
-		}
-	}
-
-	safe_strcpy((char *)buf, user, *len);
-}
-
 /* Ensure an incoming username from NSS is fully qualified. Replace the
    incoming fstring with DOMAIN <separator> user. Returns the same
    values as parse_domain_user() but also replaces the incoming username.

Modified: branches/samba/experimental/source3/wscript
===================================================================
--- branches/samba/experimental/source3/wscript	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/wscript	2011-05-19 17:46:26 UTC (rev 3779)
@@ -1713,7 +1713,41 @@
     if Options.options.with_profiling_data:
         conf.DEFINE('WITH_PROFILE', 1);
 
+    PTHREAD_CFLAGS='error'
+    PTHREAD_LDFLAGS='error'
 
+    if PTHREAD_LDFLAGS == 'error':
+        if conf.CHECK_FUNCS_IN('pthread_attr_init', 'pthread'):
+            PTHREAD_CFLAGS='-D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS'
+            PTHREAD_LDFLAGS='-lpthread'
+    if PTHREAD_LDFLAGS == 'error':
+        if conf.CHECK_FUNCS_IN('pthread_attr_init', 'pthreads'):
+            PTHREAD_CFLAGS='-D_THREAD_SAFE'
+            PTHREAD_LDFLAGS='-lpthreads'
+    if PTHREAD_LDFLAGS == 'error':
+        if conf.CHECK_FUNCS_IN('pthread_attr_init', 'c_r'):
+            PTHREAD_CFLAGS='-D_THREAD_SAFE -pthread'
+            PTHREAD_LDFLAGS='-pthread'
+    if PTHREAD_LDFLAGS == 'error':
+        if conf.CHECK_FUNC('pthread_attr_init'):
+            PTHREAD_CFLAGS='-D_REENTRANT'
+            PTHREAD_LDFLAGS='-lpthread'
+    # especially for HP-UX, where the CHECK_FUNC macro fails to test for
+    # pthread_attr_init. On pthread_mutex_lock it works there...
+    if PTHREAD_LDFLAGS == 'error':
+        if conf.CHECK_FUNCS_IN('pthread_mutex_lock', 'pthread'):
+            PTHREAD_CFLAGS='-D_REENTRANT'
+            PTHREAD_LDFLAGS='-lpthread'
+
+    if PTHREAD_CFLAGS != 'error' and PTHREAD_LDFLAGS != 'error':
+        conf.ADD_CFLAGS(PTHREAD_CFLAGS)
+        conf.ADD_LDFLAGS(PTHREAD_LDFLAGS)
+        conf.CHECK_HEADERS('pthread.h')
+        conf.DEFINE('HAVE_PTHREAD', '1')
+
+    if conf.CHECK_HEADERS('gpfs_gpl.h'):
+        conf.DEFINE('HAVE_GPFS', '1')
+
     default_static_modules=TO_LIST('''pdb_smbpasswd pdb_tdbsam pdb_wbc_sam
                                       auth_sam auth_unix auth_winbind auth_wbc auth_server
                                       auth_domain auth_builtin vfs_default
@@ -1754,6 +1788,9 @@
     if conf.CONFIG_SET('DARWINOS'):
 	default_shared_modules.extend(TO_LIST('charset_macosxfs'))
 
+    if conf.CONFIG_SET('HAVE_GPFS'):
+	default_shared_modules.extend(TO_LIST('vfs_gpfs vfs_gpfs_hsm_notify'))
+
     explicit_shared_modules = TO_LIST(Options.options.shared_modules, delimiter=',')
     explicit_static_modules = TO_LIST(Options.options.static_modules, delimiter=',')
 

Modified: branches/samba/experimental/source3/wscript_build
===================================================================
--- branches/samba/experimental/source3/wscript_build	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source3/wscript_build	2011-05-19 17:46:26 UTC (rev 3779)
@@ -665,7 +665,7 @@
                     public_deps='''talloc tdb cap wbclient LIB_NONSMBD LIBSMB KRBCLIENT
                     passdb SMBLDAP PARAM_WITHOUT_REG DYNCONFIG
                     LIBMSRPC_GEN msrpc3 ads LIBNET DCUTIL NDR_LIBNETAPI
-                    RPC_CLIENT_SCHANNEL LIB_SMBCONF REG_SMBCONF TOKEN_UTIL
+                    RPC_CLIENT_SCHANNEL smbconf REG_SMBCONF TOKEN_UTIL
                     LIBCLI_SAMR LIBCLI_LSA3 LIBRPCCLI_NETLOGON
                     RPC_NDR_SRVSVC RPC_NDR_WKSSVC RPC_NDR_INITSHUTDOWN
                     INIT_NETLOGON INIT_SAMR''',
@@ -740,7 +740,7 @@
 
 bld.SAMBA3_LIBRARY('param',
                    source='',
-                   deps='PARAM_WITHOUT_REG DYNCONFIG LIB_SMBCONF',
+                   deps='PARAM_WITHOUT_REG DYNCONFIG smbconf',
                    private_library=True,
                    vars=locals())
 
@@ -752,13 +752,17 @@
                     source=REG_API_REGF_SRC,
                     vars=locals())
 
-bld.SAMBA3_SUBSYSTEM('REG_BASE',
-                    source=REG_BASE_SRC,
-                    vars=locals())
+bld.SAMBA3_LIBRARY('smbregistry',
+                   source=REG_BASE_SRC,
+                   deps='''LIB_NONSMBD tdb-wrap3 NDR_SECURITY UTIL_TDB talloc
+                   replace samba3core util_reg samba-util-common security
+                   errors3 CHARSET3''',
+                   private_library=True,
+                   vars=locals())
 
 bld.SAMBA3_SUBSYSTEM('REG_SMBCONF',
                     source=REG_SMBCONF_SRC,
-                    deps='REG_BASE',
+                    deps='smbregistry',
                     vars=locals())
 
 bld.SAMBA3_SUBSYSTEM('REG_FULL',
@@ -847,10 +851,12 @@
                     source=AFS_SETTOKEN_SRC,
                     vars=locals())
 
-bld.SAMBA3_SUBSYSTEM('LIB_SMBCONF',
-                    source=LIB_SMBCONF_SRC,
-                    deps='LIBSMBCONF REG_BASE REG_SMBCONF',
-                    vars=locals())
+bld.SAMBA3_LIBRARY('smbconf',
+                   source=LIB_SMBCONF_SRC,
+                   deps='''LIBSMBCONF smbregistry REG_SMBCONF talloc PARAM_WITHOUT_REG
+                   util_reg samba-util-common errors3 CHARSET3''',
+                   public_headers='../lib/smbconf/smbconf.h',
+                   vnum='0')
 
 bld.SAMBA3_LIBRARY('smbd_base',
                     source=SMBD_SRC_BASE,
@@ -860,7 +866,7 @@
                     LIBMSRPC_GEN msrpc3 ads LIBADS_SERVER LIBADS_PRINTER
                     vfs vfs_default vfs_posixacl auth rpc LOCKING LIBAFS LIBAFS_SETTOKEN PROFILE
                     PRINTING PRINTBACKEND NDR_XATTR NDR_NOTIFY3 REGFIO
-                    LIB_SMBCONF REG_FULL FNAME_UTIL
+                    smbconf REG_FULL FNAME_UTIL
                     LIBCLI_SAMR LIBCLI_LSA3 LIBRPCCLI_NETLOGON LIBCLI_SPOOLSS
                     RPC_NDR_SRVSVC NAMED_PIPE_AUTH_TSTREAM INIT_NETLOGON INIT_SAMR
                     LIBCLI_SMB_COMMON RPC_SERVER
@@ -961,6 +967,7 @@
 
 bld.SAMBA3_SUBSYSTEM('tdb-wrap3',
                     source='lib/util_tdb.c',
+                     deps='tdb-wrap',
                     vars=locals())
 
 bld.SAMBA3_SUBSYSTEM('CHARSET3',
@@ -1078,7 +1085,7 @@
                  source=NET_SRC,
                  deps='''talloc tdb netapi addns cap resolv intl POPT_SAMBA3 passdb LIBSMB LIB_NONSMBD
                  PARAM_WITHOUT_REG wbclient param KRBCLIENT LIBMSRPC_GEN msrpc3 LIBGPO ads LIBADS_SERVER LIBADS_PRINTER
-                 LOCALE_DIR LIBAFS LIBAFS_SETTOKEN SMBREADLINE PASSWD_UTIL LIBNET
+                 LIBAFS LIBAFS_SETTOKEN SMBREADLINE PASSWD_UTIL LIBNET
                  LIBNET_DSSYNC LIBNET_SAMSYNC LIBEVENTLOG DCUTIL
                  REGFIO NDR_NTPRINTING RPC_NDR_WINREG
                  RPC_CLIENT_SCHANNEL TOKEN_UTIL
@@ -1317,7 +1324,6 @@
 
 if not bld.env.toplevel_build:
     bld.SAMBA3_SUBSYSTEM('POPT_SAMBA', source='', deps='POPT_SAMBA3')
-    bld.SAMBA3_SUBSYSTEM('tdb-wrap', source='', deps='tdb-wrap3')
     bld.SAMBA3_SUBSYSTEM('errors', source='', deps='errors3')
     bld.SAMBA3_SUBSYSTEM('samba-util', source='', deps='samba-util3')
     bld.SAMBA3_SUBSYSTEM('CHARSET', source='', deps='CHARSET3')
@@ -1326,11 +1332,6 @@
     bld.SAMBA3_SUBSYSTEM('cli-ldap', '', deps='UTIL_TEVENT')
 else:
 
-    # dynconfig provides this in the toplevel build
-    bld.SAMBA3_SUBSYSTEM('LOCALE_DIR',
-                         'localedir.c',
-                         cflags='-DLOCALEDIR=\"%s\"' % bld.env.LOCALEDIR)
-
     # point the s3 rules at in-tree heimdal
     bld.SAMBA3_SUBSYSTEM('gssapi_krb5',
                          source='',

Modified: branches/samba/experimental/source4/cluster/local.c
===================================================================
--- branches/samba/experimental/source4/cluster/local.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source4/cluster/local.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -23,7 +23,7 @@
 #include "cluster/cluster.h"
 #include "cluster/cluster_private.h"
 #include <tdb.h>
-#include "tdb_wrap.h"
+#include "lib/util/tdb_wrap.h"
 #include "system/filesys.h"
 #include "param/param.h"
 #include "librpc/gen_ndr/server_id4.h"

Modified: branches/samba/experimental/source4/lib/messaging/messaging.c
===================================================================
--- branches/samba/experimental/source4/lib/messaging/messaging.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source4/lib/messaging/messaging.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -27,7 +27,7 @@
 #include "lib/socket/socket.h"
 #include "librpc/gen_ndr/ndr_irpc.h"
 #include "lib/messaging/irpc.h"
-#include "tdb_wrap.h"
+#include "lib/util/tdb_wrap.h"
 #include "../lib/util/unix_privs.h"
 #include "librpc/rpc/dcerpc.h"
 #include <tdb.h>

Deleted: branches/samba/experimental/source4/lib/tdb_wrap.c
===================================================================
--- branches/samba/experimental/source4/lib/tdb_wrap.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source4/lib/tdb_wrap.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -1,117 +0,0 @@
-/* 
-   Unix SMB/CIFS implementation.
-   TDB wrap functions
-
-   Copyright (C) Andrew Tridgell 2004
-   Copyright (C) Jelmer Vernooij <jelmer at samba.org> 2007
-   
-   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/>.
-*/
-
-#include "includes.h"
-#include <tdb.h>
-#include "../lib/util/dlinklist.h"
-#include "tdb_wrap.h"
-#include <tdb.h>
-
-static struct tdb_wrap *tdb_list;
-
-/* destroy the last connection to a tdb */
-static int tdb_wrap_destructor(struct tdb_wrap *w)
-{
-	tdb_close(w->tdb);
-	DLIST_REMOVE(tdb_list, w);
-	return 0;
-}				 
-
-/*
- Log tdb messages via DEBUG().
-*/
-static void tdb_wrap_log(TDB_CONTEXT *tdb, enum tdb_debug_level level, 
-			 const char *format, ...) PRINTF_ATTRIBUTE(3,4);
-
-static void tdb_wrap_log(TDB_CONTEXT *tdb, enum tdb_debug_level level, 
-			 const char *format, ...)
-{
-	va_list ap;
-	char *ptr = NULL;
-	int dl;
-
-	va_start(ap, format);
-	vasprintf(&ptr, format, ap);
-	va_end(ap);
-	
-	switch (level) {
-	case TDB_DEBUG_FATAL:
-		dl = 0;
-		break;
-	case TDB_DEBUG_ERROR:
-		dl = 1;
-		break;
-	case TDB_DEBUG_WARNING:
-		dl = 2;
-		break;
-	case TDB_DEBUG_TRACE:
-		dl = 5;
-		break;
-	default:
-		dl = 0;
-	}		
-
-	if (ptr != NULL) {
-		const char *name = tdb_name(tdb);
-		DEBUG(dl, ("tdb(%s): %s", name ? name : "unnamed", ptr));
-		free(ptr);
-	}
-}
-
-
-/*
-  wrapped connection to a tdb database
-  to close just talloc_free() the tdb_wrap pointer
- */
-struct tdb_wrap *tdb_wrap_open(TALLOC_CTX *mem_ctx,
-			       const char *name, int hash_size, int tdb_flags,
-			       int open_flags, mode_t mode)
-{
-	struct tdb_wrap *w;
-	struct tdb_logging_context log_ctx;
-	log_ctx.log_fn = tdb_wrap_log;
-
-	for (w=tdb_list;w;w=w->next) {
-		if (strcmp(name, w->name) == 0) {
-			return talloc_reference(mem_ctx, w);
-		}
-	}
-
-	w = talloc(mem_ctx, struct tdb_wrap);
-	if (w == NULL) {
-		return NULL;
-	}
-
-	w->name = talloc_strdup(w, name);
-
-	w->tdb = tdb_open_ex(name, hash_size, tdb_flags, 
-			     open_flags, mode, &log_ctx, NULL);
-	if (w->tdb == NULL) {
-		talloc_free(w);
-		return NULL;
-	}
-
-	talloc_set_destructor(w, tdb_wrap_destructor);
-
-	DLIST_ADD(tdb_list, w);
-
-	return w;
-}

Deleted: branches/samba/experimental/source4/lib/tdb_wrap.h
===================================================================
--- branches/samba/experimental/source4/lib/tdb_wrap.h	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source4/lib/tdb_wrap.h	2011-05-19 17:46:26 UTC (rev 3779)
@@ -1,45 +0,0 @@
-/* 
-   Unix SMB/CIFS implementation.
-
-   database wrap headers
-
-   Copyright (C) Andrew Tridgell 2004
-   
-   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/>.
-*/
-
-/* IMPORTANT: tdb_wrap should be always preferred over tdb_context for end consumer functions
-   it's because if the code will be running inside smbd, then we must use the linked list
-   of open tdb files, to determine if the tdb we desire is already open
-   as otherwise, when you close the tdb (even on a different file descriptor),
-   ALL LOCKS are lost (due to a real screwup in the POSIX specification that nobody has been able to get fixed)
-*/
-
-#ifndef _TDB_WRAP_H_
-#define _TDB_WRAP_H_
-
-#include <tdb.h>
-
-struct tdb_wrap {
-	struct tdb_context *tdb;
-
-	const char *name;
-	struct tdb_wrap *next, *prev;
-};
-
-struct tdb_wrap *tdb_wrap_open(TALLOC_CTX *mem_ctx,
-			       const char *name, int hash_size, int tdb_flags,
-			       int open_flags, mode_t mode);
-
-#endif /* _TDB_WRAP_H_ */

Modified: branches/samba/experimental/source4/lib/wscript_build
===================================================================
--- branches/samba/experimental/source4/lib/wscript_build	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source4/lib/wscript_build	2011-05-19 17:46:26 UTC (rev 3779)
@@ -5,12 +5,3 @@
         enabled=False,
 	deps='tdb-wrap'
 	)
-
-
-bld.SAMBA_LIBRARY('tdb-wrap',
-                  source='tdb_wrap.c',
-                  deps='tdb talloc samba-util',
-                  public_headers='tdb_wrap.h',
-                  private_library=True
-                  )
-

Modified: branches/samba/experimental/source4/libcli/rap/rap.c
===================================================================
--- branches/samba/experimental/source4/libcli/rap/rap.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source4/libcli/rap/rap.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -1633,3 +1633,50 @@
 	talloc_free(call);
 	return result;
 }
+
+NTSTATUS smbcli_rap_netremotetod(struct smbcli_tree *tree,
+				  TALLOC_CTX *mem_ctx,
+				  struct rap_NetRemoteTOD *r)
+{
+	struct rap_call *call;
+	NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
+
+	if (!(call = new_rap_cli_call(mem_ctx, RAP_NetRemoteTOD))) {
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	rap_cli_push_rcvbuf(call, r->in.bufsize);
+
+	rap_cli_expect_format(call, "DDBBBBWWBBWB");
+	rap_cli_expect_extra_format(call, "");
+
+	if (DEBUGLEVEL >= 10) {
+		NDR_PRINT_IN_DEBUG(rap_NetRemoteTOD, r);
+	}
+
+	result = rap_cli_do_call(tree, call);
+
+	if (!NT_STATUS_IS_OK(result))
+		goto done;
+
+	result = NT_STATUS_INVALID_PARAMETER;
+
+	NDR_GOTO(ndr_pull_rap_status(call->ndr_pull_param, NDR_SCALARS, &r->out.status));
+	NDR_GOTO(ndr_pull_uint16(call->ndr_pull_param, NDR_SCALARS, &r->out.convert));
+
+	NDR_GOTO(ndr_pull_rap_TimeOfDayInfo(call->ndr_pull_data, NDR_SCALARS|NDR_BUFFERS, &r->out.tod));
+
+	result = NT_STATUS_OK;
+
+	if (!NT_STATUS_IS_OK(result)) {
+		goto done;
+	}
+
+	if (DEBUGLEVEL >= 10) {
+		NDR_PRINT_OUT_DEBUG(rap_NetRemoteTOD, r);
+	}
+
+ done:
+	talloc_free(call);
+	return result;
+}

Modified: branches/samba/experimental/source4/libcli/util/nterr.c
===================================================================
--- branches/samba/experimental/source4/libcli/util/nterr.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source4/libcli/util/nterr.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -569,6 +569,8 @@
 	{ "NT_STATUS_CURRENT_DOMAIN_NOT_ALLOWED", NT_STATUS_CURRENT_DOMAIN_NOT_ALLOWED },
 	{ "NT_STATUS_OBJECTID_NOT_FOUND", NT_STATUS_OBJECTID_NOT_FOUND },
 	{ "NT_STATUS_DOWNGRADE_DETECTED", NT_STATUS_DOWNGRADE_DETECTED },
+	{ "NT_STATUS_NO_S4U_PROT_SUPPORT", NT_STATUS_NO_S4U_PROT_SUPPORT },
+	{ "NT_STATUS_CROSSREALM_DELEGATION_FAILURE", NT_STATUS_CROSSREALM_DELEGATION_FAILURE },
 	{ "NT_STATUS_INVALID_LOCK_RANGE", NT_STATUS_INVALID_LOCK_RANGE },
 	{ "NT_STATUS_ERROR_DS_OBJ_STRING_NAME_EXISTS", NT_STATUS_ERROR_DS_OBJ_STRING_NAME_EXISTS },
 	{ "NT_STATUS_ERROR_DS_INCOMPATIBLE_VERSION", NT_STATUS_ERROR_DS_INCOMPATIBLE_VERSION },

Modified: branches/samba/experimental/source4/ntvfs/common/brlock_tdb.c
===================================================================
--- branches/samba/experimental/source4/ntvfs/common/brlock_tdb.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source4/ntvfs/common/brlock_tdb.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -28,7 +28,7 @@
 #include "system/filesys.h"
 #include <tdb.h>
 #include "messaging/messaging.h"
-#include "tdb_wrap.h"
+#include "lib/util/tdb_wrap.h"
 #include "lib/messaging/irpc.h"
 #include "libcli/libcli.h"
 #include "cluster/cluster.h"

Modified: branches/samba/experimental/source4/ntvfs/common/notify.c
===================================================================
--- branches/samba/experimental/source4/ntvfs/common/notify.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source4/ntvfs/common/notify.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -28,7 +28,7 @@
 #include <tdb.h>
 #include "../lib/util/util_tdb.h"
 #include "messaging/messaging.h"
-#include "tdb_wrap.h"
+#include "lib/util/tdb_wrap.h"
 #include "lib/messaging/irpc.h"
 #include "librpc/gen_ndr/ndr_s4_notify.h"
 #include "../lib/util/dlinklist.h"

Modified: branches/samba/experimental/source4/ntvfs/common/opendb_tdb.c
===================================================================
--- branches/samba/experimental/source4/ntvfs/common/opendb_tdb.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source4/ntvfs/common/opendb_tdb.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -42,7 +42,7 @@
 #include "system/filesys.h"
 #include <tdb.h>
 #include "messaging/messaging.h"
-#include "tdb_wrap.h"
+#include "lib/util/tdb_wrap.h"
 #include "lib/messaging/irpc.h"
 #include "librpc/gen_ndr/ndr_opendb.h"
 #include "ntvfs/ntvfs.h"

Modified: branches/samba/experimental/source4/ntvfs/posix/python/pyxattr_tdb.c
===================================================================
--- branches/samba/experimental/source4/ntvfs/posix/python/pyxattr_tdb.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source4/ntvfs/posix/python/pyxattr_tdb.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -21,7 +21,7 @@
 #include <Python.h>
 #include "includes.h"
 #include <tdb.h>
-#include "tdb_wrap.h"
+#include "lib/util/tdb_wrap.h"
 #include "librpc/ndr/libndr.h"
 #include "lib/util/wrap_xattr.h"
 #include "ntvfs/posix/vfs_posix.h"

Modified: branches/samba/experimental/source4/ntvfs/posix/vfs_posix.c
===================================================================
--- branches/samba/experimental/source4/ntvfs/posix/vfs_posix.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source4/ntvfs/posix/vfs_posix.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -27,7 +27,7 @@
 #include "vfs_posix.h"
 #include "librpc/gen_ndr/security.h"
 #include <tdb.h>
-#include "tdb_wrap.h"
+#include "lib/util/tdb_wrap.h"
 #include "libcli/security/security.h"
 #include "lib/events/events.h"
 #include "param/param.h"

Modified: branches/samba/experimental/source4/ntvfs/posix/xattr_tdb.c
===================================================================
--- branches/samba/experimental/source4/ntvfs/posix/xattr_tdb.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source4/ntvfs/posix/xattr_tdb.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -20,7 +20,7 @@
 */
 
 #include "includes.h"
-#include "tdb_wrap.h"
+#include "lib/util/tdb_wrap.h"
 #include <tdb.h>
 #include "vfs_posix.h"
 

Modified: branches/samba/experimental/source4/param/secrets.c
===================================================================
--- branches/samba/experimental/source4/param/secrets.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source4/param/secrets.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -25,7 +25,7 @@
 #include "secrets.h"
 #include "param/param.h"
 #include "system/filesys.h"
-#include "tdb_wrap.h"
+#include "lib/util/tdb_wrap.h"
 #include "lib/ldb-samba/ldb_wrap.h"
 #include <ldb.h>
 #include "../lib/util/util_tdb.h"

Modified: branches/samba/experimental/source4/selftest/knownfail
===================================================================
--- branches/samba/experimental/source4/selftest/knownfail	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source4/selftest/knownfail	2011-05-19 17:46:26 UTC (rev 3779)
@@ -41,6 +41,7 @@
 samba4.rap.*netservergetinfo
 samba4.rap.*netsessionenum
 samba4.rap.*netsessiongetinfo
+samba4.rap.*netremotetod
 samba4.smb2.persistent.handles1
 samba4.winbind.struct.*.show_sequence     # Not yet working in winbind
 samba4.winbind.struct.*.getpwent          # Not yet working in winbind

Modified: branches/samba/experimental/source4/torture/local/dbspeed.c
===================================================================
--- branches/samba/experimental/source4/torture/local/dbspeed.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source4/torture/local/dbspeed.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -25,7 +25,7 @@
 #include <ldb.h>
 #include <ldb_errors.h>
 #include "ldb_wrap.h"
-#include "lib/tdb_wrap.h"
+#include "lib/util/tdb_wrap.h"
 #include "torture/smbtorture.h"
 #include "param/param.h"
 

Modified: branches/samba/experimental/source4/torture/rap/rap.c
===================================================================
--- branches/samba/experimental/source4/torture/rap/rap.c	2011-05-18 20:11:19 UTC (rev 3778)
+++ branches/samba/experimental/source4/torture/rap/rap.c	2011-05-19 17:46:26 UTC (rev 3779)
@@ -206,7 +206,22 @@
 	return true;
 }
 
+static bool test_netremotetod(struct torture_context *tctx,
+			      struct smbcli_state *cli)
+{
+	struct rap_NetRemoteTOD r;
 
+	r.in.bufsize = 8192;
+
+	torture_assert_ntstatus_ok(tctx,
+		smbcli_rap_netremotetod(cli->tree, tctx, &r),
+		"smbcli_rap_netremotetod failed");
+	torture_assert_werr_ok(tctx, W_ERROR(r.out.status),
+		"smbcli_rap_netremotetod failed");
+
+	return true;
+}
+
 bool torture_rap_scan(struct torture_context *torture, struct smbcli_state *cli)
 {
 	int callno;
@@ -246,6 +261,8 @@
 				    test_netsessionenum);
 	torture_suite_add_1smb_test(suite_basic, "netsessiongetinfo",
 				    test_netsessiongetinfo);
+	torture_suite_add_1smb_test(suite_basic, "netremotetod",
+				    test_netremotetod);
 
 	torture_suite_add_1smb_test(suite, "scan", torture_rap_scan);
 





More information about the Pkg-samba-maint mailing list