Merge upstream 3.6.7
authorbubulle <bubulle@alioth.debian.org>
Thu, 9 Aug 2012 19:37:10 +0000 (19:37 +0000)
committerbubulle <bubulle@alioth.debian.org>
Thu, 9 Aug 2012 19:37:10 +0000 (19:37 +0000)
git-svn-id: svn://svn.debian.org/svn/pkg-samba/trunk/samba@4164 fc4039ab-9d04-0410-8cac-899223bdd6b0

156 files changed:
WHATSNEW.txt
docs-xml/smbdotconf/filename/casesensitive.xml
docs/Samba3-ByExample.pdf
docs/Samba3-Developers-Guide.pdf
docs/htmldocs/manpages/smb.conf.5.html
docs/manpages/eventlogadm.8
docs/manpages/findsmb.1
docs/manpages/idmap_ad.8
docs/manpages/idmap_adex.8
docs/manpages/idmap_autorid.8
docs/manpages/idmap_hash.8
docs/manpages/idmap_ldap.8
docs/manpages/idmap_nss.8
docs/manpages/idmap_rid.8
docs/manpages/idmap_tdb.8
docs/manpages/idmap_tdb2.8
docs/manpages/libsmbclient.7
docs/manpages/lmhosts.5
docs/manpages/log2pcap.1
docs/manpages/net.8
docs/manpages/nmbd.8
docs/manpages/nmblookup.1
docs/manpages/ntlm_auth.1
docs/manpages/pam_winbind.8
docs/manpages/pam_winbind.conf.5
docs/manpages/pdbedit.8
docs/manpages/profiles.1
docs/manpages/rpcclient.1
docs/manpages/samba.7
docs/manpages/sharesec.1
docs/manpages/smb.conf.5
docs/manpages/smbcacls.1
docs/manpages/smbclient.1
docs/manpages/smbcontrol.1
docs/manpages/smbcquotas.1
docs/manpages/smbd.8
docs/manpages/smbget.1
docs/manpages/smbgetrc.5
docs/manpages/smbpasswd.5
docs/manpages/smbpasswd.8
docs/manpages/smbspool.8
docs/manpages/smbstatus.1
docs/manpages/smbta-util.8
docs/manpages/smbtar.1
docs/manpages/smbtree.1
docs/manpages/swat.8
docs/manpages/tdbbackup.8
docs/manpages/tdbdump.8
docs/manpages/tdbtool.8
docs/manpages/testparm.1
docs/manpages/vfs_acl_tdb.8
docs/manpages/vfs_acl_xattr.8
docs/manpages/vfs_aio_fork.8
docs/manpages/vfs_aio_pthread.8
docs/manpages/vfs_audit.8
docs/manpages/vfs_cacheprime.8
docs/manpages/vfs_cap.8
docs/manpages/vfs_catia.8
docs/manpages/vfs_commit.8
docs/manpages/vfs_crossrename.8
docs/manpages/vfs_default_quota.8
docs/manpages/vfs_dirsort.8
docs/manpages/vfs_extd_audit.8
docs/manpages/vfs_fake_perms.8
docs/manpages/vfs_fileid.8
docs/manpages/vfs_full_audit.8
docs/manpages/vfs_gpfs.8
docs/manpages/vfs_netatalk.8
docs/manpages/vfs_notify_fam.8
docs/manpages/vfs_prealloc.8
docs/manpages/vfs_preopen.8
docs/manpages/vfs_readahead.8
docs/manpages/vfs_readonly.8
docs/manpages/vfs_recycle.8
docs/manpages/vfs_scannedonly.8
docs/manpages/vfs_shadow_copy.8
docs/manpages/vfs_shadow_copy2.8
docs/manpages/vfs_smb_traffic_analyzer.8
docs/manpages/vfs_streams_depot.8
docs/manpages/vfs_streams_xattr.8
docs/manpages/vfs_time_audit.8
docs/manpages/vfs_xattr_tdb.8
docs/manpages/vfstest.1
docs/manpages/wbinfo.1
docs/manpages/winbind_krb5_locator.7
docs/manpages/winbindd.8
lib/crypto/hmacmd5.c
lib/crypto/hmacmd5.h
lib/crypto/md5.h
lib/crypto/md5test.c
libcli/auth/credentials.c
libcli/auth/ntlmssp_server.c
libcli/auth/ntlmssp_sign.c
libcli/auth/schannel_sign.c
libcli/auth/smbencrypt.c
libcli/drsuapi/repl_decrypt.c
libgpo/gpo_util.c
librpc/idl/ntprinting.idl
librpc/ndr/ndr_basic.c
librpc/ndr/ndr_ntprinting.c
packaging/RHEL-CTDB/samba.spec
packaging/RHEL/makerpms.sh
packaging/RHEL/samba.spec
source3/Makefile.in
source3/VERSION
source3/configure
source3/configure.in
source3/include/config.h.in
source3/include/local.h
source3/include/printing.h
source3/include/proto.h
source3/include/version.h
source3/lib/util_sec.c
source3/lib/util_sid.c
source3/librpc/gen_ndr/ndr_ntprinting.c
source3/librpc/gen_ndr/ndr_ntprinting.h
source3/libsmb/ntlmssp.c
source3/libsmb/smb_signing.c
source3/modules/vfs_default.c
source3/modules/vfs_gpfs.c
source3/modules/vfs_streams_xattr.c
source3/passdb/lookup_sid.c
source3/printing/lpq_parse.c
source3/printing/print_cups.c
source3/printing/print_generic.c
source3/printing/print_iprint.c
source3/printing/printing.c
source3/printing/printspoolss.c
source3/printing/tests/vlp.c
source3/rpc_client/init_samr.c
source3/rpc_server/spoolss/srv_spoolss_nt.c
source3/rpcclient/cmd_lsarpc.c
source3/smbd/globals.h
source3/smbd/nttrans.c
source3/smbd/oplock_linux.c
source3/smbd/smb2_server.c
source3/smbd/smb2_write.c
source3/smbd/trans2.c
source3/web/swat.c
source3/winbindd/winbindd_pam.c
source3/winbindd/winbindd_sids_to_xids.c
source3/winbindd/winbindd_util.c
source4/auth/credentials/credentials_ntlm.c
source4/dsdb/samdb/ldb_modules/password_hash.c
source4/libcli/raw/smb_signing.c
source4/libnet/libnet_passwd.c
source4/ntp_signd/ntp_signd.c
source4/rpc_server/samr/samr_password.c
source4/torture/ndr/ndr.c
source4/torture/ndr/ntprinting.c [new file with mode: 0644]
source4/torture/ntp/ntp_signd.c
source4/torture/rpc/samba3rpc.c
source4/torture/rpc/samlogon.c
source4/torture/rpc/samr.c
source4/torture/rpc/spoolss.c
source4/torture/wscript_build

index f3d561d57b354ded411c4a0b92a5e861d461e4c5..a3c3fa76efcb789e8f02545a31d0c1b105574ee5 100644 (file)
@@ -1,3 +1,95 @@
+                   =============================
+                   Release Notes for Samba 3.6.7
+                           August 6, 2012
+                   =============================
+
+
+This is is the latest stable release of Samba 3.6.
+
+Major enhancements in Samba 3.6.7 include:
+
+o  Fix resolving our own "Domain Local" groups (bug #9052).
+o  Fix migrating printers while upgrading from 3.5.x (bug #9026).
+
+
+Changes since 3.6.6:
+--------------------
+
+o   Jeremy Allison <jra@samba.org>
+    * BUG 8974: Fix kernel oplocks when uid(file) != uid(process).
+    * BUG 8989: Send correct responses to NT Transact Secondary when no data and
+      no params for the Trans2 calls are set.
+    * BUG 9034: Fix typo in set_re_uid() call when USE_SETRESUID selected in
+      configure.
+
+
+o   David Binderman <dcb314@hotmail.com>
+    * BUG 9062: rpcclient: Fix bad call to data_blob_const.
+
+
+o   Günther Deschner <gd@samba.org>
+    * BUG 9026: Fix migrating printers while upgrading from 3.5.x.
+
+
+o   David Disseldorp <ddiss@samba.org>
+    * BUG 8719: Printing fails in function cups_job_submit.
+    * BUG 9026: Fix migrating printers while upgrading from 3.5.x.
+
+
+o   Olaf Flebbe <o.flebbe@science-computing.de>
+    * BUG 8552: Correct documentation of "case sensitive".
+
+
+o   Björn Jacke <bj@sernet.de>
+    * BUG 8996: Fix build without ads support.
+
+
+o   Volker Lendecke <vl@samba.org>
+    * BUG 9003: Fix posix acl on gpfs.
+    * BUG 9040: Using asynchronous IO with SMB2 can return NT_STATUS_FILE_CLOSED
+      in error instead ofNT_STATUS_FILE_LOCK_CONFLICT.
+
+
+o   Stefan Metzmacher <metze@samba.org>
+    * BUG 9002: Don't turn negative cache entries into valid idmappings.
+    * BUG 9022: Make vfs_gpfs less verbose in get/set_xattr functions.
+    * BUG 9057: Fix bugs in SMB2 credit handling code.
+
+
+o   Jiri Popelka <jpopelka@redhat.com>
+    * BUG 9055: Fix build against CUPS 1.6.
+
+
+o   Jura Sasek <jiri.sasek@oracle.com>
+    * BUG 9037: Fix 'net ads join' on T4 (sun4v) systems on Solaris 10.
+
+
+o   Andreas Schneider <asn@samba.org>
+    * BUG 9052: Fix resolving our own "Domain Local" groups.
+
+
+######################################################################
+Reporting bugs & Development Discussion
+#######################################
+
+Please discuss this release on the samba-technical mailing list or by
+joining the #samba-technical IRC channel on irc.freenode.net.
+
+If you do report problems then please try to send high quality
+feedback. If you don't provide vital information to help us track down
+the problem then you will probably be ignored.  All bug reports should
+be filed under the Samba 3.6 product in the project's Bugzilla
+database (https://bugzilla.samba.org/).
+
+
+======================================================================
+== Our Code, Our Bugs, Our Responsibility.
+== The Samba Team
+======================================================================
+
+Release notes for older releases follow:
+----------------------------------------
+
                    =============================
                    Release Notes for Samba 3.6.6
                            June 25, 2012
@@ -184,8 +276,9 @@ database (https://bugzilla.samba.org/).
 == The Samba Team
 ======================================================================
 
-Release notes for older releases follow:
-----------------------------------------
+
+----------------------------------------------------------------------
+
 
                    =============================
                    Release Notes for Samba 3.6.5
index ed770501cdbfe601f9c0eb989c29ac27fb550f13..e90f468658e8367cd82578d61ad56c3277faad92 100644 (file)
@@ -8,5 +8,5 @@
        <para>See the discussion in the section <smbconfoption name="name mangling"/>.</para>
 </description>
 
-<value type="default">no</value>
+<value type="default">auto</value>
 </samba:parameter>
index 30df3f2443786ba32d2956b121040ea00cc72389..bdfc411841947fe40f9edaa4049fe95bb1880ba5 100644 (file)
Binary files a/docs/Samba3-ByExample.pdf and b/docs/Samba3-ByExample.pdf differ
index c87860737c8aef712099a85ad86d3702d2ead283..76c19ad97b9c255258f93f17f37c5f809df3d4e1 100644 (file)
Binary files a/docs/Samba3-Developers-Guide.pdf and b/docs/Samba3-Developers-Guide.pdf differ
index 5a1b39b25c3853e559a0cfb3faec636abd66280a..144310ffce990af457b658b04fc3b994ebd1dc13 100644 (file)
@@ -972,7 +972,7 @@ cache directory (G)
 </h3></div></div></div><a class="indexterm" name="id311183"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#CASESENSITIVE">case sensitive</a>.</p></dd></dl></div></div><div class="section" title="case sensitive (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id311208"></a>
 
 case sensitive (S)
-</h3></div></div></div><a class="indexterm" name="id311209"></a><a name="CASESENSITIVE"></a><div class="variablelist"><dl><dt></dt><dd><p>See the discussion in the section <a class="link" href="smb.conf.5.html#NAMEMANGLING" target="_top">name mangling</a>.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>case sensitive</code></em> = <code class="literal">no</code>
+</h3></div></div></div><a class="indexterm" name="id311209"></a><a name="CASESENSITIVE"></a><div class="variablelist"><dl><dt></dt><dd><p>See the discussion in the section <a class="link" href="smb.conf.5.html#NAMEMANGLING" target="_top">name mangling</a>.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>case sensitive</code></em> = <code class="literal">auto</code>
 </em></span>
 </p></dd></dl></div></div><div class="section" title="change notify (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id311253"></a>
 
@@ -2000,10 +2000,10 @@ enable asu support (G)
     an [ADMIN$} file share.  Disabling this parameter allows for creating 
     an [ADMIN$] file share in smb.conf.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>enable asu support</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="enable core files (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id315841"></a>
+</p></dd></dl></div></div><div class="section" title="enable core files (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id315842"></a>
 
 enable core files (G)
-</h3></div></div></div><a class="indexterm" name="id315842"></a><a name="ENABLECOREFILES"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies whether core dumps should be written
+</h3></div></div></div><a class="indexterm" name="id315843"></a><a name="ENABLECOREFILES"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies whether core dumps should be written
        on internal exits. Normally set to <code class="constant">yes</code>.
        You should never need to change this.
        </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>enable core files</code></em> = <code class="literal">yes</code>
@@ -2026,15 +2026,15 @@ enable privileges (G)
        Please read the extended description provided in the Samba HOWTO documentation.
        </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>enable privileges</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="enable spoolss (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id315960"></a>
+</p></dd></dl></div></div><div class="section" title="enable spoolss (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id315961"></a>
 
 enable spoolss (G)
-</h3></div></div></div><a class="indexterm" name="id315961"></a><a name="ENABLESPOOLSS"></a><div class="variablelist"><dl><dt></dt><dd><p>Inverted synonym for <a class="link" href="smb.conf.5.html#DISABLESPOOLSS" target="_top">disable spoolss</a>.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>enable spoolss</code></em> = <code class="literal">yes</code>
+</h3></div></div></div><a class="indexterm" name="id315962"></a><a name="ENABLESPOOLSS"></a><div class="variablelist"><dl><dt></dt><dd><p>Inverted synonym for <a class="link" href="smb.conf.5.html#DISABLESPOOLSS" target="_top">disable spoolss</a>.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>enable spoolss</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="encrypt passwords (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id316012"></a>
+</p></dd></dl></div></div><div class="section" title="encrypt passwords (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id316013"></a>
 
 encrypt passwords (G)
-</h3></div></div></div><a class="indexterm" name="id316013"></a><a name="ENCRYPTPASSWORDS"></a><div class="variablelist"><dl><dt></dt><dd><p>This boolean controls whether encrypted passwords 
+</h3></div></div></div><a class="indexterm" name="id316014"></a><a name="ENCRYPTPASSWORDS"></a><div class="variablelist"><dl><dt></dt><dd><p>This boolean controls whether encrypted passwords 
     will be negotiated with the client. Note that Windows NT 4.0 SP3 and 
     above and also Windows 98 will by default expect encrypted passwords 
     unless a registry entry is changed. To use encrypted passwords in 
@@ -2057,10 +2057,10 @@ encrypt passwords (G)
     causes <code class="literal">smbd</code> to authenticate against another 
        server.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>encrypt passwords</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="enhanced browsing (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id316113"></a>
+</p></dd></dl></div></div><div class="section" title="enhanced browsing (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id316114"></a>
 
 enhanced browsing (G)
-</h3></div></div></div><a class="indexterm" name="id316114"></a><a name="ENHANCEDBROWSING"></a><div class="variablelist"><dl><dt></dt><dd><p>This option enables a couple of enhancements to 
+</h3></div></div></div><a class="indexterm" name="id316115"></a><a name="ENHANCEDBROWSING"></a><div class="variablelist"><dl><dt></dt><dd><p>This option enables a couple of enhancements to 
        cross-subnet browse propagation that have been added in Samba 
        but which are not standard in Microsoft implementations.  
        </p><p>The first enhancement to browse propagation consists of a regular
@@ -2134,7 +2134,7 @@ fake directory create times (S)
        ensures directories always predate their contents and an NMAKE build 
        will proceed as expected.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>fake directory create times</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="fake oplocks (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id316390"></a>
+</p></dd></dl></div></div><div class="section" title="fake oplocks (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id316391"></a>
 
 fake oplocks (S)
 </h3></div></div></div><a class="indexterm" name="id316392"></a><a name="FAKEOPLOCKS"></a><div class="variablelist"><dl><dt></dt><dd><p>Oplocks are the way that SMB clients get permission 
@@ -2221,13 +2221,13 @@ force directory security mode (S)
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>force directory security mode</code></em> = <code class="literal">700</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="group"><div class="titlepage"><div><div><h3 class="title"><a name="id316787"></a>
+</p></dd></dl></div></div><div class="section" title="group"><div class="titlepage"><div><div><h3 class="title"><a name="id316788"></a>
 
 <a name="GROUP"></a>group
-</h3></div></div></div><a class="indexterm" name="id316788"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#FORCEGROUP">force group</a>.</p></dd></dl></div></div><div class="section" title="force group (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id316819"></a>
+</h3></div></div></div><a class="indexterm" name="id316789"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#FORCEGROUP">force group</a>.</p></dd></dl></div></div><div class="section" title="force group (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id316820"></a>
 
 force group (S)
-</h3></div></div></div><a class="indexterm" name="id316820"></a><a name="FORCEGROUP"></a><div class="variablelist"><dl><dt></dt><dd><p>This specifies a UNIX group name that will be 
+</h3></div></div></div><a class="indexterm" name="id316821"></a><a name="FORCEGROUP"></a><div class="variablelist"><dl><dt></dt><dd><p>This specifies a UNIX group name that will be 
     assigned as the default primary group for all users connecting 
     to this service. This is useful for sharing files by ensuring 
     that all access to files on service will use the named group for 
@@ -2277,10 +2277,10 @@ force printername (S)
     not be able to delete printer connections from their local Printers 
     folder.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>force printername</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="force security mode (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id317001"></a>
+</p></dd></dl></div></div><div class="section" title="force security mode (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id317002"></a>
 
 force security mode (S)
-</h3></div></div></div><a class="indexterm" name="id317002"></a><a name="FORCESECURITYMODE"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id317003"></a><a name="FORCESECURITYMODE"></a><div class="variablelist"><dl><dt></dt><dd><p>
        This parameter controls what UNIX permission bits can be modified when a Windows NT client is manipulating 
     the UNIX permission on a file using the native NT security dialog box.
        </p><p>
@@ -2334,10 +2334,10 @@ force user (S)
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>force user</code></em> = <code class="literal">auser</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="fstype (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id317216"></a>
+</p></dd></dl></div></div><div class="section" title="fstype (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id317217"></a>
 
 fstype (S)
-</h3></div></div></div><a class="indexterm" name="id317217"></a><a name="FSTYPE"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id317218"></a><a name="FSTYPE"></a><div class="variablelist"><dl><dt></dt><dd><p>
        This parameter allows the administrator to configure the string that specifies the type of filesystem a share 
        is using that is reported by <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> 
        when a client queries the filesystem type for a share. The default type is <code class="constant">NTFS</code> for compatibility 
@@ -2363,10 +2363,10 @@ get quota command (G)
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>get quota command</code></em> = <code class="literal">/usr/local/sbin/query_quota</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="getwd cache (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id317471"></a>
+</p></dd></dl></div></div><div class="section" title="getwd cache (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id317472"></a>
 
 getwd cache (G)
-</h3></div></div></div><a class="indexterm" name="id317472"></a><a name="GETWDCACHE"></a><div class="variablelist"><dl><dt></dt><dd><p>This is a tuning option. When this is enabled a 
+</h3></div></div></div><a class="indexterm" name="id317473"></a><a name="GETWDCACHE"></a><div class="variablelist"><dl><dt></dt><dd><p>This is a tuning option. When this is enabled a 
     caching algorithm will be used to reduce the time taken for getwd() 
     calls. This can have a significant impact on performance, especially 
     when the <a class="link" href="smb.conf.5.html#WIDESMBCONFOPTIONS" target="_top">wide smbconfoptions</a> parameter is set to <code class="constant">no</code>.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>getwd cache</code></em> = <code class="literal">yes</code>
@@ -2392,13 +2392,13 @@ guest account (G)
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>guest account</code></em> = <code class="literal">ftp</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="public"><div class="titlepage"><div><div><h3 class="title"><a name="id317628"></a>
+</p></dd></dl></div></div><div class="section" title="public"><div class="titlepage"><div><div><h3 class="title"><a name="id317629"></a>
 
 <a name="PUBLIC"></a>public
-</h3></div></div></div><a class="indexterm" name="id317630"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#GUESTOK">guest ok</a>.</p></dd></dl></div></div><div class="section" title="guest ok (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id317659"></a>
+</h3></div></div></div><a class="indexterm" name="id317630"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#GUESTOK">guest ok</a>.</p></dd></dl></div></div><div class="section" title="guest ok (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id317660"></a>
 
 guest ok (S)
-</h3></div></div></div><a class="indexterm" name="id317660"></a><a name="GUESTOK"></a><div class="variablelist"><dl><dt></dt><dd><p>If this parameter is <code class="constant">yes</code> for 
+</h3></div></div></div><a class="indexterm" name="id317661"></a><a name="GUESTOK"></a><div class="variablelist"><dl><dt></dt><dd><p>If this parameter is <code class="constant">yes</code> for 
     a service, then no password is required to connect to the service. 
     Privileges will be those of the <a class="link" href="smb.conf.5.html#GUESTACCOUNT" target="_top">guest account</a>.</p><p>This parameter nullifies the benefits of setting
     <a class="link" href="smb.conf.5.html#RESTRICTANONYMOUS" target="_top">restrict anonymous = 2</a>
@@ -2408,10 +2408,10 @@ guest ok (S)
 </p></dd></dl></div></div><div class="section" title="only guest"><div class="titlepage"><div><div><h3 class="title"><a name="id317745"></a>
 
 <a name="ONLYGUEST"></a>only guest
-</h3></div></div></div><a class="indexterm" name="id317746"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#GUESTONLY">guest only</a>.</p></dd></dl></div></div><div class="section" title="guest only (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id317777"></a>
+</h3></div></div></div><a class="indexterm" name="id317746"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#GUESTONLY">guest only</a>.</p></dd></dl></div></div><div class="section" title="guest only (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id317778"></a>
 
 guest only (S)
-</h3></div></div></div><a class="indexterm" name="id317778"></a><a name="GUESTONLY"></a><div class="variablelist"><dl><dt></dt><dd><p>If this parameter is <code class="constant">yes</code> for 
+</h3></div></div></div><a class="indexterm" name="id317779"></a><a name="GUESTONLY"></a><div class="variablelist"><dl><dt></dt><dd><p>If this parameter is <code class="constant">yes</code> for 
     a service, then only guest connections to the service are permitted. 
     This parameter will have no effect if <a class="link" href="smb.conf.5.html#GUESTOK" target="_top">guest ok</a> is not set for the service.</p><p>See the section below on <a class="link" href="smb.conf.5.html#SECURITY" target="_top">security</a> for more information about this option.
        </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>guest only</code></em> = <code class="literal">no</code>
@@ -2447,7 +2447,7 @@ hide files = /.*/DesktopFolderDB/TrashFor%m/resource.frk/
        </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>hide files</code></em> = <code class="literal">
 # no file are hidden</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="hide special files (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id317966"></a>
+</p></dd></dl></div></div><div class="section" title="hide special files (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id317967"></a>
 
 hide special files (S)
 </h3></div></div></div><a class="indexterm" name="id317968"></a><a name="HIDESPECIALFILES"></a><div class="variablelist"><dl><dt></dt><dd><p>
@@ -2461,10 +2461,10 @@ hide unreadable (S)
 </h3></div></div></div><a class="indexterm" name="id318009"></a><a name="HIDEUNREADABLE"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter prevents clients from seeing the
                existance of files that cannot be read. Defaults to off.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>hide unreadable</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="hide unwriteable files (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id318049"></a>
+</p></dd></dl></div></div><div class="section" title="hide unwriteable files (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id318050"></a>
 
 hide unwriteable files (S)
-</h3></div></div></div><a class="indexterm" name="id318050"></a><a name="HIDEUNWRITEABLEFILES"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id318051"></a><a name="HIDEUNWRITEABLEFILES"></a><div class="variablelist"><dl><dt></dt><dd><p>
     This parameter prevents clients from seeing the existance of files that cannot be written to. 
     Defaults to off. Note that unwriteable directories are shown as usual.
     </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>hide unwriteable files</code></em> = <code class="literal">no</code>
@@ -2555,10 +2555,10 @@ hosts deny (S)
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>hosts deny</code></em> = <code class="literal">150.203.4. badhost.mynet.edu.au</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="idmap backend (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id318679"></a>
+</p></dd></dl></div></div><div class="section" title="idmap backend (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id318680"></a>
 
 idmap backend (G)
-</h3></div></div></div><a class="indexterm" name="id318680"></a><a name="IDMAPBACKEND"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id318681"></a><a name="IDMAPBACKEND"></a><div class="variablelist"><dl><dt></dt><dd><p>
        The idmap backend provides a plugin interface for Winbind to use
        varying backends to store SID/uid/gid mapping tables.
        </p><p>
@@ -2670,7 +2670,7 @@ idmap config (G)
 </h3></div></div></div><a class="indexterm" name="id319003"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#IDMAPGID">idmap gid</a>.</p></dd></dl></div></div><div class="section" title="idmap gid (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id319034"></a>
 
 idmap gid (G)
-</h3></div></div></div><a class="indexterm" name="id319035"></a><a name="IDMAPGID"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id319036"></a><a name="IDMAPGID"></a><div class="variablelist"><dl><dt></dt><dd><p>
        The idmap gid parameter specifies the range of group ids
        for the default idmap configuration. It is now deprecated
        in favour of <a class="link" href="smb.conf.5.html#IDMAPCONFIG*:RANGE" target="_top">idmap config * : range</a>.
@@ -2681,7 +2681,7 @@ idmap gid (G)
 </p></dd></dl></div></div><div class="section" title="idmap negative cache time (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id319118"></a>
 
 idmap negative cache time (G)
-</h3></div></div></div><a class="indexterm" name="id319119"></a><a name="IDMAPNEGATIVECACHETIME"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies the number of seconds that Winbind's
+</h3></div></div></div><a class="indexterm" name="id319120"></a><a name="IDMAPNEGATIVECACHETIME"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies the number of seconds that Winbind's
        idmap interface will cache negative SID/uid/gid query results.
        </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>idmap negative cache time</code></em> = <code class="literal">120</code>
 </em></span>
@@ -2702,7 +2702,7 @@ idmap uid (G)
 </p></dd></dl></div></div><div class="section" title="include (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id319274"></a>
 
 include (G)
-</h3></div></div></div><a class="indexterm" name="id319275"></a><a name="INCLUDE"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id319276"></a><a name="INCLUDE"></a><div class="variablelist"><dl><dt></dt><dd><p>
        This allows you to include one config file inside another.  The file is included literally, as though typed 
        in place.
        </p><p>
@@ -2736,7 +2736,7 @@ inherit acls (S)
     Windows ACLs correctly.
 </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>inherit acls</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="inherit owner (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id319416"></a>
+</p></dd></dl></div></div><div class="section" title="inherit owner (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id319417"></a>
 
 inherit owner (S)
 </h3></div></div></div><a class="indexterm" name="id319418"></a><a name="INHERITOWNER"></a><div class="variablelist"><dl><dt></dt><dd><p>The ownership of new files and directories 
@@ -2748,7 +2748,7 @@ inherit owner (S)
        delete them and to ensure that newly create files in a user's
        roaming profile directory are actually owner by the user.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>inherit owner</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="inherit permissions (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id319464"></a>
+</p></dd></dl></div></div><div class="section" title="inherit permissions (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id319465"></a>
 
 inherit permissions (S)
 </h3></div></div></div><a class="indexterm" name="id319466"></a><a name="INHERITPERMISSIONS"></a><div class="variablelist"><dl><dt></dt><dd><p>
@@ -2777,10 +2777,10 @@ init logon delayed hosts (G)
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>init logon delayed hosts</code></em> = <code class="literal">150.203.5. myhost.mynet.de</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="init logon delay (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id319676"></a>
+</p></dd></dl></div></div><div class="section" title="init logon delay (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id319677"></a>
 
 init logon delay (G)
-</h3></div></div></div><a class="indexterm" name="id319677"></a><a name="INITLOGONDELAY"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id319678"></a><a name="INITLOGONDELAY"></a><div class="variablelist"><dl><dt></dt><dd><p>
        This parameter specifies a delay in milliseconds for the hosts configured
        for delayed initial samlogon with
        <a class="link" href="smb.conf.5.html#INITLOGONDELAYEDHOSTS" target="_top">init logon delayed hosts</a>.
@@ -2861,10 +2861,10 @@ Basically you should only use this option if you strike difficulties.</p><p>Defa
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>keepalive</code></em> = <code class="literal">600</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="kerberos method (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id320099"></a>
+</p></dd></dl></div></div><div class="section" title="kerberos method (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id320100"></a>
 
 kerberos method (G)
-</h3></div></div></div><a class="indexterm" name="id320100"></a><a name="KERBEROSMETHOD"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id320101"></a><a name="KERBEROSMETHOD"></a><div class="variablelist"><dl><dt></dt><dd><p>
        Controls how kerberos tickets are verified.
        </p><p>Valid options are:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>secrets only - use only the secrets.tdb for
          ticket verification (default)</p></li><li class="listitem"><p>system keytab - use only the system keytab
@@ -2881,7 +2881,7 @@ kerberos method (G)
          specify the location of the keytab file.
        </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>kerberos method</code></em> = <code class="literal">secrets only</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="kernel change notify (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id320188"></a>
+</p></dd></dl></div></div><div class="section" title="kernel change notify (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id320189"></a>
 
 kernel change notify (S)
 </h3></div></div></div><a class="indexterm" name="id320190"></a><a name="KERNELCHANGENOTIFY"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies whether Samba should ask the 
@@ -2929,10 +2929,10 @@ lanman auth (G)
     permited.  Not all clients support NTLMv2, and most will require
     special configuration to use it.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>lanman auth</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="large readwrite (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id320411"></a>
+</p></dd></dl></div></div><div class="section" title="large readwrite (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id320412"></a>
 
 large readwrite (G)
-</h3></div></div></div><a class="indexterm" name="id320412"></a><a name="LARGEREADWRITE"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter determines whether or not
+</h3></div></div></div><a class="indexterm" name="id320413"></a><a name="LARGEREADWRITE"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter determines whether or not
     <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> supports the new 64k
     streaming read and write variant SMB requests introduced with
     Windows 2000. Note that due to Windows 2000 client redirector bugs
@@ -2990,7 +2990,7 @@ ldap debug level (G)
 </p></dd></dl></div></div><div class="section" title="ldap debug threshold (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id320708"></a>
 
 ldap debug threshold (G)
-</h3></div></div></div><a class="indexterm" name="id320709"></a><a name="LDAPDEBUGTHRESHOLD"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id320710"></a><a name="LDAPDEBUGTHRESHOLD"></a><div class="variablelist"><dl><dt></dt><dd><p>
                This parameter controls the Samba debug level at which
                the ldap library debug output is
                printed in the Samba logs. See the description of
@@ -2999,18 +2999,18 @@ ldap debug threshold (G)
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>ldap debug threshold</code></em> = <code class="literal">5</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="ldap delete dn (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id320772"></a>
+</p></dd></dl></div></div><div class="section" title="ldap delete dn (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id320773"></a>
 
 ldap delete dn (G)
-</h3></div></div></div><a class="indexterm" name="id320773"></a><a name="LDAPDELETEDN"></a><div class="variablelist"><dl><dt></dt><dd><p> This parameter specifies whether a delete
+</h3></div></div></div><a class="indexterm" name="id320774"></a><a name="LDAPDELETEDN"></a><div class="variablelist"><dl><dt></dt><dd><p> This parameter specifies whether a delete
        operation in the ldapsam deletes the complete entry or only the attributes
        specific to Samba.
        </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>ldap delete dn</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="ldap deref (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id320814"></a>
+</p></dd></dl></div></div><div class="section" title="ldap deref (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id320815"></a>
 
 ldap deref (G)
-</h3></div></div></div><a class="indexterm" name="id320815"></a><a name="LDAPDEREF"></a><div class="variablelist"><dl><dt></dt><dd><p>This option controls whether Samba should tell the LDAP library
+</h3></div></div></div><a class="indexterm" name="id320816"></a><a name="LDAPDEREF"></a><div class="variablelist"><dl><dt></dt><dd><p>This option controls whether Samba should tell the LDAP library
        to use a certain alias dereferencing method. The default is
        <span class="emphasis"><em>auto</em></span>, which means that the default setting of the
        ldap client library will be kept. Other possible values are
@@ -3021,10 +3021,10 @@ ldap deref (G)
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>ldap deref</code></em> = <code class="literal">searching</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="ldap follow referral (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id320892"></a>
+</p></dd></dl></div></div><div class="section" title="ldap follow referral (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id320893"></a>
 
 ldap follow referral (G)
-</h3></div></div></div><a class="indexterm" name="id320893"></a><a name="LDAPFOLLOWREFERRAL"></a><div class="variablelist"><dl><dt></dt><dd><p>This option controls whether to follow LDAP referrals or not when
+</h3></div></div></div><a class="indexterm" name="id320894"></a><a name="LDAPFOLLOWREFERRAL"></a><div class="variablelist"><dl><dt></dt><dd><p>This option controls whether to follow LDAP referrals or not when
        searching for entries in the LDAP database. Possible values are
        <span class="emphasis"><em>on</em></span> to enable following referrals,
        <span class="emphasis"><em>off</em></span> to disable this, and
@@ -3109,10 +3109,10 @@ ldap replication sleep (G)
        The value is specified in milliseconds, the maximum value is 5000 (5 seconds).
        </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>ldap replication sleep</code></em> = <code class="literal">1000</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="ldapsam:editposix (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id321415"></a>
+</p></dd></dl></div></div><div class="section" title="ldapsam:editposix (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id321416"></a>
 
 ldapsam:editposix (G)
-</h3></div></div></div><a class="indexterm" name="id321416"></a><a name="LDAPSAM:EDITPOSIX"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id321417"></a><a name="LDAPSAM:EDITPOSIX"></a><div class="variablelist"><dl><dt></dt><dd><p>
        Editposix is an option that leverages ldapsam:trusted to make it simpler to manage a domain controller
        eliminating the need to set up custom scripts to add and manage the posix users and groups. This option
        will instead directly manipulate the ldap tree to create, remove and modify user and group entries.
@@ -3190,7 +3190,7 @@ ldapsam:editposix (G)
        </pre><p>
        </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>ldapsam:editposix</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="ldapsam:trusted (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id321520"></a>
+</p></dd></dl></div></div><div class="section" title="ldapsam:trusted (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id321521"></a>
 
 ldapsam:trusted (G)
 </h3></div></div></div><a class="indexterm" name="id321522"></a><a name="LDAPSAM:TRUSTED"></a><div class="variablelist"><dl><dt></dt><dd><p>
@@ -3252,10 +3252,10 @@ ldap ssl (G)
        for more information on <a class="link" href="smb.conf.5.html#LDAPSSLADS" target="_top">ldap ssl ads</a>.
         </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>ldap ssl</code></em> = <code class="literal">start tls</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="ldap suffix (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id321861"></a>
+</p></dd></dl></div></div><div class="section" title="ldap suffix (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id321862"></a>
 
 ldap suffix (G)
-</h3></div></div></div><a class="indexterm" name="id321862"></a><a name="LDAPSUFFIX"></a><div class="variablelist"><dl><dt></dt><dd><p>Specifies the base for all ldap suffixes and for storing the sambaDomain object.</p><p>
+</h3></div></div></div><a class="indexterm" name="id321863"></a><a name="LDAPSUFFIX"></a><div class="variablelist"><dl><dt></dt><dd><p>Specifies the base for all ldap suffixes and for storing the sambaDomain object.</p><p>
        The ldap suffix will be appended to the values specified for the <a class="link" href="smb.conf.5.html#LDAPUSERSUFFIX" target="_top">ldap user suffix</a>,
         <a class="link" href="smb.conf.5.html#LDAPGROUPSUFFIX" target="_top">ldap group suffix</a>, <a class="link" href="smb.conf.5.html#LDAPMACHINESUFFIX" target="_top">ldap machine suffix</a>, and the
         <a class="link" href="smb.conf.5.html#LDAPIDMAPSUFFIX" target="_top">ldap idmap suffix</a>. Each of these should be given only a DN relative to the
@@ -3264,10 +3264,10 @@ ldap suffix (G)
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>ldap suffix</code></em> = <code class="literal">dc=samba,dc=org</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="ldap timeout (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id321977"></a>
+</p></dd></dl></div></div><div class="section" title="ldap timeout (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id321978"></a>
 
 ldap timeout (G)
-</h3></div></div></div><a class="indexterm" name="id321978"></a><a name="LDAPTIMEOUT"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id321979"></a><a name="LDAPTIMEOUT"></a><div class="variablelist"><dl><dt></dt><dd><p>
        This parameter defines the number of seconds that Samba should use as timeout for LDAP operations.
        </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>ldap timeout</code></em> = <code class="literal">15</code>
 </em></span>
@@ -3282,7 +3282,7 @@ ldap user suffix (G)
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>ldap user suffix</code></em> = <code class="literal">ou=people</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="level2 oplocks (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id322096"></a>
+</p></dd></dl></div></div><div class="section" title="level2 oplocks (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id322097"></a>
 
 level2 oplocks (S)
 </h3></div></div></div><a class="indexterm" name="id322098"></a><a name="LEVEL2OPLOCKS"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter controls whether Samba supports
@@ -3340,7 +3340,7 @@ lm interval (G)
 </p></dd></dl></div></div><div class="section" title="load printers (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id322388"></a>
 
 load printers (G)
-</h3></div></div></div><a class="indexterm" name="id322389"></a><a name="LOADPRINTERS"></a><div class="variablelist"><dl><dt></dt><dd><p>A boolean variable that controls whether all 
+</h3></div></div></div><a class="indexterm" name="id322390"></a><a name="LOADPRINTERS"></a><div class="variablelist"><dl><dt></dt><dd><p>A boolean variable that controls whether all 
     printers in the printcap will be loaded for browsing by default. 
     See the <a class="link" href="smb.conf.5.html#PRINTERS" target="_top">printers</a> section for 
     more details.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>load printers</code></em> = <code class="literal">yes</code>
@@ -3358,10 +3358,10 @@ local master (G)
        will <span class="emphasis"><em>participate</em></span> in elections for local master browser.</p><p>Setting this value to <code class="constant">no</code> will cause <code class="literal">nmbd</code> <span class="emphasis"><em>never</em></span> to become a local 
 master browser.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>local master</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="lock dir"><div class="titlepage"><div><div><h3 class="title"><a name="id322538"></a>
+</p></dd></dl></div></div><div class="section" title="lock dir"><div class="titlepage"><div><div><h3 class="title"><a name="id322539"></a>
 
 <a name="LOCKDIR"></a>lock dir
-</h3></div></div></div><a class="indexterm" name="id322539"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#LOCKDIRECTORY">lock directory</a>.</p></dd></dl></div></div><div class="section" title="lock directory (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id322570"></a>
+</h3></div></div></div><a class="indexterm" name="id322540"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#LOCKDIRECTORY">lock directory</a>.</p></dd></dl></div></div><div class="section" title="lock directory (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id322570"></a>
 
 lock directory (G)
 </h3></div></div></div><a class="indexterm" name="id322571"></a><a name="LOCKDIRECTORY"></a><div class="variablelist"><dl><dt></dt><dd><p>This option specifies the directory where lock 
@@ -3418,7 +3418,7 @@ log file (G)
 </p></dd></dl></div></div><div class="section" title="debuglevel"><div class="titlepage"><div><div><h3 class="title"><a name="id322870"></a>
 
 <a name="DEBUGLEVEL"></a>debuglevel
-</h3></div></div></div><a class="indexterm" name="id322871"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#LOGLEVEL">log level</a>.</p></dd></dl></div></div><div class="section" title="log level (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id322901"></a>
+</h3></div></div></div><a class="indexterm" name="id322872"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#LOGLEVEL">log level</a>.</p></dd></dl></div></div><div class="section" title="log level (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id322901"></a>
 
 log level (G)
 </h3></div></div></div><a class="indexterm" name="id322902"></a><a name="LOGLEVEL"></a><div class="variablelist"><dl><dt></dt><dd><p>
@@ -3526,7 +3526,7 @@ logon path = \\PROFILESERVER\PROFILE\%U
 </pre><p>
        </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>logon path</code></em> = <code class="literal">\\%N\%U\profile</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="logon script (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id323502"></a>
+</p></dd></dl></div></div><div class="section" title="logon script (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id323503"></a>
 
 logon script (G)
 </h3></div></div></div><a class="indexterm" name="id323504"></a><a name="LOGONSCRIPT"></a><div class="variablelist"><dl><dt></dt><dd><p>
@@ -3577,7 +3577,7 @@ log writeable files on exit (G)
        consistency checks on.
        </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>log writeable files on exit</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="lppause command (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id323706"></a>
+</p></dd></dl></div></div><div class="section" title="lppause command (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id323707"></a>
 
 lppause command (S)
 </h3></div></div></div><a class="indexterm" name="id323708"></a><a name="LPPAUSECOMMAND"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies the command to be 
@@ -3623,7 +3623,7 @@ lpq cache time (G)
 </p></dd></dl></div></div><div class="section" title="lpq command (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id323954"></a>
 
 lpq command (S)
-</h3></div></div></div><a class="indexterm" name="id323955"></a><a name="LPQCOMMAND"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies the command to be 
+</h3></div></div></div><a class="indexterm" name="id323956"></a><a name="LPQCOMMAND"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies the command to be 
     executed on the server host in order to obtain <code class="literal">lpq
     </code>-style printer status information.</p><p>This command should be a program or script which 
     takes a printer name as its only parameter and outputs printer 
@@ -3645,7 +3645,7 @@ lpq command (S)
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>lpq command</code></em> = <code class="literal">/usr/bin/lpq -P%p</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="lpresume command (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id324070"></a>
+</p></dd></dl></div></div><div class="section" title="lpresume command (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id324071"></a>
 
 lpresume command (S)
 </h3></div></div></div><a class="indexterm" name="id324072"></a><a name="LPRESUMECOMMAND"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies the command to be 
@@ -3766,7 +3766,7 @@ mangle prefix (G)
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>mangle prefix</code></em> = <code class="literal">4</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="mangling char (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id324740"></a>
+</p></dd></dl></div></div><div class="section" title="mangling char (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id324741"></a>
 
 mangling char (S)
 </h3></div></div></div><a class="indexterm" name="id324742"></a><a name="MANGLINGCHAR"></a><div class="variablelist"><dl><dt></dt><dd><p>This controls what character is used as 
@@ -3801,10 +3801,10 @@ map acl inherit (S)
     POSIX ACL mapping code.
     </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>map acl inherit</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="map archive (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id324929"></a>
+</p></dd></dl></div></div><div class="section" title="map archive (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id324930"></a>
 
 map archive (S)
-</h3></div></div></div><a class="indexterm" name="id324930"></a><a name="MAPARCHIVE"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id324931"></a><a name="MAPARCHIVE"></a><div class="variablelist"><dl><dt></dt><dd><p>
        This controls whether the DOS archive attribute 
        should be mapped to the UNIX owner execute bit.  The DOS archive bit 
        is set when a file has been modified since its last backup.  One 
@@ -3817,10 +3817,10 @@ map archive (S)
        <a class="link" href="smb.conf.5.html#CREATEMASK" target="_top">create mask</a> for details.
        </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>map archive</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="map hidden (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id324998"></a>
+</p></dd></dl></div></div><div class="section" title="map hidden (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id324999"></a>
 
 map hidden (S)
-</h3></div></div></div><a class="indexterm" name="id324999"></a><a name="MAPHIDDEN"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id325000"></a><a name="MAPHIDDEN"></a><div class="variablelist"><dl><dt></dt><dd><p>
        This controls whether DOS style hidden files should be mapped to the UNIX world execute bit.
        </p><p>
        Note that this requires the <a class="link" href="smb.conf.5.html#CREATEMASK" target="_top">create mask</a> to be set such that the world execute 
@@ -3865,10 +3865,10 @@ map system (S)
        <a class="link" href="smb.conf.5.html#CREATEMASK" target="_top">create mask</a> for details.
        </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>map system</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="map to guest (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id325261"></a>
+</p></dd></dl></div></div><div class="section" title="map to guest (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id325262"></a>
 
 map to guest (G)
-</h3></div></div></div><a class="indexterm" name="id325262"></a><a name="MAPTOGUEST"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is only useful in <a class="link" href="smb.conf.5.html#SECURITY" target="_top">SECURITY = 
+</h3></div></div></div><a class="indexterm" name="id325263"></a><a name="MAPTOGUEST"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is only useful in <a class="link" href="smb.conf.5.html#SECURITY" target="_top">SECURITY = 
     security</a> modes other than <em class="parameter"><code>security = share</code></em> 
     and <em class="parameter"><code>security = server</code></em>
     - i.e. <code class="constant">user</code>, and <code class="constant">domain</code>.</p><p>This parameter can take four different values, which tell
@@ -3910,10 +3910,10 @@ map to guest (G)
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>map to guest</code></em> = <code class="literal">Bad User</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="map untrusted to domain (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id325477"></a>
+</p></dd></dl></div></div><div class="section" title="map untrusted to domain (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id325478"></a>
 
 map untrusted to domain (G)
-</h3></div></div></div><a class="indexterm" name="id325478"></a><a name="MAPUNTRUSTEDTODOMAIN"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id325479"></a><a name="MAPUNTRUSTEDTODOMAIN"></a><div class="variablelist"><dl><dt></dt><dd><p>
     If a client connects to smbd using an untrusted domain name, such as
     BOGUS\user, smbd replaces the BOGUS domain with it's SAM name before
     attempting to authenticate that user.  In the case where smbd is acting as
@@ -3931,10 +3931,10 @@ map untrusted to domain (G)
     effect.
     </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>map untrusted to domain</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="max connections (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id325535"></a>
+</p></dd></dl></div></div><div class="section" title="max connections (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id325536"></a>
 
 max connections (S)
-</h3></div></div></div><a class="indexterm" name="id325536"></a><a name="MAXCONNECTIONS"></a><div class="variablelist"><dl><dt></dt><dd><p>This option allows the number of simultaneous connections to a service to be limited.
+</h3></div></div></div><a class="indexterm" name="id325537"></a><a name="MAXCONNECTIONS"></a><div class="variablelist"><dl><dt></dt><dd><p>This option allows the number of simultaneous connections to a service to be limited.
     If <em class="parameter"><code>max connections</code></em> is greater than 0 then connections
     will be refused if this number of connections to the service are already open. A value 
     of zero mean an unlimited number of connections may be made.</p><p>Record lock files are used to implement this feature. The lock files will be stored in 
@@ -3942,7 +3942,7 @@ max connections (S)
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>max connections</code></em> = <code class="literal">10</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="max disk size (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id325616"></a>
+</p></dd></dl></div></div><div class="section" title="max disk size (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id325617"></a>
 
 max disk size (G)
 </h3></div></div></div><a class="indexterm" name="id325618"></a><a name="MAXDISKSIZE"></a><div class="variablelist"><dl><dt></dt><dd><p>This option allows you to put an upper limit 
@@ -3971,10 +3971,10 @@ max log size (G)
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>max log size</code></em> = <code class="literal">1000</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="max mux (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id325770"></a>
+</p></dd></dl></div></div><div class="section" title="max mux (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id325771"></a>
 
 max mux (G)
-</h3></div></div></div><a class="indexterm" name="id325771"></a><a name="MAXMUX"></a><div class="variablelist"><dl><dt></dt><dd><p>This option controls the maximum number of 
+</h3></div></div></div><a class="indexterm" name="id325772"></a><a name="MAXMUX"></a><div class="variablelist"><dl><dt></dt><dd><p>This option controls the maximum number of 
     outstanding simultaneous SMB operations that Samba tells the client 
        it will allow. You should never need to set this parameter.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>max mux</code></em> = <code class="literal">50</code>
 </em></span>
@@ -4022,10 +4022,10 @@ max protocol (G)
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>max protocol</code></em> = <code class="literal">LANMAN1</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="max reported print jobs (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id326098"></a>
+</p></dd></dl></div></div><div class="section" title="max reported print jobs (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id326099"></a>
 
 max reported print jobs (S)
-</h3></div></div></div><a class="indexterm" name="id326099"></a><a name="MAXREPORTEDPRINTJOBS"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id326100"></a><a name="MAXREPORTEDPRINTJOBS"></a><div class="variablelist"><dl><dt></dt><dd><p>
     This parameter limits the maximum number of jobs displayed in a port monitor for 
     Samba printer queue at any given moment. If this number is exceeded, the excess 
     jobs will not be shown. A value of zero means there is no limit on the number of 
@@ -4067,10 +4067,10 @@ max ttl (G)
     requesting a name using either a broadcast packet or from a WINS server. You should 
        never need to change this parameter. The default is 3 days.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>max ttl</code></em> = <code class="literal">259200</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="max wins ttl (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id326357"></a>
+</p></dd></dl></div></div><div class="section" title="max wins ttl (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id326358"></a>
 
 max wins ttl (G)
-</h3></div></div></div><a class="indexterm" name="id326358"></a><a name="MAXWINSTTL"></a><div class="variablelist"><dl><dt></dt><dd><p>This option tells <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> when acting as a WINS server
+</h3></div></div></div><a class="indexterm" name="id326359"></a><a name="MAXWINSTTL"></a><div class="variablelist"><dl><dt></dt><dd><p>This option tells <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> when acting as a WINS server
        (<a class="link" href="smb.conf.5.html#WINSSUPPORT" target="_top">wins support = yes</a>) what the maximum
     'time to live' of NetBIOS names that <code class="literal">nmbd</code> 
     will grant will be (in seconds). You should never need to change this
@@ -4079,7 +4079,7 @@ max wins ttl (G)
 </p></dd></dl></div></div><div class="section" title="max xmit (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id326426"></a>
 
 max xmit (G)
-</h3></div></div></div><a class="indexterm" name="id326427"></a><a name="MAXXMIT"></a><div class="variablelist"><dl><dt></dt><dd><p>This option controls the maximum packet size 
+</h3></div></div></div><a class="indexterm" name="id326428"></a><a name="MAXXMIT"></a><div class="variablelist"><dl><dt></dt><dd><p>This option controls the maximum packet size 
     that will be negotiated by Samba. The default is 16644, which 
     matches the behavior of Windows 2000.  A value below 2048 is likely to cause problems.
     You should never need to change this parameter from its default value.
@@ -4090,7 +4090,7 @@ max xmit (G)
 </p></dd></dl></div></div><div class="section" title="message command (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id326486"></a>
 
 message command (G)
-</h3></div></div></div><a class="indexterm" name="id326487"></a><a name="MESSAGECOMMAND"></a><div class="variablelist"><dl><dt></dt><dd><p>This specifies what command to run when the 
+</h3></div></div></div><a class="indexterm" name="id326488"></a><a name="MESSAGECOMMAND"></a><div class="variablelist"><dl><dt></dt><dd><p>This specifies what command to run when the 
        server receives a WinPopup style message.</p><p>This would normally be a command that would 
        deliver the message somehow. How this is to be done is 
        up to your imagination.</p><p>An example is:
@@ -4154,7 +4154,7 @@ min protocol (G)
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>min protocol</code></em> = <code class="literal">NT1</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="min receivefile size (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id326830"></a>
+</p></dd></dl></div></div><div class="section" title="min receivefile size (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id326831"></a>
 
 min receivefile size (G)
 </h3></div></div></div><a class="indexterm" name="id326832"></a><a name="MINRECEIVEFILESIZE"></a><div class="variablelist"><dl><dt></dt><dd><p>This option changes the behavior of <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> when processing SMBwriteX calls. Any incoming
@@ -4169,7 +4169,7 @@ nonzero. The maximum value is 128k. Values greater than 128k will be silently se
 </p></dd></dl></div></div><div class="section" title="min wins ttl (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id326892"></a>
 
 min wins ttl (G)
-</h3></div></div></div><a class="indexterm" name="id326893"></a><a name="MINWINSTTL"></a><div class="variablelist"><dl><dt></dt><dd><p>This option tells <a class="citerefentry" href="nmbd.8.html"><span class="citerefentry"><span class="refentrytitle">nmbd</span>(8)</span></a>
+</h3></div></div></div><a class="indexterm" name="id326894"></a><a name="MINWINSTTL"></a><div class="variablelist"><dl><dt></dt><dd><p>This option tells <a class="citerefentry" href="nmbd.8.html"><span class="citerefentry"><span class="refentrytitle">nmbd</span>(8)</span></a>
     when acting as a WINS server (<a class="link" href="smb.conf.5.html#WINSSUPPORT" target="_top">wins support = yes</a>) what the minimum 'time to live' 
     of NetBIOS names that <code class="literal">nmbd</code> will grant will be (in 
     seconds). You should never need to change this parameter.  The default 
@@ -4197,10 +4197,10 @@ msdfs root (S)
        and so on.  For more information on setting up a Dfs tree on
        Samba, refer to the MSDFS chapter in the Samba3-HOWTO book.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>msdfs root</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="multicast dns register (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id327085"></a>
+</p></dd></dl></div></div><div class="section" title="multicast dns register (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id327086"></a>
 
 multicast dns register (G)
-</h3></div></div></div><a class="indexterm" name="id327086"></a><a name="MULTICASTDNSREGISTER"></a><div class="variablelist"><dl><dt></dt><dd><p>If compiled with proper support for it, Samba will
+</h3></div></div></div><a class="indexterm" name="id327087"></a><a name="MULTICASTDNSREGISTER"></a><div class="variablelist"><dl><dt></dt><dd><p>If compiled with proper support for it, Samba will
         announce itself with multicast DNS services like for example
         provided by the Avahi daemon.</p><p>This parameter allows disabling Samba to register
        itself.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>multicast dns register</code></em> = <code class="literal">yes</code>
@@ -4249,15 +4249,15 @@ name resolve order (G)
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>name resolve order</code></em> = <code class="literal">lmhosts bcast host</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="ncalrpc dir (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id327372"></a>
+</p></dd></dl></div></div><div class="section" title="ncalrpc dir (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id327373"></a>
 
 ncalrpc dir (G)
-</h3></div></div></div><a class="indexterm" name="id327373"></a><a name="NCALRPCDIR"></a><div class="variablelist"><dl><dt></dt><dd><p>This directory will hold a series of named pipes to allow RPC over inter-process communication.  </p>.
+</h3></div></div></div><a class="indexterm" name="id327374"></a><a name="NCALRPCDIR"></a><div class="variablelist"><dl><dt></dt><dd><p>This directory will hold a series of named pipes to allow RPC over inter-process communication.  </p>.
        <p>This will allow Samba and other unix processes to interact over DCE/RPC without using TCP/IP.  Additionally a sub-directory 'np' has restricted permissions, and allows a trusted communication channel between Samba processes</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>ncalrpc dir</code></em> = <code class="literal">${prefix}/var/ncalrpc</code>
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>ncalrpc dir</code></em> = <code class="literal">/var/run/samba/ncalrpc</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="netbios aliases (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id327436"></a>
+</p></dd></dl></div></div><div class="section" title="netbios aliases (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id327437"></a>
 
 netbios aliases (G)
 </h3></div></div></div><a class="indexterm" name="id327438"></a><a name="NETBIOSALIASES"></a><div class="variablelist"><dl><dt></dt><dd><p>This is a list of NetBIOS names that nmbd will 
@@ -4270,10 +4270,10 @@ netbios aliases (G)
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>netbios aliases</code></em> = <code class="literal">TEST TEST1 TEST2</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="netbios name (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id327498"></a>
+</p></dd></dl></div></div><div class="section" title="netbios name (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id327499"></a>
 
 netbios name (G)
-</h3></div></div></div><a class="indexterm" name="id327499"></a><a name="NETBIOSNAME"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id327500"></a><a name="NETBIOSNAME"></a><div class="variablelist"><dl><dt></dt><dd><p>
                This sets the NetBIOS name by which a Samba server is known. By default it is the same as the first component
                of the host's DNS name. If a machine is a browse server or logon server this name (or the first component of
                the hosts DNS name) will be the name that these services are advertised under.
@@ -4338,7 +4338,7 @@ nt acl support (S)
 </p></dd></dl></div></div><div class="section" title="ntlm auth (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id327800"></a>
 
 ntlm auth (G)
-</h3></div></div></div><a class="indexterm" name="id327801"></a><a name="NTLMAUTH"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter determines whether or not <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> will attempt to
+</h3></div></div></div><a class="indexterm" name="id327802"></a><a name="NTLMAUTH"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter determines whether or not <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> will attempt to
     authenticate users using the NTLM encrypted password response.
     If disabled, either the lanman password hash or an NTLMv2 response
     will need to be sent by the client.</p><p>If this option, and <code class="literal">lanman
@@ -4355,24 +4355,24 @@ nt pipe support (G)
     pipes. This is a developer debugging option and can be left
        alone.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>nt pipe support</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="nt status support (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id327913"></a>
+</p></dd></dl></div></div><div class="section" title="nt status support (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id327914"></a>
 
 nt status support (G)
-</h3></div></div></div><a class="indexterm" name="id327914"></a><a name="NTSTATUSSUPPORT"></a><div class="variablelist"><dl><dt></dt><dd><p>This boolean parameter controls whether <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> will negotiate NT specific status
+</h3></div></div></div><a class="indexterm" name="id327915"></a><a name="NTSTATUSSUPPORT"></a><div class="variablelist"><dl><dt></dt><dd><p>This boolean parameter controls whether <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> will negotiate NT specific status
     support with Windows NT/2k/XP clients. This is a developer debugging option and should be left alone.
     If this option is set to <code class="constant">no</code> then Samba offers
     exactly the same DOS error codes that versions prior to Samba 2.2.3
     reported.</p><p>You should not need to ever disable this parameter.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>nt status support</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="null passwords (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id327971"></a>
+</p></dd></dl></div></div><div class="section" title="null passwords (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id327972"></a>
 
 null passwords (G)
-</h3></div></div></div><a class="indexterm" name="id327972"></a><a name="NULLPASSWORDS"></a><div class="variablelist"><dl><dt></dt><dd><p>Allow or disallow client access to accounts that have null passwords. </p><p>See also <a class="citerefentry" href="smbpasswd.5.html"><span class="citerefentry"><span class="refentrytitle">smbpasswd</span>(5)</span></a>.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>null passwords</code></em> = <code class="literal">no</code>
+</h3></div></div></div><a class="indexterm" name="id327973"></a><a name="NULLPASSWORDS"></a><div class="variablelist"><dl><dt></dt><dd><p>Allow or disallow client access to accounts that have null passwords. </p><p>See also <a class="citerefentry" href="smbpasswd.5.html"><span class="citerefentry"><span class="refentrytitle">smbpasswd</span>(5)</span></a>.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>null passwords</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="obey pam restrictions (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id328023"></a>
+</p></dd></dl></div></div><div class="section" title="obey pam restrictions (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id328024"></a>
 
 obey pam restrictions (G)
-</h3></div></div></div><a class="indexterm" name="id328024"></a><a name="OBEYPAMRESTRICTIONS"></a><div class="variablelist"><dl><dt></dt><dd><p>When Samba 3.0 is configured to enable PAM support
+</h3></div></div></div><a class="indexterm" name="id328025"></a><a name="OBEYPAMRESTRICTIONS"></a><div class="variablelist"><dl><dt></dt><dd><p>When Samba 3.0 is configured to enable PAM support
     (i.e. --with-pam), this parameter will control whether or not Samba
     should obey PAM's account and session management directives.  The 
     default behavior is to use PAM for clear text authentication only
@@ -4410,7 +4410,7 @@ oplock break wait time (G)
        DO NOT CHANGE THIS PARAMETER UNLESS YOU HAVE READ AND UNDERSTOOD THE SAMBA OPLOCK CODE.
        </p></div><p>Default: <span class="emphasis"><em><em class="parameter"><code>oplock break wait time</code></em> = <code class="literal">0</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="oplock contention limit (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id328212"></a>
+</p></dd></dl></div></div><div class="section" title="oplock contention limit (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id328213"></a>
 
 oplock contention limit (S)
 </h3></div></div></div><a class="indexterm" name="id328214"></a><a name="OPLOCKCONTENTIONLIMIT"></a><div class="variablelist"><dl><dt></dt><dd><p>
@@ -4477,10 +4477,10 @@ os level (G)
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>os level</code></em> = <code class="literal">65</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="pam password change (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id328521"></a>
+</p></dd></dl></div></div><div class="section" title="pam password change (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id328522"></a>
 
 pam password change (G)
-</h3></div></div></div><a class="indexterm" name="id328522"></a><a name="PAMPASSWORDCHANGE"></a><div class="variablelist"><dl><dt></dt><dd><p>With the addition of better PAM support in Samba 2.2, 
+</h3></div></div></div><a class="indexterm" name="id328523"></a><a name="PAMPASSWORDCHANGE"></a><div class="variablelist"><dl><dt></dt><dd><p>With the addition of better PAM support in Samba 2.2, 
     this parameter, it is possible to use PAM's password change control 
     flag for Samba.  If enabled, then PAM will be used for password
     changes when requested by an SMB client instead of the program listed in 
@@ -4509,10 +4509,10 @@ paranoid server security (G)
     this check, which involves deliberatly attempting a
     bad logon to the remote server.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>paranoid server security</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="passdb backend (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id328709"></a>
+</p></dd></dl></div></div><div class="section" title="passdb backend (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id328710"></a>
 
 passdb backend (G)
-</h3></div></div></div><a class="indexterm" name="id328710"></a><a name="PASSDBBACKEND"></a><div class="variablelist"><dl><dt></dt><dd><p>This option allows the administrator to chose which backend
+</h3></div></div></div><a class="indexterm" name="id328711"></a><a name="PASSDBBACKEND"></a><div class="variablelist"><dl><dt></dt><dd><p>This option allows the administrator to chose which backend
     will be used for storing user and possibly group information.  This allows 
     you to swap between different storage mechanisms without recompile. </p><p>The parameter value is divided into two parts, the backend's name, and a 'location'
     string that has meaning only to that particular backed.  These are separated
@@ -4556,7 +4556,7 @@ passdb expand explicit (G)
        %G_osver% in which %G would have been substituted by the user's primary group.
     </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>passdb expand explicit</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="passwd chat debug (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id328896"></a>
+</p></dd></dl></div></div><div class="section" title="passwd chat debug (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id328897"></a>
 
 passwd chat debug (G)
 </h3></div></div></div><a class="indexterm" name="id328898"></a><a name="PASSWDCHATDEBUG"></a><div class="variablelist"><dl><dt></dt><dd><p>This boolean specifies if the passwd chat script 
@@ -4638,10 +4638,10 @@ passwd program (G)
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>passwd program</code></em> = <code class="literal">/bin/passwd %u</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="password level (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id329345"></a>
+</p></dd></dl></div></div><div class="section" title="password level (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id329346"></a>
 
 password level (G)
-</h3></div></div></div><a class="indexterm" name="id329346"></a><a name="PASSWORDLEVEL"></a><div class="variablelist"><dl><dt></dt><dd><p>Some client/server combinations have difficulty 
+</h3></div></div></div><a class="indexterm" name="id329347"></a><a name="PASSWORDLEVEL"></a><div class="variablelist"><dl><dt></dt><dd><p>Some client/server combinations have difficulty 
     with mixed-case passwords.  One offending client is Windows for 
     Workgroups, which for some reason forces passwords to upper 
     case when using the LANMAN1 protocol, but leaves them alone when 
@@ -4744,7 +4744,7 @@ perfcount module (G)
 </h3></div></div></div><a class="indexterm" name="id329857"></a><a name="PERFCOUNTMODULE"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies the perfcount backend to be used when monitoring SMB
        operations.  Only one perfcount module may be used, and it must implement all of the
        apis contained in the smb_perfcount_handler structure defined in smb.h.
-       </p><p><span class="emphasis"><em>No default</em></span></p></dd></dl></div></div><div class="section" title="pid directory (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id329886"></a>
+       </p><p><span class="emphasis"><em>No default</em></span></p></dd></dl></div></div><div class="section" title="pid directory (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id329887"></a>
 
 pid directory (G)
 </h3></div></div></div><a class="indexterm" name="id329888"></a><a name="PIDDIRECTORY"></a><div class="variablelist"><dl><dt></dt><dd><p>
@@ -4765,7 +4765,7 @@ posix locking (S)
        to "no", unless you are sharing from an NFS mount, which is not a good idea in the first place.
        </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>posix locking</code></em> = <code class="literal">yes</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="postexec (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id330000"></a>
+</p></dd></dl></div></div><div class="section" title="postexec (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id330001"></a>
 
 postexec (S)
 </h3></div></div></div><a class="indexterm" name="id330002"></a><a name="POSTEXEC"></a><div class="variablelist"><dl><dt></dt><dd><p>This option specifies a command to be run 
@@ -4779,7 +4779,7 @@ postexec (S)
 </p></dd></dl></div></div><div class="section" title="preexec close (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id330070"></a>
 
 preexec close (S)
-</h3></div></div></div><a class="indexterm" name="id330071"></a><a name="PREEXECCLOSE"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id330072"></a><a name="PREEXECCLOSE"></a><div class="variablelist"><dl><dt></dt><dd><p>
        This boolean option controls whether a non-zero return code from <a class="link" href="smb.conf.5.html#PREEXEC" target="_top">preexec</a> 
        should close the service being connected to.
        </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>preexec close</code></em> = <code class="literal">no</code>
@@ -4790,7 +4790,7 @@ preexec close (S)
 </h3></div></div></div><a class="indexterm" name="id330124"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#PREEXEC">preexec</a>.</p></dd></dl></div></div><div class="section" title="preexec (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id330154"></a>
 
 preexec (S)
-</h3></div></div></div><a class="indexterm" name="id330155"></a><a name="PREEXEC"></a><div class="variablelist"><dl><dt></dt><dd><p>This option specifies a command to be run whenever 
+</h3></div></div></div><a class="indexterm" name="id330156"></a><a name="PREEXEC"></a><div class="variablelist"><dl><dt></dt><dd><p>This option specifies a command to be run whenever 
        the service is connected to. It takes the usual substitutions.</p><p>An interesting example is to send the users a welcome 
        message every time they log in. Maybe a message of the day? Here 
        is an example:</p><p>
@@ -4802,10 +4802,10 @@ preexec (S)
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>preexec</code></em> = <code class="literal">echo \"%u connected to %S from %m (%I)\" &gt;&gt; /tmp/log</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="prefered master"><div class="titlepage"><div><div><h3 class="title"><a name="id330255"></a>
+</p></dd></dl></div></div><div class="section" title="prefered master"><div class="titlepage"><div><div><h3 class="title"><a name="id330256"></a>
 
 <a name="PREFEREDMASTER"></a>prefered master
-</h3></div></div></div><a class="indexterm" name="id330256"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#PREFERREDMASTER">preferred master</a>.</p></dd></dl></div></div><div class="section" title="preferred master (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id330288"></a>
+</h3></div></div></div><a class="indexterm" name="id330257"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#PREFERREDMASTER">preferred master</a>.</p></dd></dl></div></div><div class="section" title="preferred master (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id330288"></a>
 
 preferred master (G)
 </h3></div></div></div><a class="indexterm" name="id330289"></a><a name="PREFERREDMASTER"></a><div class="variablelist"><dl><dt></dt><dd><p>
@@ -4831,10 +4831,10 @@ preload modules (G)
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>preload modules</code></em> = <code class="literal">/usr/lib/samba/passdb/mysql.so</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="auto services"><div class="titlepage"><div><div><h3 class="title"><a name="id330432"></a>
+</p></dd></dl></div></div><div class="section" title="auto services"><div class="titlepage"><div><div><h3 class="title"><a name="id330433"></a>
 
 <a name="AUTOSERVICES"></a>auto services
-</h3></div></div></div><a class="indexterm" name="id330433"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#PRELOAD">preload</a>.</p></dd></dl></div></div><div class="section" title="preload (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id330464"></a>
+</h3></div></div></div><a class="indexterm" name="id330434"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#PRELOAD">preload</a>.</p></dd></dl></div></div><div class="section" title="preload (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id330464"></a>
 
 preload (G)
 </h3></div></div></div><a class="indexterm" name="id330465"></a><a name="PRELOAD"></a><div class="variablelist"><dl><dt></dt><dd><p>This is a list of services that you want to be 
@@ -4874,7 +4874,7 @@ printable (S)
 </p></dd></dl></div></div><div class="section" title="printcap cache time (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id330692"></a>
 
 printcap cache time (G)
-</h3></div></div></div><a class="indexterm" name="id330693"></a><a name="PRINTCAPCACHETIME"></a><div class="variablelist"><dl><dt></dt><dd><p>This option specifies the number of seconds before the printing
+</h3></div></div></div><a class="indexterm" name="id330694"></a><a name="PRINTCAPCACHETIME"></a><div class="variablelist"><dl><dt></dt><dd><p>This option specifies the number of seconds before the printing
     subsystem is again asked for the known printers.
     </p><p>Setting this parameter to 0 disables any rescanning for new 
     or removed printers after the initial startup.
@@ -4971,7 +4971,7 @@ print command (S)
 </p></dd></dl></div></div><div class="section" title="printer admin (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id331202"></a>
 
 printer admin (S)
-</h3></div></div></div><a class="indexterm" name="id331203"></a><a name="PRINTERADMIN"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id331204"></a><a name="PRINTERADMIN"></a><div class="variablelist"><dl><dt></dt><dd><p>
        This lists users who can do anything to printers
        via the remote administration interfaces offered
        by MS-RPC (usually using a NT workstation).
@@ -5006,7 +5006,7 @@ printer name (S)
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>printer name</code></em> = <code class="literal">laserwriter</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="printing (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id331380"></a>
+</p></dd></dl></div></div><div class="section" title="printing (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id331381"></a>
 
 printing (S)
 </h3></div></div></div><a class="indexterm" name="id331382"></a><a name="PRINTING"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameters controls how printer status  information is
@@ -5026,10 +5026,10 @@ printing (S)
     [printers]</a> section.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>printing</code></em> = <code class="literal">Depends on the operating system, see
 <code class="literal">testparm -v.</code></code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="printjob username (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id331526"></a>
+</p></dd></dl></div></div><div class="section" title="printjob username (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id331527"></a>
 
 printjob username (S)
-</h3></div></div></div><a class="indexterm" name="id331527"></a><a name="PRINTJOBUSERNAME"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies which user information will be 
+</h3></div></div></div><a class="indexterm" name="id331528"></a><a name="PRINTJOBUSERNAME"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies which user information will be 
     passed to the printing system. Usually, the username is sent,
     but in some cases, e.g. the domain prefix is useful, too.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>printjob username</code></em> = <code class="literal">%U</code>
 </em></span>
@@ -5105,10 +5105,10 @@ queuepause command (S)
     path in the command as the PATH may not be available to the 
        server.</p><p><span class="emphasis"><em>No default</em></span></p><p>Example: <span class="emphasis"><em><em class="parameter"><code>queuepause command</code></em> = <code class="literal">disable %p</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="queueresume command (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id331831"></a>
+</p></dd></dl></div></div><div class="section" title="queueresume command (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id331832"></a>
 
 queueresume command (S)
-</h3></div></div></div><a class="indexterm" name="id331832"></a><a name="QUEUERESUMECOMMAND"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies the command to be 
+</h3></div></div></div><a class="indexterm" name="id331833"></a><a name="QUEUERESUMECOMMAND"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies the command to be 
     executed on the server host in order to resume the printer queue. It 
     is the command to undo the behavior that is caused by the 
     previous parameter (<a class="link" href="smb.conf.5.html#QUEUEPAUSECOMMAND" target="_top">queuepause command</a>).</p><p>This command should be a program or script which takes 
@@ -5123,10 +5123,10 @@ queueresume command (S)
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>queueresume command</code></em> = <code class="literal">enable %p</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="read list (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id331925"></a>
+</p></dd></dl></div></div><div class="section" title="read list (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id331926"></a>
 
 read list (S)
-</h3></div></div></div><a class="indexterm" name="id331926"></a><a name="READLIST"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id331927"></a><a name="READLIST"></a><div class="variablelist"><dl><dt></dt><dd><p>
        This is a list of users that are given read-only access to a service. If the connecting user is in this list
        then they will not be given write access, no matter what the <a class="link" href="smb.conf.5.html#READONLY" target="_top">read only</a> option is set
        to. The list can include group names using the syntax described in the <a class="link" href="smb.conf.5.html#INVALIDUSERS" target="_top">invalid users</a>
@@ -5148,7 +5148,7 @@ read only (S)
 </p></dd></dl></div></div><div class="section" title="read raw (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id332092"></a>
 
 read raw (G)
-</h3></div></div></div><a class="indexterm" name="id332093"></a><a name="READRAW"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter controls whether or not the server 
+</h3></div></div></div><a class="indexterm" name="id332094"></a><a name="READRAW"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter controls whether or not the server 
     will support the raw read SMB requests when transferring data 
     to clients.</p><p>If enabled, raw reads allow reads of 65535 bytes in 
     one packet. This typically provides a major performance benefit.
@@ -5290,10 +5290,10 @@ reset on zero vc (G)
 
        </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>reset on zero vc</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="restrict anonymous (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id332615"></a>
+</p></dd></dl></div></div><div class="section" title="restrict anonymous (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id332616"></a>
 
 restrict anonymous (G)
-</h3></div></div></div><a class="indexterm" name="id332616"></a><a name="RESTRICTANONYMOUS"></a><div class="variablelist"><dl><dt></dt><dd><p>The setting of this parameter determines whether user and
+</h3></div></div></div><a class="indexterm" name="id332617"></a><a name="RESTRICTANONYMOUS"></a><div class="variablelist"><dl><dt></dt><dd><p>The setting of this parameter determines whether user and
     group list information is returned for an anonymous connection.
     and mirrors the effects of the
 </p><pre class="programlisting">
@@ -5558,10 +5558,10 @@ send spnego principal (G)
     </p><p>Note that Windows XP SP2 and later versions already ignored
     this value in all circumstances. </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>send spnego principal</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="server schannel (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id334053"></a>
+</p></dd></dl></div></div><div class="section" title="server schannel (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id334054"></a>
 
 server schannel (G)
-</h3></div></div></div><a class="indexterm" name="id334054"></a><a name="SERVERSCHANNEL"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id334055"></a><a name="SERVERSCHANNEL"></a><div class="variablelist"><dl><dt></dt><dd><p>
        This controls whether the server offers or even demands the use of the netlogon schannel.
        <a class="link" href="smb.conf.5.html#SERVERSCHANNEL" target="_top">server schannel = no</a> does not offer the schannel, <a class="link" href="smb.conf.5.html#SERVERSCHANNEL" target="_top">server schannel = auto</a> offers the schannel but does not enforce it, and <a class="link" href="smb.conf.5.html#SERVERSCHANNEL" target="_top">server schannel = yes</a> denies access if the client is not able to speak netlogon schannel.
        This is only the case for Windows NT4 before SP4.
@@ -5585,7 +5585,7 @@ server signing (G)
 </p></dd></dl></div></div><div class="section" title="server string (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id334218"></a>
 
 server string (G)
-</h3></div></div></div><a class="indexterm" name="id334219"></a><a name="SERVERSTRING"></a><div class="variablelist"><dl><dt></dt><dd><p>This controls what string will show up in the printer comment box in print 
+</h3></div></div></div><a class="indexterm" name="id334220"></a><a name="SERVERSTRING"></a><div class="variablelist"><dl><dt></dt><dd><p>This controls what string will show up in the printer comment box in print 
         manager and next to the IPC connection in <code class="literal">net view</code>. It 
         can be any string that you wish to show to your users.</p><p>It also sets what will appear in browse lists next 
        to the machine name.</p><p>A <em class="parameter"><code>%v</code></em> will be replaced with the Samba 
@@ -5606,7 +5606,7 @@ set directory (S)
        for details.
        </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>set directory</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="set primary group script (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id334362"></a>
+</p></dd></dl></div></div><div class="section" title="set primary group script (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id334363"></a>
 
 set primary group script (G)
 </h3></div></div></div><a class="indexterm" name="id334364"></a><a name="SETPRIMARYGROUPSCRIPT"></a><div class="variablelist"><dl><dt></dt><dd><p>Thanks to the Posix subsystem in NT a Windows User has a
@@ -5634,10 +5634,10 @@ set quota command (G)
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>set quota command</code></em> = <code class="literal">/usr/local/sbin/set_quota</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="share:fake_fscaps (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id334593"></a>
+</p></dd></dl></div></div><div class="section" title="share:fake_fscaps (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id334594"></a>
 
 share:fake_fscaps (G)
-</h3></div></div></div><a class="indexterm" name="id334594"></a><a name="SHARE:FAKE_FSCAPS"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id334595"></a><a name="SHARE:FAKE_FSCAPS"></a><div class="variablelist"><dl><dt></dt><dd><p>
        This is needed to support some special application that makes
        QFSINFO calls to check whether we set the SPARSE_FILES bit
        (0x40). If this bit is not set that particular application
@@ -5696,7 +5696,7 @@ show add printer wizard (G)
 </p></dd></dl></div></div><div class="section" title="shutdown script (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id334866"></a>
 
 shutdown script (G)
-</h3></div></div></div><a class="indexterm" name="id334867"></a><a name="SHUTDOWNSCRIPT"></a><div class="variablelist"><dl><dt></dt><dd><p>This a full path name to a script called by 
+</h3></div></div></div><a class="indexterm" name="id334868"></a><a name="SHUTDOWNSCRIPT"></a><div class="variablelist"><dl><dt></dt><dd><p>This a full path name to a script called by 
         <a class="citerefentry" href="smbd.8.html"><span class="citerefentry"><span class="refentrytitle">smbd</span>(8)</span></a> that should 
        start a shutdown procedure.</p><p>If the connected user posseses the <code class="constant">SeRemoteShutdownPrivilege</code>,
        right, this command will be run as root.</p><p>The %z %t %r %f variables are expanded as follows:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><em class="parameter"><code>%z</code></em> will be substituted with the
@@ -5913,10 +5913,10 @@ strict allocate (S)
     files. Examples are ext3, ZFS, HFS+ and most others, so be aware if you
     activate this setting on those filesystems.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>strict allocate</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="strict locking (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id335993"></a>
+</p></dd></dl></div></div><div class="section" title="strict locking (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id335994"></a>
 
 strict locking (S)
-</h3></div></div></div><a class="indexterm" name="id335994"></a><a name="STRICTLOCKING"></a><div class="variablelist"><dl><dt></dt><dd><p>
+</h3></div></div></div><a class="indexterm" name="id335995"></a><a name="STRICTLOCKING"></a><div class="variablelist"><dl><dt></dt><dd><p>
        This is an enumerated type that controls the handling of file locking in the server. When this is set to <code class="constant">yes</code>,
        the server will check every read and write access for file locks, and deny access if locks exist. This can be slow on 
        some systems.
@@ -5979,7 +5979,7 @@ sync always (S)
     <code class="constant">yes</code> in order for this parameter to have 
     any effect.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>sync always</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="syslog only (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id336270"></a>
+</p></dd></dl></div></div><div class="section" title="syslog only (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id336271"></a>
 
 syslog only (G)
 </h3></div></div></div><a class="indexterm" name="id336272"></a><a name="SYSLOGONLY"></a><div class="variablelist"><dl><dt></dt><dd><p>
@@ -6259,7 +6259,7 @@ username map = /usr/local/samba/lib/users.map
 </h3></div></div></div><a class="indexterm" name="id337403"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#USERNAME">username</a>.</p></dd></dl></div></div><div class="section" title="users"><div class="titlepage"><div><div><h3 class="title"><a name="id337433"></a>
 
 <a name="USERS"></a>users
-</h3></div></div></div><a class="indexterm" name="id337434"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#USERNAME">username</a>.</p></dd></dl></div></div><div class="section" title="username (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id337464"></a>
+</h3></div></div></div><a class="indexterm" name="id337434"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#USERNAME">username</a>.</p></dd></dl></div></div><div class="section" title="username (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id337465"></a>
 
 username (S)
 </h3></div></div></div><a class="indexterm" name="id337466"></a><a name="USERNAME"></a><div class="variablelist"><dl><dt></dt><dd><p>Multiple users may be specified in a comma-delimited 
@@ -6552,7 +6552,7 @@ veto oplock files = /.*SEM/
        </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>veto oplock files</code></em> = <code class="literal">
 # No files are vetoed for oplock grants</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="vfs object"><div class="titlepage"><div><div><h3 class="title"><a name="id338566"></a>
+</p></dd></dl></div></div><div class="section" title="vfs object"><div class="titlepage"><div><div><h3 class="title"><a name="id338567"></a>
 
 <a name="VFSOBJECT"></a>vfs object
 </h3></div></div></div><a class="indexterm" name="id338568"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter is a synonym for <a class="link" href="#VFSOBJECTS">vfs objects</a>.</p></dd></dl></div></div><div class="section" title="vfs objects (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id338598"></a>
@@ -6568,7 +6568,7 @@ vfs objects (S)
 </p></dd></dl></div></div><div class="section" title="volume (S)"><div class="titlepage"><div><div><h3 class="title"><a name="id338656"></a>
 
 volume (S)
-</h3></div></div></div><a class="indexterm" name="id338657"></a><a name="VOLUME"></a><div class="variablelist"><dl><dt></dt><dd><p>This allows you to override the volume label 
+</h3></div></div></div><a class="indexterm" name="id338658"></a><a name="VOLUME"></a><div class="variablelist"><dl><dt></dt><dd><p>This allows you to override the volume label 
        returned for a share. Useful for CDROMs with installation programs 
        that insist on a particular volume label.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>volume</code></em> = <code class="literal">
 # the name of the share</code>
@@ -6592,7 +6592,7 @@ wide links (S)
        if you wish to change this coupling between the two parameters.
        </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>wide links</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="winbind cache time (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id338772"></a>
+</p></dd></dl></div></div><div class="section" title="winbind cache time (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id338773"></a>
 
 winbind cache time (G)
 </h3></div></div></div><a class="indexterm" name="id338774"></a><a name="WINBINDCACHETIME"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies the number of 
@@ -6767,7 +6767,7 @@ winbind rpc only (G)
 </p></dd></dl></div></div><div class="section" title="winbind separator (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id339662"></a>
 
 winbind separator (G)
-</h3></div></div></div><a class="indexterm" name="id339663"></a><a name="WINBINDSEPARATOR"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter allows an admin to define the character 
+</h3></div></div></div><a class="indexterm" name="id339664"></a><a name="WINBINDSEPARATOR"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter allows an admin to define the character 
        used when listing a username of the form of <em class="replaceable"><code>DOMAIN
        </code></em>\<em class="replaceable"><code>user</code></em>.  This parameter 
        is only applicable when using the <code class="filename">pam_winbind.so</code>
@@ -6792,7 +6792,7 @@ winbind trusted domains only (G)
        Refer to the <a class="citerefentry" href="idmap_nss.8.html"><span class="citerefentry"><span class="refentrytitle">idmap_nss</span>(8)</span></a> man page for more information.
        </p><p>Default: <span class="emphasis"><em><em class="parameter"><code>winbind trusted domains only</code></em> = <code class="literal">no</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="winbind use default domain (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id339806"></a>
+</p></dd></dl></div></div><div class="section" title="winbind use default domain (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id339807"></a>
 
 winbind use default domain (G)
 </h3></div></div></div><a class="indexterm" name="id339808"></a><a name="WINBINDUSEDEFAULTDOMAIN"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter specifies whether the
@@ -6832,10 +6832,10 @@ wins hook (G)
                        addresses currently registered for that name. If this list is 
                        empty then the name should be deleted.</p></li></ul></div><p>An example script that calls the BIND dynamic DNS update 
        program <code class="literal">nsupdate</code> is provided in the examples 
-       directory of the Samba source code. </p><p><span class="emphasis"><em>No default</em></span></p></dd></dl></div></div><div class="section" title="wins proxy (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id339975"></a>
+       directory of the Samba source code. </p><p><span class="emphasis"><em>No default</em></span></p></dd></dl></div></div><div class="section" title="wins proxy (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id339976"></a>
 
 wins proxy (G)
-</h3></div></div></div><a class="indexterm" name="id339976"></a><a name="WINSPROXY"></a><div class="variablelist"><dl><dt></dt><dd><p>This is a boolean that controls if <a class="citerefentry" href="nmbd.8.html"><span class="citerefentry"><span class="refentrytitle">nmbd</span>(8)</span></a> will respond to broadcast name 
+</h3></div></div></div><a class="indexterm" name="id339977"></a><a name="WINSPROXY"></a><div class="variablelist"><dl><dt></dt><dd><p>This is a boolean that controls if <a class="citerefentry" href="nmbd.8.html"><span class="citerefentry"><span class="refentrytitle">nmbd</span>(8)</span></a> will respond to broadcast name 
        queries on behalf of  other hosts. You may need to set this 
        to <code class="constant">yes</code> for some older clients.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>wins proxy</code></em> = <code class="literal">no</code>
 </em></span>
@@ -6861,10 +6861,10 @@ wins server (G)
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>wins server</code></em> = <code class="literal">192.9.200.1 192.168.2.61</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="wins support (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id340131"></a>
+</p></dd></dl></div></div><div class="section" title="wins support (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id340132"></a>
 
 wins support (G)
-</h3></div></div></div><a class="indexterm" name="id340132"></a><a name="WINSSUPPORT"></a><div class="variablelist"><dl><dt></dt><dd><p>This boolean controls if the <a class="citerefentry" href="nmbd.8.html"><span class="citerefentry"><span class="refentrytitle">nmbd</span>(8)</span></a> process in Samba will act as a WINS server. You should 
+</h3></div></div></div><a class="indexterm" name="id340133"></a><a name="WINSSUPPORT"></a><div class="variablelist"><dl><dt></dt><dd><p>This boolean controls if the <a class="citerefentry" href="nmbd.8.html"><span class="citerefentry"><span class="refentrytitle">nmbd</span>(8)</span></a> process in Samba will act as a WINS server. You should 
        not set this to <code class="constant">yes</code> unless you have a multi-subnetted network and 
        you wish a particular <code class="literal">nmbd</code> to be your WINS server. 
        Note that you should <span class="emphasis"><em>NEVER</em></span> set this to <code class="constant">yes</code>
@@ -6928,10 +6928,10 @@ write list (S)
 </em></span>
 </p><p>Example: <span class="emphasis"><em><em class="parameter"><code>write list</code></em> = <code class="literal">admin, root, @staff</code>
 </em></span>
-</p></dd></dl></div></div><div class="section" title="write raw (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id340513"></a>
+</p></dd></dl></div></div><div class="section" title="write raw (G)"><div class="titlepage"><div><div><h3 class="title"><a name="id340514"></a>
 
 write raw (G)
-</h3></div></div></div><a class="indexterm" name="id340514"></a><a name="WRITERAW"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter controls whether or not the server 
+</h3></div></div></div><a class="indexterm" name="id340515"></a><a name="WRITERAW"></a><div class="variablelist"><dl><dt></dt><dd><p>This parameter controls whether or not the server 
     will support raw write SMB's when transferring data from clients. 
     You should never need to change this parameter.</p><p>Default: <span class="emphasis"><em><em class="parameter"><code>write raw</code></em> = <code class="literal">yes</code>
 </em></span>
index 6ca98c62e0b040182103ff96db0275e764e89465..b90744a3f30884faea0ab430818366fa10743207 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: eventlogadm
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "EVENTLOGADM" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "EVENTLOGADM" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index d4ed3b780c303bcdacea0f9b29b5b1ff5e4e982d..131679f994a7540b986e684f5816d23375826624 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: findsmb
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: User Commands
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "FINDSMB" "1" "06/22/2012" "Samba 3\&.6" "User Commands"
+.TH "FINDSMB" "1" "07/30/2012" "Samba 3\&.6" "User Commands"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index 867b31bbe72ca944244a51f6c1fba405f10ef0a2..afa3bb98361b50f66bf45c6bc0c7b3843f919666 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: idmap_ad
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "IDMAP_AD" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "IDMAP_AD" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index c762c0ec8ef53e2bb003ebfceed5d90051bf5641..3a57fa8fc676ef5d5232513d23f6a8115d18d1a6 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: idmap_adex
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "IDMAP_ADEX" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "IDMAP_ADEX" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index 829ca5e878bb872ee02fdf6af5464ed29b5ced28..a8664d3fe54efac9d532d9628fa70cd8f16d5f98 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: idmap_autorid
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "IDMAP_AUTORID" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "IDMAP_AUTORID" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index 6e33e5b7553a6d91acc063ee3cea84025b2d6ee2..9ffef59984af81be348fd653bedaeea9e5be067b 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: idmap_hash
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "IDMAP_HASH" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "IDMAP_HASH" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index 1f7618ba46d6c5e307e411fe51d72e2f67157f4f..4f7e80fadb4a1df62ce3863b1f66e64fbd9930fd 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: idmap_ldap
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "IDMAP_LDAP" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "IDMAP_LDAP" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index f2ce6ff6842502b06d7515118b62d573a661e453..464eeb1f3445e9e0f390ff2e13aa97ee49a9357c 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: idmap_nss
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "IDMAP_NSS" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "IDMAP_NSS" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index c8a8dc793a2436f0457b1060f2d977b3a9dfba82..370c1e9f139b72281b39e79fa6b9bc8f3fc60692 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: idmap_rid
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "IDMAP_RID" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "IDMAP_RID" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index 1aa4eff2133e219979e00db75a59b8846c6475bf..b03c50d4673b4943fb48349ef959fdc5dd8fa2fa 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: idmap_tdb
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "IDMAP_TDB" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "IDMAP_TDB" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index f439a7785ca6f7fb15d3a6316fb14ee1be677cd2..56ca9c655a44fff13183d2e6df86f53eb4331af2 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: idmap_tdb2
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "IDMAP_TDB2" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "IDMAP_TDB2" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index 8727c56e6913c9b222fd79c99f4ba0c626237f03..60c7ac0435796caf4d4c6afe41d4a45283dcb550 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: libsmbclient
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: 7
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "LIBSMBCLIENT" "7" "06/22/2012" "Samba 3\&.6" "7"
+.TH "LIBSMBCLIENT" "7" "07/30/2012" "Samba 3\&.6" "7"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index bd56883ae2509456922e3bb1ed70bc47e99e0ab7..4f10d9a66788184f534c3f7a583b02b15e0b2f9d 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: lmhosts
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: File Formats and Conventions
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "LMHOSTS" "5" "06/22/2012" "Samba 3\&.6" "File Formats and Conventions"
+.TH "LMHOSTS" "5" "07/30/2012" "Samba 3\&.6" "File Formats and Conventions"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index 399eb18515ae5307947e415e0f686e8771126c6f..1bd0d05ec006163b9c35993b031cce84de5cac91 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: log2pcap
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: User Commands
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "LOG2PCAP" "1" "06/22/2012" "Samba 3\&.6" "User Commands"
+.TH "LOG2PCAP" "1" "07/30/2012" "Samba 3\&.6" "User Commands"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index 7f59a3d5f75ba2a6c5f2736d1f50f0430b3377cc..08911c2073eee5e1c2040c12442ab1634c0cc747 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: net
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "NET" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "NET" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index d47d93faba94393ab10642989c40116863da20ff..0155a79c802a1d505189db2803bc420654641116 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: nmbd
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "NMBD" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "NMBD" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index 0459d4f4d7cccf25a64e5d1ac3a71705a6f7b0b6..2c16824771d9aec74f694614a4dbbd6ac36beefb 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: nmblookup
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: User Commands
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "NMBLOOKUP" "1" "06/22/2012" "Samba 3\&.6" "User Commands"
+.TH "NMBLOOKUP" "1" "07/30/2012" "Samba 3\&.6" "User Commands"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index 288330998d3c7f34935db4100b6fdd1a0899b2e6..1040595b5074dedb86ce5f2019fb70c92a09beba 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: ntlm_auth
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: User Commands
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "NTLM_AUTH" "1" "06/22/2012" "Samba 3\&.6" "User Commands"
+.TH "NTLM_AUTH" "1" "07/30/2012" "Samba 3\&.6" "User Commands"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index e3e75ad1f47d4ee4167365ee95cbd2f3cb93290e..7106ed1a8ef487af7ba623f8cb0719b9b0cf78c6 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: pam_winbind
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: 8
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "PAM_WINBIND" "8" "06/22/2012" "Samba 3\&.6" "8"
+.TH "PAM_WINBIND" "8" "07/30/2012" "Samba 3\&.6" "8"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index fe7e904db4b758a79916328705d7eda6c889031e..a5504b093748ae38e6a0a340daba8bb6b91dd71e 100644 (file)
@@ -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: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: 5
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "PAM_WINBIND\&.CONF" "5" "06/22/2012" "Samba 3\&.6" "5"
+.TH "PAM_WINBIND\&.CONF" "5" "07/30/2012" "Samba 3\&.6" "5"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index 3b35814eecac2fd9e02bbd94c5d928286903ef6f..442ea209501de0257a80dd30398b9eb6fa27ab9f 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: pdbedit
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "PDBEDIT" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "PDBEDIT" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index e3f315f08f9fd7b90b18da79590dfafde49e91dc..413298ba6308312601dfd4f31940dbc09204c418 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: profiles
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: User Commands
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "PROFILES" "1" "06/22/2012" "Samba 3\&.6" "User Commands"
+.TH "PROFILES" "1" "07/30/2012" "Samba 3\&.6" "User Commands"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index 92508ff659654452a82edf525015c9ffcc141d08..fbfd1510faf45f62396f1d4ef477383dcac1cd8e 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: rpcclient
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: User Commands
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "RPCCLIENT" "1" "06/22/2012" "Samba 3\&.6" "User Commands"
+.TH "RPCCLIENT" "1" "07/30/2012" "Samba 3\&.6" "User Commands"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index c8480f702a977dbfb3b2d49cebae5da5048c2bd7..470ca48bb8c28e3afd09517099474ba543b58e31 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: samba
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: Miscellanea
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "SAMBA" "7" "06/22/2012" "Samba 3\&.6" "Miscellanea"
+.TH "SAMBA" "7" "07/30/2012" "Samba 3\&.6" "Miscellanea"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index 0c69d5767da963f79482de8c68ffe99d0590fb1b..05034f724e2e79d5929f8325a302399d84352f1e 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: sharesec
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: User Commands
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "SHARESEC" "1" "06/22/2012" "Samba 3\&.6" "User Commands"
+.TH "SHARESEC" "1" "07/30/2012" "Samba 3\&.6" "User Commands"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index 4f83dedc4374bd669a14206f52bb4e64154182da..6e046d77556c15fc7de28cf148cc9a90298318e4 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: smb.conf
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: File Formats and Conventions
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "SMB\&.CONF" "5" "06/22/2012" "Samba 3\&.6" "File Formats and Conventions"
+.TH "SMB\&.CONF" "5" "07/30/2012" "Samba 3\&.6" "File Formats and Conventions"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
@@ -1688,7 +1688,7 @@ See the discussion in the section
 \m[blue]\fBname mangling\fR\m[]\&.
 .sp
 Default:
-\fI\fIcase sensitive\fR\fR\fI = \fR\fIno\fR\fI \fR
+\fI\fIcase sensitive\fR\fR\fI = \fR\fIauto\fR\fI \fR
 .RE
 
 change notify (S)
index 20ae9f7b98f78b83c6a72d33682f5b632159710f..3a0d717c20939b1b37dc918029dbd32112c8d135 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: smbcacls
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: User Commands
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "SMBCACLS" "1" "06/22/2012" "Samba 3\&.6" "User Commands"
+.TH "SMBCACLS" "1" "07/30/2012" "Samba 3\&.6" "User Commands"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index c8cc664d7eeb3a13f7812169cec92918765ca838..85a61e9745553f8a2fe2df9acd612c78d8fd516d 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: smbclient
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: User Commands
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "SMBCLIENT" "1" "06/22/2012" "Samba 3\&.6" "User Commands"
+.TH "SMBCLIENT" "1" "07/30/2012" "Samba 3\&.6" "User Commands"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index eb2f74c2d5d09b9e4ed304790a04946fbf49183f..3c01887d9fd3f3789cdd09e28f50fe7cdec1ff70 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: smbcontrol
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: User Commands
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "SMBCONTROL" "1" "06/22/2012" "Samba 3\&.6" "User Commands"
+.TH "SMBCONTROL" "1" "07/30/2012" "Samba 3\&.6" "User Commands"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index 618ccb07a213efee98d0f9e9e5d2b9fc55e68f0a..91c5111427f9ce8e90529d21079b87c71c6f6089 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: smbcquotas
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: User Commands
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "SMBCQUOTAS" "1" "06/22/2012" "Samba 3\&.6" "User Commands"
+.TH "SMBCQUOTAS" "1" "07/30/2012" "Samba 3\&.6" "User Commands"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index 7b7597820e8b5abb002f35316c736f13d99df336..d3a0f8206d6b089dd4b0782cbfe6827159e24450 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: smbd
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "SMBD" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "SMBD" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index 674dd364a4a7db6bbc3f1141202d4aea5f04d340..6e032abb91df74d237ef074ac70025e45d1c31ac 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: smbget
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: User Commands
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "SMBGET" "1" "06/22/2012" "Samba 3\&.6" "User Commands"
+.TH "SMBGET" "1" "07/30/2012" "Samba 3\&.6" "User Commands"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index a3aaa1b86848845f341528eb4f1686953e45985b..e0cf7a46594492956bf87eafe6cfd8ac78375849 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: smbgetrc
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: File Formats and Conventions
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "SMBGETRC" "5" "06/22/2012" "Samba 3\&.6" "File Formats and Conventions"
+.TH "SMBGETRC" "5" "07/30/2012" "Samba 3\&.6" "File Formats and Conventions"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index c90bf3d8fe3f69831ad39518a05f7852b329b305..da1fd39f8ddb0a5978b4163cc98861f66ff07b38 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: smbpasswd
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: File Formats and Conventions
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "SMBPASSWD" "5" "06/22/2012" "Samba 3\&.6" "File Formats and Conventions"
+.TH "SMBPASSWD" "5" "07/30/2012" "Samba 3\&.6" "File Formats and Conventions"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index d4de65d35ba369e2a5d1354db74e5a4518f19c89..431de065a77b962abf5955c1787c044e05682e05 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: smbpasswd
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "SMBPASSWD" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "SMBPASSWD" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index 9b8cb7ccebc968fbff1a87e90c49139b359dc70f..1d9313e2990729a29b291875098ecceaec5b6178 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: smbspool
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "SMBSPOOL" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "SMBSPOOL" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index 480433ac5ff3c249b053d741674a5f1da577479c..79f72f6a6d2b222343f095afe01db442504a44e2 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: smbstatus
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: User Commands
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "SMBSTATUS" "1" "06/22/2012" "Samba 3\&.6" "User Commands"
+.TH "SMBSTATUS" "1" "07/30/2012" "Samba 3\&.6" "User Commands"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index 3cbdffaa897d066df2ae1de81541dc6ed7e965ea..2dbb14b5d7bb66daab9ca797aac0e68dab774190 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: smbta-util
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "SMBTA\-UTIL" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "SMBTA\-UTIL" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index f3abb9f180b5469154e5656e3ab94d8cd846dd24..955870c8108bdfbed8ee5ad14d1fa29f242e77bb 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: smbtar
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: User Commands
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "SMBTAR" "1" "06/22/2012" "Samba 3\&.6" "User Commands"
+.TH "SMBTAR" "1" "07/30/2012" "Samba 3\&.6" "User Commands"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index 38a440ec43c1e747211cd7f2638ada0561bb3afc..ab8e725957ba9115f64e06f0ce6aada13cf5a3ce 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: smbtree
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: User Commands
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "SMBTREE" "1" "06/22/2012" "Samba 3\&.6" "User Commands"
+.TH "SMBTREE" "1" "07/30/2012" "Samba 3\&.6" "User Commands"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index 581ef2380f87145ef2247a1cb82698ab05074b68..bd6da0cd2198b9604ee0f7d91d74055a2bb74381 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: swat
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "SWAT" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "SWAT" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index 1b56ca0b74cc6fafece83ef6d4738cfe4b1fd3d9..a8ed1baf1ebec6b1b9039837aae0dc7917773aae 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: tdbbackup
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "TDBBACKUP" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "TDBBACKUP" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index 72e8a2a2a9cb1a8c1c81e087dc7e980dfa5d0170..4195b6cd3fd94a2a82cec6a1611006a76df05d32 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: tdbdump
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "TDBDUMP" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "TDBDUMP" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index 6ae0915826dba1dcfcf391ffe66e7b91a920a152..172fb95b40875fafd412dab36a634474484bcdc4 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: tdbtool
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "TDBTOOL" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "TDBTOOL" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index 5eac54136e4ddee4b41cacd008dd70664d1edf7c..2da4f4fec874757698f23766627747eeaeeba7d2 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: testparm
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: User Commands
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "TESTPARM" "1" "06/22/2012" "Samba 3\&.6" "User Commands"
+.TH "TESTPARM" "1" "07/30/2012" "Samba 3\&.6" "User Commands"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index 269aa75f1b3f090720b99696248d83f39871b803..d77d9684bf3fa4028ccdf4a2cc8dea4538df31e2 100644 (file)
@@ -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: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_ACL_TDB" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_ACL_TDB" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index 4518a6136601d4f42c91cfd4e3f3e99d170d2817..31b94bebb7c3a439bfbee4b47202b363a6390d5a 100644 (file)
@@ -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: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_ACL_XATTR" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_ACL_XATTR" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index 9f3ac970e5b83dbc53a377efbdfc1db5aca68a49..b666c7673c10789f2f2df4fee01b0cc713e52532 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: vfs_aio_fork
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_AIO_FORK" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_AIO_FORK" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index 73029bf7c42d650edd470190b3ac1d84b4134547..73043e7c088f61900ea0eb88d0f0f592027b958c 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: vfs_aio_pthread
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_AIO_PTHREAD" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_AIO_PTHREAD" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index 713da35d9eff68620a31bba67da995202cd18590..cf482eb0a55ef3b56bdc093abb923be60b5abd91 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: vfs_audit
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_AUDIT" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_AUDIT" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index 2c4db1630ac7f4c83ef357d262b74d7049612605..abf6a991c2ba8d6940449a8a4311dc49a69581e3 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: vfs_cacheprime
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_CACHEPRIME" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_CACHEPRIME" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index de097db77e96490b23a3f3d9607a54df811e16f3..0b512396d6675cd40ed272b6403917bbdb59534a 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: vfs_cap
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_CAP" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_CAP" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index f4b0469a21d308cd177dc394da66c24b3cd6af52..2a1ad864c55562136f6fe8afa2b45c17be3ac516 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: vfs_catia
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_CATIA" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_CATIA" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index b11e183f6e69290d2b86fe0f157f524656e5b4e1..128250ceb2c5e0d6dfae045545fc125ad7c032ad 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: vfs_commit
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_COMMIT" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_COMMIT" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index ae23a081d2159eddeef9420d54fdcf9059e5c88a..07dd4c8f0e25a0dc46be80c54257917cf79ab4b4 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: vfs_crossrename
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_CROSSRENAME" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_CROSSRENAME" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index da7fed2d4425e0661c0e4c803cd40f380e0b7bcd..e4d326f14d0c7a6631c730d4603edc9438703ed9 100644 (file)
@@ -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: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_DEFAULT_QUOTA" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_DEFAULT_QUOTA" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index 14ef997168444521ddf48deb83242de2ce8bcaea..9c1a2941caac495806fb5f7d37c29c66cc63f5fe 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: vfs_dirsort
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_DIRSORT" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_DIRSORT" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index 93a133f5b16b096a9fa0b759017d52e513459582..d87eb21eb99a0365cad9f3acf4304325f25c8654 100644 (file)
@@ -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: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_EXTD_AUDIT" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_EXTD_AUDIT" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index 3f491de51c75f3b3fcfb4cc0ea87f3cbff992d40..e669098db8f32d6729246db400f4e265e737a931 100644 (file)
@@ -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: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_FAKE_PERMS" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_FAKE_PERMS" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index 547dbf975513969330f02c79dc9e489ce036071b..411febba54efcd17e897db4bbb1584bf1100441e 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: vfs_fileid
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_FILEID" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_FILEID" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index b5a7e7f900d6c46a1c73a7a64d12e42983b6b75e..e70c4a8ca9a3a6be5df7b562cd964bcde0f20057 100644 (file)
@@ -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: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_FULL_AUDIT" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_FULL_AUDIT" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index ef9584320ac1e5d95e12c9328c7ec34c9a2430e6..d76cd551e7719f7cbf46266e8a00ef46efa33e7f 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: vfs_gpfs
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_GPFS" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_GPFS" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index fb7bb321fb8b4f1e375690ba133c9cc702437bd8..b24f2cb49b91345ecc8cde4711174e3dac14caa3 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: vfs_netatalk
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_NETATALK" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_NETATALK" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index b679e76783e341588b6951400169bceb4dc77575..aad2d963131fa790283cd6b35a428a279e188d51 100644 (file)
@@ -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: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_NOTIFY_FAM" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_NOTIFY_FAM" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index 79f83e703a192e888fb592ece8c6291d5b72a94e..4a25e92b5e14b20d3a217e52b55170bf5599fa7d 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: vfs_prealloc
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_PREALLOC" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_PREALLOC" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index 4194213f9cdf99c6138887221ce1ed17e715d5b9..4c839dd6b8581206e863d57b82020d751669bcc6 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: vfs_preopen
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_PREOPEN" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_PREOPEN" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index a12ddd04705b50ae94cf848c1a6fe45cc9edf3a1..5fdab595d993692e0b4ba9c7022e39f02956f0d0 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: vfs_readahead
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_READAHEAD" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_READAHEAD" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index e124acfbaf0760b2466bff4d3349863b331d109f..7f046aaada1d9de1966c665cfc11e1018dd0d9d4 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: vfs_readonly
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_READONLY" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_READONLY" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index 9760aa97320097052e5fd656d58446de9695837e..cf3b7c78c6c63de0edcd78f4bab4518a92a0bae6 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: vfs_recycle
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_RECYCLE" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_RECYCLE" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index 37250524798b4b1bc00210fb765e2803ad90d0ee..20021266b1732d4293401c2275195973da9db1ae 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: vfs_scannedonly
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_SCANNEDONLY" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_SCANNEDONLY" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index cea9402185975aca287960b298c475cf777fd2a3..60d245de824ba757f1a5482c697ff4e44ed769c0 100644 (file)
@@ -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: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_SHADOW_COPY" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_SHADOW_COPY" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index a60be7684be0a4bacd27921a118457b1d40dcafb..b8568ee219183dc7023168e740c3f82b8d6f7ce5 100644 (file)
@@ -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: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_SHADOW_COPY2" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_SHADOW_COPY2" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index e141d9ebd1858464bde3278c2367c200625a3d57..befb43ea788266b1bf2da52bddf09fb0a831949a 100644 (file)
@@ -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: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "SMB_TRAFFIC_ANALYZER" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "SMB_TRAFFIC_ANALYZER" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index 0c097f1589004479871fbafec71ab8d696efa3e2..38061fd9bfe9177f7ae346d188bfde242424273f 100644 (file)
@@ -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: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_STREAMS_DEPOT" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_STREAMS_DEPOT" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index ce99c99f934815d4825842b25f51d1838053a665..885c0a509d6f748225e557bf413dc8f967d6dc9b 100644 (file)
@@ -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: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_STREAMS_XATTR" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_STREAMS_XATTR" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index 2205aa2aa0e6a15d3baa2b53b79932227d6d9c5a..a6d412e0a8e71c845faba61561fca51296bf588a 100644 (file)
@@ -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: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_TIME_AUDIT" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_TIME_AUDIT" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index f33ecfb4811a788f57560cf41c547c07c69011e9..25432f0db64419d363ef1c5c4b6656821c13233d 100644 (file)
@@ -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: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFS_XATTR_TDB" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "VFS_XATTR_TDB" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index 60021c7e0db8d66233d2aec37b1fce34aec9628b..ef8eb95e638c6477650d8f71a3e667b303ed4b7a 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: vfstest
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: User Commands
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "VFSTEST" "1" "06/22/2012" "Samba 3\&.6" "User Commands"
+.TH "VFSTEST" "1" "07/30/2012" "Samba 3\&.6" "User Commands"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index 885a1ab04ee7573f1baecee60c2b6491c2c99e72..8f58865fabb277b38983587f602341c1d8edc74a 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: wbinfo
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: User Commands
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "WBINFO" "1" "06/22/2012" "Samba 3\&.6" "User Commands"
+.TH "WBINFO" "1" "07/30/2012" "Samba 3\&.6" "User Commands"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index 5f43084e7d92c2b8829c93abf5d06119b3393d77..c68edd465894ad2307b2f977135863cce76cd284 100644 (file)
@@ -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: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: 7
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "WINBIND_KRB5_LOCATOR" "7" "06/22/2012" "Samba 3\&.6" "7"
+.TH "WINBIND_KRB5_LOCATOR" "7" "07/30/2012" "Samba 3\&.6" "7"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index 21460097b667d9742f92f9472cc8149b1c789ad6..85f873c07356b8fb12bbf48b2dab4441ff556ebe 100644 (file)
@@ -2,12 +2,12 @@
 .\"     Title: winbindd
 .\"    Author: [see the "AUTHOR" section]
 .\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 06/22/2012
+.\"      Date: 07/30/2012
 .\"    Manual: System Administration tools
 .\"    Source: Samba 3.6
 .\"  Language: English
 .\"
-.TH "WINBINDD" "8" "06/22/2012" "Samba 3\&.6" "System Administration tools"
+.TH "WINBINDD" "8" "07/30/2012" "Samba 3\&.6" "System Administration tools"
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
index cfbd428014baa8ae791e49517570dae077ab1045..2419bdb1ef1d8c7929c32b9aa3da016c167e2734 100644 (file)
@@ -36,7 +36,7 @@ _PUBLIC_ void hmac_md5_init_rfc2104(const uint8_t *key, int key_len, HMACMD5Cont
         /* if key is longer than 64 bytes reset it to key=MD5(key) */
         if (key_len > 64)
        {
-                struct MD5Context tctx;
+               MD5_CTX tctx;
 
                 MD5Init(&tctx);
                 MD5Update(&tctx, key, key_len);
@@ -91,7 +91,7 @@ _PUBLIC_ void hmac_md5_update(const uint8_t *text, int text_len, HMACMD5Context
 ***********************************************************************/
 _PUBLIC_ void hmac_md5_final(uint8_t *digest, HMACMD5Context *ctx)
 {
-        struct MD5Context ctx_o;
+       MD5_CTX ctx_o;
 
         MD5Final(digest, &ctx->ctx);          
 
index 91b8ca586c840cd3a07dc8f311b0c1ef845de4eb..1fc275016f1bdcbd9a202cab2f841e7175b12dde 100644 (file)
@@ -25,7 +25,7 @@
 
 typedef struct 
 {
-        struct MD5Context ctx;
+       MD5_CTX ctx;
         uint8_t k_ipad[65];    
         uint8_t k_opad[65];
 
index 4064d6f00396e82aae362978fcea68a01fd7f470..edddbac8f200765c6fb96e77fbed517f8a66b456 100644 (file)
@@ -5,15 +5,27 @@
 #define HEADER_MD5_H 
 #endif
 
+#ifdef HAVE_MD5_H
+/*
+ * Try to avoid clashes with Solaris MD5 implementation.
+ * ...where almost all implementations follows:
+ * "Schneier's Cryptography Classics Library"
+ */
+#include <md5.h>
+#else
+
 struct MD5Context {
        uint32_t buf[4];
        uint32_t bits[2];
        uint8_t in[64];
 };
+typedef struct MD5Context MD5_CTX;
 
 void MD5Init(struct MD5Context *context);
 void MD5Update(struct MD5Context *context, const uint8_t *buf,
               size_t len);
 void MD5Final(uint8_t digest[16], struct MD5Context *context);
 
+#endif /* !HAVE_MD5_H */
+
 #endif /* !MD5_H */
index 0457d4d4ea4b18e947cd6db75760ba6a76e4049e..256ddfa66ca3ecbeac70638331926d674ba8e301 100644 (file)
@@ -63,7 +63,7 @@ bool torture_local_crypto_md5(struct torture_context *torture)
        };
 
        for (i=0; i < ARRAY_SIZE(testarray); i++) {
-               struct MD5Context ctx;
+               MD5_CTX ctx;
                uint8_t md5[16];
                int e;
 
index 81304764a8c5a49aaa8f6bb43b242df0969ddc0b..35158cac2e71e1c0a0df05e354255db688f3b9fb 100644 (file)
@@ -69,7 +69,7 @@ static void netlogon_creds_init_128bit(struct netlogon_creds_CredentialState *cr
 {
        unsigned char zero[4], tmp[16];
        HMACMD5Context ctx;
-       struct MD5Context md5;
+       MD5_CTX md5;
 
        ZERO_STRUCT(creds->session_key);
 
index 802ac402b4969fb861117db53c0b182661b47ad0..0a759a89c1f04c670c4dc1ef5462f4204c220830 100644 (file)
@@ -359,7 +359,7 @@ static NTSTATUS ntlmssp_server_preauth(struct ntlmssp_state *ntlmssp_state,
        */
        if (ntlmssp_state->neg_flags & NTLMSSP_NEGOTIATE_NTLM2) {
                if (ntlmssp_state->nt_resp.length == 24 && ntlmssp_state->lm_resp.length == 24) {
-                       struct MD5Context md5_session_nonce_ctx;
+                       MD5_CTX md5_session_nonce_ctx;
                        state->doing_ntlm2 = true;
 
                        memcpy(state->session_nonce, ntlmssp_state->internal_chal.data, 8);
index 42b459c6d47a0f0ee5b5d71b1d65e4e537f65794..454c448f09b2b36a4cef27309f1542cfb961330b 100644 (file)
@@ -51,7 +51,7 @@ static void calc_ntlmv2_key(uint8_t subkey[16],
                            DATA_BLOB session_key,
                            const char *constant)
 {
-       struct MD5Context ctx3;
+       MD5_CTX ctx3;
        MD5Init(&ctx3);
        MD5Update(&ctx3, session_key.data, session_key.length);
        MD5Update(&ctx3, (const uint8_t *)constant, strlen(constant)+1);
index eb605f4b07afaeee338aeeb4c445daaca7dd3e51..2d92283172e9de16a1aedc884475dba57ee9bdd8 100644 (file)
@@ -110,7 +110,7 @@ static void netsec_do_sign(struct schannel_state *state,
 {
        uint8_t packet_digest[16];
        static const uint8_t zeros[4];
-       struct MD5Context ctx;
+       MD5_CTX ctx;
 
        MD5Init(&ctx);
        MD5Update(&ctx, zeros, 4);
index f1451eaa1c0595811ae2da3f042b322970016839..ed1172b0478683590239a67ac4eb043992085999 100644 (file)
@@ -99,7 +99,7 @@ bool E_md4hash(const char *passwd, uint8_t p16[16])
 
 void E_md5hash(const uint8_t salt[16], const uint8_t nthash[16], uint8_t hash_out[16])
 {
-       struct MD5Context tctx;
+       MD5_CTX tctx;
        MD5Init(&tctx);
        MD5Update(&tctx, salt, 16);
        MD5Update(&tctx, nthash, 16);
@@ -623,7 +623,7 @@ bool decode_pw_buffer(TALLOC_CTX *ctx,
 
 void encode_or_decode_arc4_passwd_buffer(unsigned char pw_buf[532], const DATA_BLOB *psession_key)
 {
-       struct MD5Context tctx;
+       MD5_CTX tctx;
        unsigned char key_out[16];
 
        /* Confounder is last 16 bytes. */
@@ -703,7 +703,7 @@ void encode_wkssvc_join_password_buffer(TALLOC_CTX *mem_ctx,
                                        struct wkssvc_PasswordBuffer **pwd_buf)
 {
        uint8_t buffer[516];
-       struct MD5Context ctx;
+       MD5_CTX ctx;
        struct wkssvc_PasswordBuffer *my_pwd_buf = NULL;
        DATA_BLOB confounded_session_key;
        int confounder_len = 8;
@@ -741,7 +741,7 @@ WERROR decode_wkssvc_join_password_buffer(TALLOC_CTX *mem_ctx,
                                          char **pwd)
 {
        uint8_t buffer[516];
-       struct MD5Context ctx;
+       MD5_CTX ctx;
        size_t pwd_len;
 
        DATA_BLOB confounded_session_key;
index 6fff2fe5b1b2fadc88ee7e4a2cae47c5d2641f4b..00b8db8abc00c4fe15a5aa2b69cc3ff841da60a2 100644 (file)
@@ -39,7 +39,7 @@ WERROR drsuapi_decrypt_attribute_value(TALLOC_CTX *mem_ctx,
        DATA_BLOB confounder;
        DATA_BLOB enc_buffer;
 
-       struct MD5Context md5;
+       MD5_CTX md5;
        uint8_t _enc_key[16];
        DATA_BLOB enc_key;
 
@@ -198,7 +198,7 @@ static WERROR drsuapi_encrypt_attribute_value(TALLOC_CTX *mem_ctx,
        DATA_BLOB rid_crypt_out = data_blob(NULL, 0);
        DATA_BLOB confounder;
 
-       struct MD5Context md5;
+       MD5_CTX md5;
        uint8_t _enc_key[16];
        DATA_BLOB enc_key;
 
index 553402a4274fd581e5a48457d3722a4800acd8dd..91078bb2fc584ae783c10395bd38a4b014e6f673 100644 (file)
@@ -843,6 +843,7 @@ ADS_STATUS gp_get_machine_token(ADS_STRUCT *ads,
                                const char *dn,
                                struct security_token **token)
 {
+#ifdef HAVE_ADS
        struct security_token *ad_token = NULL;
        ADS_STATUS status;
 #if _SAMBA_BUILD_ == 4
@@ -851,9 +852,6 @@ ADS_STATUS gp_get_machine_token(ADS_STRUCT *ads,
        NTSTATUS ntstatus;
 #endif
 
-#ifndef HAVE_ADS
-       return ADS_ERROR_NT(NT_STATUS_NOT_SUPPORTED);
-#endif
        status = ads_get_sid_token(ads, mem_ctx, dn, &ad_token);
        if (!ADS_ERR_OK(status)) {
                return status;
@@ -869,4 +867,7 @@ ADS_STATUS gp_get_machine_token(ADS_STRUCT *ads,
        }
 #endif
        return ADS_SUCCESS;
+#else
+       return ADS_ERROR_NT(NT_STATUS_NOT_SUPPORTED);
+#endif
 }
index 909829170dcd47a299007a9458c3b6d21eefc19a..70135666724d9135e4d9ae547326fde5463e4a09 100644 (file)
@@ -26,7 +26,7 @@ interface ntprinting
                uint32 bottom;
        } ntprinting_form;
 
-       void decode_ntprinting_form(
+       [public] void decode_ntprinting_form(
                [in] ntprinting_form form
                );
 
@@ -46,7 +46,7 @@ interface ntprinting
                [flag(STR_UTF8|STR_NOTERM|NDR_REMAINING)] string_array dependent_files;
        } ntprinting_driver;
 
-       void decode_ntprinting_driver(
+       [public] void decode_ntprinting_driver(
                [in] ntprinting_driver driver
                );
 
@@ -146,7 +146,7 @@ interface ntprinting
                ntprinting_printer_data printer_data[count];
        } ntprinting_printer;
 
-       void decode_ntprinting_printer(
+       [public] void decode_ntprinting_printer(
                [in] ntprinting_printer printer
                );
 }
index b4443003d0613b7ea273cf756c995ae81c45479f..c7a2c110fe0daae4522ba138624b31e0f20150be 100644 (file)
@@ -1213,16 +1213,21 @@ _PUBLIC_ void ndr_print_DATA_BLOB(struct ndr_print *ndr, const char *name, DATA_
 
 
 /*
-  push a DATA_BLOB onto the wire. 
-*/
+ * Push a DATA_BLOB onto the wire.
+ * 1) When called with LIBNDR_FLAG_ALIGN* alignment flags set, push padding
+ *    bytes _only_. The length is determined by the alignment required and the
+ *    current ndr offset.
+ * 2) When called with the LIBNDR_FLAG_REMAINING flag, push the byte array to
+ *    the ndr buffer.
+ * 3) Otherwise, push a uint32 length _and_ a corresponding byte array to the
+ *    ndr buffer.
+ */
 _PUBLIC_ enum ndr_err_code ndr_push_DATA_BLOB(struct ndr_push *ndr, int ndr_flags, DATA_BLOB blob)
 {
        if (ndr->flags & LIBNDR_FLAG_REMAINING) {
                /* nothing to do */
-       } else if (ndr->flags & LIBNDR_ALIGN_FLAGS) {
-               if (ndr->flags & LIBNDR_FLAG_NOALIGN) {
-                       blob.length = 0;
-               } else if (ndr->flags & LIBNDR_FLAG_ALIGN2) {
+       } else if (ndr->flags & (LIBNDR_ALIGN_FLAGS & ~LIBNDR_FLAG_NOALIGN)) {
+               if (ndr->flags & LIBNDR_FLAG_ALIGN2) {
                        blob.length = NDR_ALIGN(ndr, 2);
                } else if (ndr->flags & LIBNDR_FLAG_ALIGN4) {
                        blob.length = NDR_ALIGN(ndr, 4);
@@ -1239,18 +1244,23 @@ _PUBLIC_ enum ndr_err_code ndr_push_DATA_BLOB(struct ndr_push *ndr, int ndr_flag
 }
 
 /*
-  pull a DATA_BLOB from the wire. 
-*/
+ * Pull a DATA_BLOB from the wire.
+ * 1) when called with LIBNDR_FLAG_ALIGN* alignment flags set, pull padding
+ *    bytes _only_. The length is determined by the alignment required and the
+ *    current ndr offset.
+ * 2) When called with the LIBNDR_FLAG_REMAINING flag, pull all remaining bytes
+ *    from the ndr buffer.
+ * 3) Otherwise, pull a uint32 length _and_ a corresponding byte array from the
+ *    ndr buffer.
+ */
 _PUBLIC_ enum ndr_err_code ndr_pull_DATA_BLOB(struct ndr_pull *ndr, int ndr_flags, DATA_BLOB *blob)
 {
        uint32_t length = 0;
 
        if (ndr->flags & LIBNDR_FLAG_REMAINING) {
                length = ndr->data_size - ndr->offset;
-       } else if (ndr->flags & LIBNDR_ALIGN_FLAGS) {
-               if (ndr->flags & LIBNDR_FLAG_NOALIGN) {
-                       length = 0;
-               } else if (ndr->flags & LIBNDR_FLAG_ALIGN2) {
+       } else if (ndr->flags & (LIBNDR_ALIGN_FLAGS & ~LIBNDR_FLAG_NOALIGN)) {
+               if (ndr->flags & LIBNDR_FLAG_ALIGN2) {
                        length = NDR_ALIGN(ndr, 2);
                } else if (ndr->flags & LIBNDR_FLAG_ALIGN4) {
                        length = NDR_ALIGN(ndr, 4);
index 87b743d3f8ee07864c159250c9efe51bdde301a5..76b296d169b68395bb972c0c0ae1ea8aab3e8ddd 100644 (file)
@@ -54,6 +54,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_ntprinting_printer(struct ndr_pull *ndr, int
                                uint32_t ptr = 0;
                                ptr = IVAL(ndr->data, ndr->offset);
                                if (ptr == 0) {
+                                       ndr->offset = ndr->offset + 4;
                                        break;
                                }
                                r->printer_data = talloc_realloc(ndr, r->printer_data, struct ntprinting_printer_data, r->count + 1);
index 6cacc79474cbf4ede80ad565728dcce9318e3308..955f368f46a5fa54f0883eb1022064de5b9b39bc 100644 (file)
@@ -5,7 +5,7 @@ Summary: Samba SMB client and server
 Vendor: Samba Team
 Packager: Samba Team <samba@samba.org>
 Name:         samba
-Version:      3.6.6
+Version:      3.6.7
 Release:      1GITHASH
 Epoch:        0
 License: GNU GPL version 3
index 1abaa101197e896bc47d46c69534ecc0e717eb1f..eb8183bbad84941283bb9108edcfd910dc3b9dd8 100644 (file)
@@ -20,7 +20,7 @@ SRCDIR=`rpm --eval %_sourcedir`
 
 USERID=`id -u`
 GRPID=`id -g`
-VERSION='3.6.6'
+VERSION='3.6.7'
 REVISION=''
 SPECFILE="samba.spec"
 RPMVER=`rpm --version | awk '{print $3}'`
index e6bcb4cd8670ea935f34bb5a8ad38d1beb4038e7..5f94ac689f4045da92a2d04d72f83856f5bd4eb1 100644 (file)
@@ -11,7 +11,7 @@ Summary: Samba SMB client and server
 Vendor: Samba Team
 Packager: Samba Team <samba@samba.org>
 Name:         samba
-Version:      3.6.6
+Version:      3.6.7
 Release:      1
 Epoch:        0
 License: GNU GPL version 3
index 1a7ad8a30691a6f1739da23415de0c04574db781..f4e857970f012ddc3e2e65dbddc235fa792a7515 100644 (file)
@@ -430,7 +430,7 @@ UTIL_OBJ = ../lib/util/rbtree.o ../lib/util/signal.o ../lib/util/time.o \
                   ../lib/util/blocking.o ../lib/util/rfc1738.o \
                   ../lib/util/select.o ../lib/util/util_pw.o
 
-CRYPTO_OBJ = ../lib/crypto/crc32.o ../lib/crypto/md5.o \
+CRYPTO_OBJ = ../lib/crypto/crc32.o @CRYPTO_MD5_OBJ@ \
                         ../lib/crypto/hmacmd5.o ../lib/crypto/arcfour.o \
                         ../lib/crypto/md4.o \
                         ../lib/crypto/sha256.o ../lib/crypto/hmacsha256.o \
index 640afeab763ef256caa9549dddba5d55e910fe7d..e8473bc4c2e7b6e5dd57e21f8cb3822dbfcc856b 100644 (file)
@@ -25,7 +25,7 @@
 ########################################################
 SAMBA_VERSION_MAJOR=3
 SAMBA_VERSION_MINOR=6
-SAMBA_VERSION_RELEASE=6
+SAMBA_VERSION_RELEASE=7
 
 ########################################################
 # Bug fix releases use a letter for the patch revision #
index b5d85a85c2cbdeab8bbf27688891e913479cc1da..0968442ce3480bcf70aa70753772c82f6e081e49 100755 (executable)
@@ -745,6 +745,7 @@ ONEFS_LIBS
 TERMLDFLAGS
 TERMLIBS
 CUPS_CONFIG
+CRYPTO_MD5_OBJ
 LIBREPLACE_LIBS
 LIBREPLACE_OBJS
 LIBDL
 done
 
 
+for ac_header in md5.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "md5.h" "ac_cv_header_md5_h" "$ac_includes_default"
+if test "x$ac_cv_header_md5_h" = x""yes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_MD5_H 1
+_ACEOF
+
+fi
+
+done
+
+if test x"$ac_cv_header_md5_h" = x"yes"; then
+
+$as_echo "#define HAVE_MD5_H 1" >>confdefs.h
+
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MD5Update in -lmd5" >&5
+$as_echo_n "checking for MD5Update in -lmd5... " >&6; }
+if test "${ac_cv_lib_md5_MD5Update+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lmd5  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* 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 MD5Update ();
+int
+main ()
+{
+return MD5Update ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_md5_MD5Update=yes
+else
+  ac_cv_lib_md5_MD5Update=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_md5_MD5Update" >&5
+$as_echo "$ac_cv_lib_md5_MD5Update" >&6; }
+if test "x$ac_cv_lib_md5_MD5Update" = x""yes; then :
+
+               LIBS="${LIBS} -lmd5"
+               CRYPTO_MD5_OBJ=
+
+$as_echo "#define HAVE_LIBMD5 1" >>confdefs.h
+
+else
+
+               CRYPTO_MD5_OBJ="../lib/crypto/md5.o"
+fi
+
+else
+       CRYPTO_MD5_OBJ="../lib/crypto/md5.o"
+fi
+
+
+
 for ac_header in rpcsvc/yp_prot.h
 do :
   ac_fn_c_check_header_compile "$LINENO" "rpcsvc/yp_prot.h" "ac_cv_header_rpcsvc_yp_prot_h" "
index d8d3a1fd850a22cf09613dfa3fe343d5a5aebb98..373396a3707fca9b59d081a3d00dbf1e11aa028d 100644 (file)
@@ -751,6 +751,25 @@ AC_CHECK_HEADERS(xfs/libxfs.h)
 AC_CHECK_HEADERS(netgroup.h)
 AC_CHECK_HEADERS(linux/falloc.h)
 
+dnl check for OS implementation of md5 conformant to rfc1321
+AC_CHECK_HEADERS(md5.h)
+if test x"$ac_cv_header_md5_h" = x"yes"; then
+       AC_DEFINE(HAVE_MD5_H, 1,
+               [Whether md5.h is available.])
+       AC_CHECK_LIB(md5, MD5Update,
+           [
+               LIBS="${LIBS} -lmd5"
+               CRYPTO_MD5_OBJ=
+               AC_DEFINE(HAVE_LIBMD5, 1,
+                   [Whether libmd5 conformant to rfc1321 is available.])],
+           [
+               CRYPTO_MD5_OBJ="../lib/crypto/md5.o"])
+else
+       CRYPTO_MD5_OBJ="../lib/crypto/md5.o"
+fi
+AC_SUBST(CRYPTO_MD5_OBJ)
+
+
 AC_CHECK_HEADERS(rpcsvc/yp_prot.h,,,[[
 #if HAVE_RPC_RPC_H
 #include <rpc/rpc.h>
index 235aedeb7246c3f1d858871a13dc9222a5e698d6..898b2aa3affef9ace8fc2c24926258772c79e719 100644 (file)
 /* Define to 1 if you have the `ldap' library (-lldap). */
 #undef HAVE_LIBLDAP
 
+/* Whether libmd5 conformant to rfc1321 is available. */
+#undef HAVE_LIBMD5
+
 /* Define to 1 if you have the `nscd' library (-lnscd). */
 #undef HAVE_LIBNSCD
 
 /* Whether the macro for makedev is available */
 #undef HAVE_MAKEDEV
 
+/* Whether md5.h is available. */
+#undef HAVE_MD5_H
+
 /* Define to 1 if you have the `memalign' function. */
 #undef HAVE_MEMALIGN
 
index d6595220730cb0b6e8576ca7db07ca38475d10cc..499f4688a58f5f497e989688f7970db9c9f1a08f 100644 (file)
 #define DEFAULT_SMB2_MAX_WRITE (64*1024)
 #define DEFAULT_SMB2_MAX_TRANSACT (64*1024)
 #define DEFAULT_SMB2_MAX_CREDITS 8192
-#define DEFAULT_SMB2_MAX_CREDIT_BITMAP_FACTOR 2
 
 #endif
index bba7d53a162847fe3b05b2f98a4b65b9c1d66ee3..c511fa2058df69487667353e6456132e69f18efd 100644 (file)
@@ -46,7 +46,7 @@ enum {
 };
 
 typedef struct _print_queue_struct {
-       int job;                /* normally the UNIX jobid -- see note in
+       int sysjob;             /* normally the UNIX jobid -- see note in
                                   printing.c:traverse_fn_delete() */
        int size;
        int page_count;
@@ -68,6 +68,7 @@ typedef struct {
 /* Information for print jobs */
 struct printjob {
        pid_t pid; /* which process launched the job */
+       uint32_t jobid; /* the spoolss print job identifier */
        int sysjob; /* the system (lp) job number */
        int fd; /* file descriptor of open file if open */
        time_t starttime; /* when the job started spooling */
@@ -100,7 +101,9 @@ struct printif
   int (*job_delete)(const char *sharename, const char *lprm_command, struct printjob *pjob);
   int (*job_pause)(int snum, struct printjob *pjob);
   int (*job_resume)(int snum, struct printjob *pjob);
-  int (*job_submit)(int snum, struct printjob *pjob);
+  int (*job_submit)(int snum, struct printjob *pjob,
+                   enum printing_types printing_type,
+                   char *lpq_command);
 };
 
 extern struct printif  generic_printif;
@@ -123,7 +126,7 @@ extern struct printif       iprint_printif;
 #ifndef PRINT_SPOOL_PREFIX
 #define PRINT_SPOOL_PREFIX "smbprn."
 #endif
-#define PRINT_DATABASE_VERSION 7
+#define PRINT_DATABASE_VERSION 8
 
 #ifdef AIX
 #define DEFAULT_PRINTING PRINT_AIX
@@ -194,8 +197,9 @@ uint32 sysjob_to_jobid(int unix_jobid);
 bool print_notify_register_pid(int snum);
 bool print_notify_deregister_pid(int snum);
 bool print_job_exists(const char* sharename, uint32 jobid);
-char *print_job_fname(const char* sharename, uint32 jobid);
-struct spoolss_DeviceMode *print_job_devmode(const char* sharename, uint32 jobid);
+struct spoolss_DeviceMode *print_job_devmode(TALLOC_CTX *mem_ctx,
+                                            const char *sharename,
+                                            uint32 jobid);
 bool print_job_set_name(struct tevent_context *ev,
                        struct messaging_context *msg_ctx,
                        const char *sharename, uint32 jobid, const char *name);
@@ -203,12 +207,12 @@ bool print_job_get_name(TALLOC_CTX *mem_ctx, const char *sharename, uint32_t job
 WERROR print_job_delete(const struct auth_serversupplied_info *server_info,
                        struct messaging_context *msg_ctx,
                        int snum, uint32_t jobid);
-bool print_job_pause(const struct auth_serversupplied_info *server_info,
+WERROR print_job_pause(const struct auth_serversupplied_info *server_info,
                     struct messaging_context *msg_ctx,
-                    int snum, uint32 jobid, WERROR *errcode);
-bool print_job_resume(const struct auth_serversupplied_info *server_info,
+                    int snum, uint32 jobid);
+WERROR print_job_resume(const struct auth_serversupplied_info *server_info,
                      struct messaging_context *msg_ctx,
-                     int snum, uint32 jobid, WERROR *errcode);
+                     int snum, uint32 jobid);
 ssize_t print_job_write(struct tevent_context *ev,
                        struct messaging_context *msg_ctx,
                        int snum, uint32 jobid, const char *buf, size_t size);
@@ -245,7 +249,6 @@ void printing_end(void);
 bool parse_lpq_entry(enum printing_types printing_type,char *line,
                     print_queue_struct *buf,
                     print_status_struct *status,bool first);
-uint32_t print_parse_jobid(const char *fname);
 
 /* The following definitions come from printing/printing_db.c  */
 
index e22fc9cd3d8437ba3967dfdfb5e4cf5dbe417eef..720f431cc73dac98272f79e26ba7a9f385a022e6 100644 (file)
@@ -809,8 +809,7 @@ NTSTATUS sid_array_from_info3(TALLOC_CTX *mem_ctx,
                              const struct netr_SamInfo3 *info3,
                              struct dom_sid **user_sids,
                              uint32_t *num_user_sids,
-                             bool include_user_group_rid,
-                             bool skip_ressource_groups);
+                             bool include_user_group_rid);
 
 /* The following definitions come from lib/util_sock.c  */
 
index cd3e7d831bcf6564e6deccab2cf19c71bff861f9..2a7dc6899ee21690590061011b222ff778411100 100644 (file)
@@ -1,8 +1,8 @@
 /* Autogenerated by script/mkversion.sh */
 #define SAMBA_VERSION_MAJOR 3
 #define SAMBA_VERSION_MINOR 6
-#define SAMBA_VERSION_RELEASE 6
-#define SAMBA_VERSION_OFFICIAL_STRING "3.6.6"
+#define SAMBA_VERSION_RELEASE 7
+#define SAMBA_VERSION_OFFICIAL_STRING "3.6.7"
 #ifdef SAMBA_VERSION_VENDOR_FUNCTION
 #  define SAMBA_VERSION_STRING SAMBA_VERSION_VENDOR_FUNCTION
 #else /* SAMBA_VERSION_VENDOR_FUNCTION */
index d7984ac99965fe0cb25f8879044998b2fc069c87..b90a6f972e2f48d0392fb2f90b27c8da62210e83 100644 (file)
@@ -334,7 +334,7 @@ int set_re_uid(void)
        uid_t uid = geteuid();
 
 #if USE_SETRESUID
-       setresuid(geteuid(), -1, -1);
+       setresuid(uid, uid, -1);
 #endif
 
 #if USE_SETREUID
index f080d3dfb0c3afa80375cfcf98a97fcb52255f96..f051b7a1ff547fd7aeaa0028d18c71c0d3d59cc1 100644 (file)
@@ -130,8 +130,7 @@ NTSTATUS sid_array_from_info3(TALLOC_CTX *mem_ctx,
                              const struct netr_SamInfo3 *info3,
                              struct dom_sid **user_sids,
                              uint32_t *num_user_sids,
-                             bool include_user_group_rid,
-                             bool skip_ressource_groups)
+                             bool include_user_group_rid)
 {
        NTSTATUS status;
        struct dom_sid sid;
@@ -191,12 +190,6 @@ NTSTATUS sid_array_from_info3(TALLOC_CTX *mem_ctx,
          */
 
        for (i = 0; i < info3->sidcount; i++) {
-
-               if (skip_ressource_groups &&
-                   (info3->sids[i].attributes & SE_GROUP_RESOURCE)) {
-                       continue;
-               }
-
                status = add_sid_to_array(mem_ctx, info3->sids[i].sid,
                                      &sid_array, &num_sids);
                if (!NT_STATUS_IS_OK(status)) {
index 28780a96c2eff9fe685b8f2453032348721a53d6..aafe65fc407c0f16838692e6d1e3a42cf8e054a1 100644 (file)
@@ -770,7 +770,7 @@ _PUBLIC_ void ndr_print_ntprinting_printer(struct ndr_print *ndr, const char *na
        }
 }
 
-static enum ndr_err_code ndr_push_decode_ntprinting_form(struct ndr_push *ndr, int flags, const struct decode_ntprinting_form *r)
+_PUBLIC_ enum ndr_err_code ndr_push_decode_ntprinting_form(struct ndr_push *ndr, int flags, const struct decode_ntprinting_form *r)
 {
        if (flags & NDR_IN) {
                NDR_CHECK(ndr_push_ntprinting_form(ndr, NDR_SCALARS, &r->in.form));
@@ -780,7 +780,7 @@ static enum ndr_err_code ndr_push_decode_ntprinting_form(struct ndr_push *ndr, i
        return NDR_ERR_SUCCESS;
 }
 
-static enum ndr_err_code ndr_pull_decode_ntprinting_form(struct ndr_pull *ndr, int flags, struct decode_ntprinting_form *r)
+_PUBLIC_ enum ndr_err_code ndr_pull_decode_ntprinting_form(struct ndr_pull *ndr, int flags, struct decode_ntprinting_form *r)
 {
        if (flags & NDR_IN) {
                NDR_CHECK(ndr_pull_ntprinting_form(ndr, NDR_SCALARS, &r->in.form));
@@ -812,7 +812,7 @@ _PUBLIC_ void ndr_print_decode_ntprinting_form(struct ndr_print *ndr, const char
        ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_decode_ntprinting_driver(struct ndr_push *ndr, int flags, const struct decode_ntprinting_driver *r)
+_PUBLIC_ enum ndr_err_code ndr_push_decode_ntprinting_driver(struct ndr_push *ndr, int flags, const struct decode_ntprinting_driver *r)
 {
        if (flags & NDR_IN) {
                NDR_CHECK(ndr_push_ntprinting_driver(ndr, NDR_SCALARS, &r->in.driver));
@@ -822,7 +822,7 @@ static enum ndr_err_code ndr_push_decode_ntprinting_driver(struct ndr_push *ndr,
        return NDR_ERR_SUCCESS;
 }
 
-static enum ndr_err_code ndr_pull_decode_ntprinting_driver(struct ndr_pull *ndr, int flags, struct decode_ntprinting_driver *r)
+_PUBLIC_ enum ndr_err_code ndr_pull_decode_ntprinting_driver(struct ndr_pull *ndr, int flags, struct decode_ntprinting_driver *r)
 {
        if (flags & NDR_IN) {
                NDR_CHECK(ndr_pull_ntprinting_driver(ndr, NDR_SCALARS, &r->in.driver));
@@ -854,7 +854,7 @@ _PUBLIC_ void ndr_print_decode_ntprinting_driver(struct ndr_print *ndr, const ch
        ndr->depth--;
 }
 
-static enum ndr_err_code ndr_push_decode_ntprinting_printer(struct ndr_push *ndr, int flags, const struct decode_ntprinting_printer *r)
+_PUBLIC_ enum ndr_err_code ndr_push_decode_ntprinting_printer(struct ndr_push *ndr, int flags, const struct decode_ntprinting_printer *r)
 {
        if (flags & NDR_IN) {
                NDR_CHECK(ndr_push_ntprinting_printer(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.printer));
@@ -864,7 +864,7 @@ static enum ndr_err_code ndr_push_decode_ntprinting_printer(struct ndr_push *ndr
        return NDR_ERR_SUCCESS;
 }
 
-static enum ndr_err_code ndr_pull_decode_ntprinting_printer(struct ndr_pull *ndr, int flags, struct decode_ntprinting_printer *r)
+_PUBLIC_ enum ndr_err_code ndr_pull_decode_ntprinting_printer(struct ndr_pull *ndr, int flags, struct decode_ntprinting_printer *r)
 {
        if (flags & NDR_IN) {
                NDR_CHECK(ndr_pull_ntprinting_printer(ndr, NDR_SCALARS|NDR_BUFFERS, &r->in.printer));
index e718cbc96bf366ed8b700038e2d29ef99ba5108e..7ea1fb45c4c226cf81fafc13cfa8faa20fe46d85 100644 (file)
@@ -37,7 +37,13 @@ void ndr_print_ntprinting_printer_info(struct ndr_print *ndr, const char *name,
 enum ndr_err_code ndr_push_ntprinting_printer(struct ndr_push *ndr, int ndr_flags, const struct ntprinting_printer *r);
 enum ndr_err_code ndr_pull_ntprinting_printer(struct ndr_pull *ndr, int ndr_flags, struct ntprinting_printer *r);
 void ndr_print_ntprinting_printer(struct ndr_print *ndr, const char *name, const struct ntprinting_printer *r);
+enum ndr_err_code ndr_push_decode_ntprinting_form(struct ndr_push *ndr, int flags, const struct decode_ntprinting_form *r);
+enum ndr_err_code ndr_pull_decode_ntprinting_form(struct ndr_pull *ndr, int flags, struct decode_ntprinting_form *r);
 void ndr_print_decode_ntprinting_form(struct ndr_print *ndr, const char *name, int flags, const struct decode_ntprinting_form *r);
+enum ndr_err_code ndr_push_decode_ntprinting_driver(struct ndr_push *ndr, int flags, const struct decode_ntprinting_driver *r);
+enum ndr_err_code ndr_pull_decode_ntprinting_driver(struct ndr_pull *ndr, int flags, struct decode_ntprinting_driver *r);
 void ndr_print_decode_ntprinting_driver(struct ndr_print *ndr, const char *name, int flags, const struct decode_ntprinting_driver *r);
+enum ndr_err_code ndr_push_decode_ntprinting_printer(struct ndr_push *ndr, int flags, const struct decode_ntprinting_printer *r);
+enum ndr_err_code ndr_pull_decode_ntprinting_printer(struct ndr_pull *ndr, int flags, struct decode_ntprinting_printer *r);
 void ndr_print_decode_ntprinting_printer(struct ndr_print *ndr, const char *name, int flags, const struct decode_ntprinting_printer *r);
 #endif /* _HEADER_NDR_ntprinting */
index d000ed59c0348321ad8a9888607bdff877147a09..1de61897e0d589e6e09456f5c6ca665c349523e8 100644 (file)
@@ -612,7 +612,7 @@ noccache:
                        return NT_STATUS_NO_MEMORY;
                }
        } else if (ntlmssp_state->neg_flags & NTLMSSP_NEGOTIATE_NTLM2) {
-               struct MD5Context md5_session_nonce_ctx;
+               MD5_CTX md5_session_nonce_ctx;
                uint8_t session_nonce[16];
                uint8_t session_nonce_hash[16];
                uint8_t user_session_key[16];
index c926b48e72504bf7c26ccd8ae73fe8d9a2c0dc82..3b89418673e203b7903c49a20e36eb66f9fbe145 100644 (file)
@@ -137,7 +137,7 @@ static void smb_signing_md5(const DATA_BLOB *mac_key,
 {
        const size_t offset_end_of_sig = (smb_ss_field + 8);
        uint8_t sequence_buf[8];
-       struct MD5Context md5_ctx;
+       MD5_CTX md5_ctx;
 
        /*
         * Firstly put the sequence number into the first 4 bytes.
index 27e9b9b01371a0d7c23e33ce6c0d06ea2644f87e..2472ec1c95b636611b46def89ec52a65fcf68cc0 100644 (file)
@@ -1044,11 +1044,6 @@ static int vfswrap_linux_setlease(vfs_handle_struct *handle, files_struct *fsp,
        START_PROFILE(syscall_linux_setlease);
 
 #ifdef HAVE_KERNEL_OPLOCKS_LINUX
-       /* first set the signal handler */
-       if(linux_set_lease_sighandler(fsp->fh->fd) == -1) {
-               return -1;
-       }
-
        result = linux_setlease(fsp->fh->fd, leasetype);
 #else
        errno = ENOSYS;
index 08e5f556eadab86f7ccf486aee68fc108494ce75..7bc2832708c7e270c2430e1544c7f7293d68cf59 100644 (file)
@@ -598,8 +598,8 @@ static SMB_ACL_T gpfsacl_get_posix_acl(const char *path, gpfs_aclType_t type)
                   pacl->acl_nace));
 
        result = gpfs2smb_acl(pacl);
-       if (result == NULL) {
-               goto done;
+       if (result != NULL) {
+               errno = 0;
        }
 
  done:
@@ -950,7 +950,7 @@ static int gpfs_set_xattr(struct vfs_handle_struct *handle,  const char *path,
 
         /* Only handle DOS Attributes */
         if (strcmp(name,SAMBA_XATTR_DOS_ATTRIB) != 0){
-               DEBUG(1, ("gpfs_set_xattr:name is %s\n",name));
+               DEBUG(5, ("gpfs_set_xattr:name is %s\n",name));
                return SMB_VFS_NEXT_SETXATTR(handle,path,name,value,size,flags);
         }
 
@@ -1026,7 +1026,7 @@ static ssize_t gpfs_get_xattr(struct vfs_handle_struct *handle,  const char *pat
 
         /* Only handle DOS Attributes */
         if (strcmp(name,SAMBA_XATTR_DOS_ATTRIB) != 0){
-                DEBUG(1, ("gpfs_get_xattr:name is %s\n",name));
+               DEBUG(5, ("gpfs_get_xattr:name is %s\n",name));
                 return SMB_VFS_NEXT_GETXATTR(handle,path,name,value,size);
         }
 
index 08d8d14cbdf6511b066510c1c2903266ceeeb4fa..731c813f4d704678343268c2aa9df0e91379f587 100644 (file)
@@ -39,7 +39,7 @@ struct stream_io {
 
 static SMB_INO_T stream_inode(const SMB_STRUCT_STAT *sbuf, const char *sname)
 {
-       struct MD5Context ctx;
+       MD5_CTX ctx;
         unsigned char hash[16];
        SMB_INO_T result;
        char *upper_sname;
index 2afa86e0b6d910cfe946ac0a2bcc85cc4c6fe645..64a181e420baa84fd25271dcdef770ed69d84aac 100644 (file)
@@ -1437,13 +1437,13 @@ bool sids_to_unix_ids(const struct dom_sid *sids, uint32_t num_sids,
                }
                if (idmap_cache_find_sid2uid(&sids[i], &ids[i].id.uid,
                                             &expired)
-                   && !expired) {
+                   && !expired && ids[i].id.uid != (uid_t)-1) {
                        ids[i].type = WBC_ID_TYPE_UID;
                        continue;
                }
                if (idmap_cache_find_sid2gid(&sids[i], &ids[i].id.gid,
                                             &expired)
-                   && !expired) {
+                   && !expired && ids[i].id.gid != (gid_t)-1) {
                        ids[i].type = WBC_ID_TYPE_GID;
                        continue;
                }
index 16b9b09fef32f5f8d136cf0770cd7ecdc2a68abf..06790d8921457c8c865ad21a4789a45fb8a47920 100644 (file)
@@ -164,7 +164,7 @@ static bool parse_lpq_bsd(char *line,print_queue_struct *buf,bool first)
                return False;
        }
 
-       buf->job = atoi(tok[JOBTOK]);
+       buf->sysjob = atoi(tok[JOBTOK]);
        buf->size = atoi(tok[TOTALTOK]);
        buf->status = strequal(tok[RANKTOK],"active")?LPQ_PRINTING:LPQ_QUEUED;
        buf->time = time(NULL);
@@ -281,7 +281,7 @@ static bool parse_lpq_lprng(char *line,print_queue_struct *buf,bool first)
                return False;
        }
 
-       buf->job  = atoi(tokarr[LPRNG_JOBTOK]);
+       buf->sysjob = atoi(tokarr[LPRNG_JOBTOK]);
        buf->size = atoi(tokarr[LPRNG_TOTALTOK]);
 
        if (strequal(tokarr[LPRNG_RANKTOK],"active")) {
@@ -384,7 +384,7 @@ static bool parse_lpq_aix(char *line,print_queue_struct *buf,bool first)
                                }
                        }
 
-                       buf->job = atoi(tok[1]);
+                       buf->sysjob = atoi(tok[1]);
                        buf->status = strequal(tok[0],"HELD")?LPQ_PAUSED:LPQ_QUEUED;
                        buf->priority = 0;
                        buf->time = time(NULL);
@@ -420,7 +420,7 @@ static bool parse_lpq_aix(char *line,print_queue_struct *buf,bool first)
                        }
                }
 
-               buf->job = atoi(tok[3]);
+               buf->sysjob = atoi(tok[3]);
                buf->status = strequal(tok[2],"RUNNING")?LPQ_PRINTING:LPQ_QUEUED;
                buf->priority = 0;
                buf->time = time(NULL);
@@ -511,7 +511,7 @@ static bool parse_lpq_hpux(char *line, print_queue_struct *buf, bool first)
 
                /* fill things from header line */
                buf->time = jobtime;
-               buf->job = jobid;
+               buf->sysjob = jobid;
                buf->status = jobstat;
                buf->priority = jobprio;
                if (jobuser) {
@@ -651,7 +651,7 @@ static bool parse_lpq_sysv(char *line,print_queue_struct *buf,bool first)
                tok[2] = p+1;
        }
 
-       buf->job = atoi(tok[1]);
+       buf->sysjob = atoi(tok[1]);
        buf->size = atoi(tok[3]);
        if (count > 7 && strequal(tok[7],"on")) {
                buf->status = LPQ_PRINTING;
@@ -726,7 +726,7 @@ static bool parse_lpq_qnx(char *line,print_queue_struct *buf,bool first)
                }
        }
 
-       buf->job = atoi(tok[2]);
+       buf->sysjob = atoi(tok[2]);
        buf->size = atoi(tok[4]);
        buf->status = strequal(tok[3],"active")?LPQ_PRINTING:LPQ_QUEUED;
        buf->priority = 0;
@@ -806,7 +806,7 @@ static bool parse_lpq_plp(char *line,print_queue_struct *buf,bool first)
                }
        }
 
-       buf->job = atoi(tok[4]);
+       buf->sysjob = atoi(tok[4]);
 
        buf->size = atoi(tok[7]);
        if (strchr_m(tok[7],'K')) {
@@ -896,7 +896,7 @@ static bool parse_lpq_nt(char *line,print_queue_struct *buf,bool first)
        parse_line->space3 = '\0';
        trim_char(parse_line->jobname, '\0', ' ');
 
-       buf->job = atoi(parse_line->jobid);
+       buf->sysjob = atoi(parse_line->jobid);
        buf->priority = 0;
        buf->size = atoi(parse_line->size);
        buf->time = time(NULL);
@@ -957,7 +957,7 @@ static bool parse_lpq_os2(char *line,print_queue_struct *buf,bool first)
        }
 
        /* Get the jobid */
-       buf->job = atoi(parse_line->jobid);
+       buf->sysjob = atoi(parse_line->jobid);
 
        /* Get the job name */
        parse_line->space2[0] = '\0';
@@ -1023,7 +1023,7 @@ static bool parse_lpq_vlp(char *line,print_queue_struct *buf,bool first)
        while(next_token_talloc(frame, &cline, &tok, NULL)) {
                switch (toknum) {
                case 0:
-                       buf->job = atoi(tok);
+                       buf->sysjob = atoi(tok);
                        break;
                case 1:
                        buf->size = atoi(tok);
@@ -1152,22 +1152,3 @@ bool parse_lpq_entry(enum printing_types printing_type,char *line,
        return ret;
 }
 
-/****************************************************************************
- Parse a file name from the system spooler to generate a jobid.
-****************************************************************************/
-
-uint32_t print_parse_jobid(const char *fname)
-{
-       int jobid;
-       const char *p = strstr_m(fname,PRINT_SPOOL_PREFIX);
-
-       if (!p) {
-               return (uint32_t)-1;
-       }
-       p += strlen(PRINT_SPOOL_PREFIX);
-       jobid = atoi(p);
-       if (jobid <= 0) {
-               return (uint32_t)-1;
-       }
-       return (uint32_t)jobid;
-}
index ff19de200dec6775054f2fd4b0ebb8033dd5bca0..67af9655150873aeaec26ae156e4927ba8e7dcb3 100644 (file)
 #include <cups/cups.h>
 #include <cups/language.h>
 
+#if (CUPS_VERSION_MAJOR > 1) || (CUPS_VERSION_MINOR > 5)
+#define HAVE_CUPS_1_6 1
+#endif
+
+#ifndef HAVE_CUPS_1_6
+#define ippGetGroupTag(attr)  attr->group_tag
+#define ippGetName(attr)      attr->name
+#define ippGetValueTag(attr)  attr->value_tag
+#define ippGetStatusCode(ipp) ipp->request.status.status_code
+#define ippGetInteger(attr, element) attr->values[element].integer
+#define ippGetString(attr, element, language) attr->values[element].string.text
+
+static ipp_attribute_t *
+ippFirstAttribute(ipp_t *ipp)
+{
+  if (!ipp)
+    return (NULL);
+  return (ipp->current = ipp->attrs);
+}
+
+static ipp_attribute_t *
+ippNextAttribute(ipp_t *ipp)
+{
+  if (!ipp || !ipp->current)
+    return (NULL);
+  return (ipp->current = ipp->current->next);
+}
+
+static int ippSetOperation(ipp_t *ipp, ipp_op_t op)
+{
+    ipp->request.op.operation_id = op;
+    return (1);
+}
+
+static int ippSetRequestId(ipp_t *ipp, int request_id)
+{
+    ipp->request.any.request_id = request_id;
+    return (1);
+}
+#endif
+
 static SIG_ATOMIC_T gotalarm;
 
 /***************************************************************
@@ -167,13 +208,13 @@ static bool process_cups_printers_response(TALLOC_CTX *mem_ctx,
        struct pcap_printer *printer;
        bool ret_ok = false;
 
-       for (attr = response->attrs; attr != NULL;) {
+       for (attr = ippFirstAttribute(response); attr != NULL;) {
               /*
                * Skip leading attributes until we hit a printer...
                */
 
-               while (attr != NULL && attr->group_tag != IPP_TAG_PRINTER)
-                       attr = attr->next;
+               while (attr != NULL && ippGetGroupTag(attr) != IPP_TAG_PRINTER)
+                       attr = ippNextAttribute(response);
 
                if (attr == NULL)
                        break;
@@ -185,39 +226,39 @@ static bool process_cups_printers_response(TALLOC_CTX *mem_ctx,
                name       = NULL;
                info       = NULL;
 
-               while (attr != NULL && attr->group_tag == IPP_TAG_PRINTER) {
+               while (attr != NULL && ippGetGroupTag(attr) == IPP_TAG_PRINTER) {
                        size_t size;
-                       if (strcmp(attr->name, "printer-name") == 0 &&
-                           attr->value_tag == IPP_TAG_NAME) {
+                       if (strcmp(ippGetName(attr), "printer-name") == 0 &&
+                           ippGetValueTag(attr) == IPP_TAG_NAME) {
                                if (!pull_utf8_talloc(mem_ctx,
                                                &name,
-                                               attr->values[0].string.text,
+                                               ippGetString(attr, 0, NULL),
                                                &size)) {
                                        goto err_out;
                                }
                        }
 
-                       if (strcmp(attr->name, "printer-info") == 0 &&
-                           attr->value_tag == IPP_TAG_TEXT) {
+                       if (strcmp(ippGetName(attr), "printer-info") == 0 &&
+                           ippGetValueTag(attr) == IPP_TAG_TEXT) {
                                if (!pull_utf8_talloc(mem_ctx,
                                                &info,
-                                               attr->values[0].string.text,
+                                               ippGetString(attr, 0, NULL),
                                                &size)) {
                                        goto err_out;
                                }
                        }
 
-                       if (strcmp(attr->name, "printer-location") == 0 &&
-                           attr->value_tag == IPP_TAG_TEXT) {
+                       if (strcmp(ippGetName(attr), "printer-location") == 0 &&
+                           ippGetValueTag(attr) == IPP_TAG_TEXT) {
                                if (!pull_utf8_talloc(mem_ctx,
                                                &location,
-                                               attr->values[0].string.text,
+                                               ippGetString(attr, 0, NULL),
                                                &size)) {
                                        goto err_out;
                                }
                        }
 
-                       attr = attr->next;
+                       attr = ippNextAttribute(response);
                }
 
               /*
@@ -297,8 +338,8 @@ static bool cups_cache_reload_async(int fd)
 
        request = ippNew();
 
-       request->request.op.operation_id = CUPS_GET_PRINTERS;
-       request->request.op.request_id   = 1;
+       ippSetOperation(request, CUPS_GET_PRINTERS);
+       ippSetRequestId(request, 1);
 
        language = cupsLangDefault();
 
@@ -339,8 +380,8 @@ static bool cups_cache_reload_async(int fd)
 
        request = ippNew();
 
-       request->request.op.operation_id = CUPS_GET_CLASSES;
-       request->request.op.request_id   = 1;
+       ippSetOperation(request, CUPS_GET_CLASSES);
+       ippSetRequestId(request, 1);
 
        ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
                      "attributes-charset", NULL, "utf-8");
@@ -603,8 +644,8 @@ static int cups_job_delete(const char *sharename, const char *lprm_command, stru
 
        request = ippNew();
 
-       request->request.op.operation_id = IPP_CANCEL_JOB;
-       request->request.op.request_id   = 1;
+       ippSetOperation(request, IPP_CANCEL_JOB);
+       ippSetRequestId(request, 1);
 
        language = cupsLangDefault();
 
@@ -630,7 +671,7 @@ static int cups_job_delete(const char *sharename, const char *lprm_command, stru
        */
 
        if ((response = cupsDoRequest(http, request, "/jobs")) != NULL) {
-               if (response->request.status.status_code >= IPP_OK_CONFLICT) {
+               if (ippGetStatusCode(response) >= IPP_OK_CONFLICT) {
                        DEBUG(0,("Unable to cancel job %d - %s\n", pjob->sysjob,
                                ippErrorString(cupsLastError())));
                } else {
@@ -700,8 +741,8 @@ static int cups_job_pause(int snum, struct printjob *pjob)
 
        request = ippNew();
 
-       request->request.op.operation_id = IPP_HOLD_JOB;
-       request->request.op.request_id   = 1;
+       ippSetOperation(request, IPP_HOLD_JOB);
+       ippSetRequestId(request, 1);
 
        language = cupsLangDefault();
 
@@ -726,7 +767,7 @@ static int cups_job_pause(int snum, struct printjob *pjob)
        */
 
        if ((response = cupsDoRequest(http, request, "/jobs")) != NULL) {
-               if (response->request.status.status_code >= IPP_OK_CONFLICT) {
+               if (ippGetStatusCode(response) >= IPP_OK_CONFLICT) {
                        DEBUG(0,("Unable to hold job %d - %s\n", pjob->sysjob,
                                ippErrorString(cupsLastError())));
                } else {
@@ -796,8 +837,8 @@ static int cups_job_resume(int snum, struct printjob *pjob)
 
        request = ippNew();
 
-       request->request.op.operation_id = IPP_RELEASE_JOB;
-       request->request.op.request_id   = 1;
+       ippSetOperation(request, IPP_RELEASE_JOB);
+       ippSetRequestId(request, 1);
 
        language = cupsLangDefault();
 
@@ -822,7 +863,7 @@ static int cups_job_resume(int snum, struct printjob *pjob)
        */
 
        if ((response = cupsDoRequest(http, request, "/jobs")) != NULL) {
-               if (response->request.status.status_code >= IPP_OK_CONFLICT) {
+               if (ippGetStatusCode(response) >= IPP_OK_CONFLICT) {
                        DEBUG(0,("Unable to release job %d - %s\n", pjob->sysjob,
                                ippErrorString(cupsLastError())));
                } else {
@@ -852,7 +893,9 @@ static int cups_job_resume(int snum, struct printjob *pjob)
  * 'cups_job_submit()' - Submit a job for printing.
  */
 
-static int cups_job_submit(int snum, struct printjob *pjob)
+static int cups_job_submit(int snum, struct printjob *pjob,
+                          enum printing_types printing_type,
+                          char *lpq_cmd)
 {
        TALLOC_CTX *frame = talloc_stackframe();
        int             ret = 1;                /* Return value */
@@ -871,7 +914,6 @@ static int cups_job_submit(int snum, struct printjob *pjob)
        char *cupsoptions = NULL;
        char *filename = NULL;
        size_t size;
-       uint32_t jobid = (uint32_t)-1;
 
        DEBUG(5,("cups_job_submit(%d, %p)\n", snum, pjob));
 
@@ -902,8 +944,8 @@ static int cups_job_submit(int snum, struct printjob *pjob)
 
        request = ippNew();
 
-       request->request.op.operation_id = IPP_PRINT_JOB;
-       request->request.op.request_id   = 1;
+       ippSetOperation(request, IPP_PRINT_JOB);
+       ippSetRequestId(request, 1);
 
        language = cupsLangDefault();
 
@@ -933,21 +975,12 @@ static int cups_job_submit(int snum, struct printjob *pjob)
                     "job-originating-host-name", NULL,
                     pjob->clientmachine);
 
-       /* Get the jobid from the filename. */
-       jobid = print_parse_jobid(pjob->filename);
-       if (jobid == (uint32_t)-1) {
-               DEBUG(0,("cups_job_submit: failed to parse jobid from name %s\n",
-                               pjob->filename ));
-               jobid = 0;
-       }
-
        if (!push_utf8_talloc(frame, &jobname, pjob->jobname, &size)) {
                goto out;
        }
        new_jobname = talloc_asprintf(frame,
                        "%s%.8u %s", PRINT_SPOOL_PREFIX,
-                       (unsigned int)jobid,
-                       jobname);
+                       pjob->jobid, jobname);
        if (new_jobname == NULL) {
                goto out;
        }
@@ -979,7 +1012,7 @@ static int cups_job_submit(int snum, struct printjob *pjob)
                goto out;
        }
        if ((response = cupsDoFileRequest(http, request, uri, pjob->filename)) != NULL) {
-               if (response->request.status.status_code >= IPP_OK_CONFLICT) {
+               if (ippGetStatusCode(response) >= IPP_OK_CONFLICT) {
                        DEBUG(0,("Unable to print file to %s - %s\n",
                                 lp_printername(snum),
                                 ippErrorString(cupsLastError())));
@@ -987,7 +1020,7 @@ static int cups_job_submit(int snum, struct printjob *pjob)
                        ret = 0;
                        attr_job_id = ippFindAttribute(response, "job-id", IPP_TAG_INTEGER);
                        if(attr_job_id) {
-                               pjob->sysjob = attr_job_id->values[0].integer;
+                               pjob->sysjob = ippGetInteger(attr_job_id, 0);
                                DEBUG(5,("cups_job_submit: job-id %d\n", pjob->sysjob));
                        } else {
                                DEBUG(0,("Missing job-id attribute in IPP response"));
@@ -1109,8 +1142,8 @@ static int cups_queue_get(const char *sharename,
 
        request = ippNew();
 
-       request->request.op.operation_id = IPP_GET_JOBS;
-       request->request.op.request_id   = 1;
+       ippSetOperation(request, IPP_GET_JOBS);
+       ippSetRequestId(request, 1);
 
        language = cupsLangDefault();
 
@@ -1138,9 +1171,9 @@ static int cups_queue_get(const char *sharename,
                goto out;
        }
 
-       if (response->request.status.status_code >= IPP_OK_CONFLICT) {
+       if (ippGetStatusCode(response) >= IPP_OK_CONFLICT) {
                DEBUG(0,("Unable to get jobs for %s - %s\n", uri,
-                        ippErrorString(response->request.status.status_code)));
+                        ippErrorString(ippGetStatusCode(response))));
                goto out;
        }
 
@@ -1152,13 +1185,13 @@ static int cups_queue_get(const char *sharename,
        qalloc = 0;
        queue  = NULL;
 
-        for (attr = response->attrs; attr != NULL; attr = attr->next) {
+        for (attr = ippFirstAttribute(response); attr != NULL; attr = ippNextAttribute(response)) {
               /*
                * Skip leading attributes until we hit a job...
                */
 
-               while (attr != NULL && attr->group_tag != IPP_TAG_JOB)
-                       attr = attr->next;
+               while (attr != NULL && ippGetGroupTag(attr) != IPP_TAG_JOB)
+                       attr = ippNextAttribute(response);
 
                if (attr == NULL)
                        break;
@@ -1193,53 +1226,53 @@ static int cups_queue_get(const char *sharename,
                user_name    = NULL;
                job_name     = NULL;
 
-               while (attr != NULL && attr->group_tag == IPP_TAG_JOB) {
-                       if (attr->name == NULL) {
-                               attr = attr->next;
+               while (attr != NULL && ippGetGroupTag(attr) == IPP_TAG_JOB) {
+                       if (ippGetName(attr) == NULL) {
+                               attr = ippNextAttribute(response);
                                break;
                        }
 
-                       if (strcmp(attr->name, "job-id") == 0 &&
-                           attr->value_tag == IPP_TAG_INTEGER)
-                               job_id = attr->values[0].integer;
+                       if (strcmp(ippGetName(attr), "job-id") == 0 &&
+                           ippGetValueTag(attr) == IPP_TAG_INTEGER)
+                               job_id = ippGetInteger(attr, 0);
 
-                       if (strcmp(attr->name, "job-k-octets") == 0 &&
-                           attr->value_tag == IPP_TAG_INTEGER)
-                               job_k_octets = attr->values[0].integer;
+                       if (strcmp(ippGetName(attr), "job-k-octets") == 0 &&
+                           ippGetValueTag(attr) == IPP_TAG_INTEGER)
+                               job_k_octets = ippGetInteger(attr, 0);
 
-                       if (strcmp(attr->name, "job-priority") == 0 &&
-                           attr->value_tag == IPP_TAG_INTEGER)
-                               job_priority = attr->values[0].integer;
+                       if (strcmp(ippGetName(attr), "job-priority") == 0 &&
+                           ippGetValueTag(attr) == IPP_TAG_INTEGER)
+                               job_priority = ippGetInteger(attr, 0);
 
-                       if (strcmp(attr->name, "job-state") == 0 &&
-                           attr->value_tag == IPP_TAG_ENUM)
-                               job_status = (ipp_jstate_t)(attr->values[0].integer);
+                       if (strcmp(ippGetName(attr), "job-state") == 0 &&
+                           ippGetValueTag(attr) == IPP_TAG_ENUM)
+                               job_status = (ipp_jstate_t)ippGetInteger(attr, 0);
 
-                       if (strcmp(attr->name, "time-at-creation") == 0 &&
-                           attr->value_tag == IPP_TAG_INTEGER)
-                               job_time = attr->values[0].integer;
+                       if (strcmp(ippGetName(attr), "time-at-creation") == 0 &&
+                           ippGetValueTag(attr) == IPP_TAG_INTEGER)
+                               job_time = ippGetInteger(attr, 0);
 
-                       if (strcmp(attr->name, "job-name") == 0 &&
-                           attr->value_tag == IPP_TAG_NAME) {
+                       if (strcmp(ippGetName(attr), "job-name") == 0 &&
+                           ippGetValueTag(attr) == IPP_TAG_NAME) {
                                if (!pull_utf8_talloc(frame,
                                                &job_name,
-                                               attr->values[0].string.text,
+                                               ippGetString(attr, 0, NULL),
                                                &size)) {
                                        goto out;
                                }
                        }
 
-                       if (strcmp(attr->name, "job-originating-user-name") == 0 &&
-                           attr->value_tag == IPP_TAG_NAME) {
+                       if (strcmp(ippGetName(attr), "job-originating-user-name") == 0 &&
+                           ippGetValueTag(attr) == IPP_TAG_NAME) {
                                if (!pull_utf8_talloc(frame,
                                                &user_name,
-                                               attr->values[0].string.text,
+                                               ippGetString(attr, 0, NULL),
                                                &size)) {
                                        goto out;
                                }
                        }
 
-                       attr = attr->next;
+                       attr = ippNextAttribute(response);
                }
 
               /*
@@ -1253,7 +1286,7 @@ static int cups_queue_get(const char *sharename,
                                continue;
                }
 
-               temp->job      = job_id;
+               temp->sysjob   = job_id;
                temp->size     = job_k_octets * 1024;
                temp->status   = job_status == IPP_JOB_PENDING ? LPQ_QUEUED :
                                 job_status == IPP_JOB_STOPPED ? LPQ_PAUSED :
@@ -1285,8 +1318,8 @@ static int cups_queue_get(const char *sharename,
 
        request = ippNew();
 
-       request->request.op.operation_id = IPP_GET_PRINTER_ATTRIBUTES;
-       request->request.op.request_id   = 1;
+       ippSetOperation(request, IPP_GET_PRINTER_ATTRIBUTES);
+       ippSetRequestId(request, 1);
 
        ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
                      "attributes-charset", NULL, "utf-8");
@@ -1312,9 +1345,9 @@ static int cups_queue_get(const char *sharename,
                goto out;
        }
 
-       if (response->request.status.status_code >= IPP_OK_CONFLICT) {
+       if (ippGetStatusCode(response) >= IPP_OK_CONFLICT) {
                DEBUG(0,("Unable to get printer status for %s - %s\n", printername,
-                        ippErrorString(response->request.status.status_code)));
+                        ippErrorString(ippGetStatusCode(response))));
                goto out;
        }
 
@@ -1323,7 +1356,7 @@ static int cups_queue_get(const char *sharename,
        */
 
         if ((attr = ippFindAttribute(response, "printer-state", IPP_TAG_ENUM)) != NULL) {
-               if (attr->values[0].integer == IPP_PRINTER_STOPPED)
+               if (ippGetInteger(attr, 0) == IPP_PRINTER_STOPPED)
                        status->status = LPSTAT_STOPPED;
                else
                        status->status = LPSTAT_OK;
@@ -1333,7 +1366,7 @@ static int cups_queue_get(const char *sharename,
                                     IPP_TAG_TEXT)) != NULL) {
                char *msg = NULL;
                if (!pull_utf8_talloc(frame, &msg,
-                               attr->values[0].string.text,
+                               ippGetString(attr, 0, NULL),
                                &size)) {
                        SAFE_FREE(queue);
                        qcount = 0;
@@ -1409,8 +1442,8 @@ static int cups_queue_pause(int snum)
 
        request = ippNew();
 
-       request->request.op.operation_id = IPP_PAUSE_PRINTER;
-       request->request.op.request_id   = 1;
+       ippSetOperation(request, IPP_PAUSE_PRINTER);
+       ippSetRequestId(request, 1);
 
        language = cupsLangDefault();
 
@@ -1440,7 +1473,7 @@ static int cups_queue_pause(int snum)
        */
 
        if ((response = cupsDoRequest(http, request, "/admin/")) != NULL) {
-               if (response->request.status.status_code >= IPP_OK_CONFLICT) {
+               if (ippGetStatusCode(response) >= IPP_OK_CONFLICT) {
                        DEBUG(0,("Unable to pause printer %s - %s\n",
                                 lp_printername(snum),
                                ippErrorString(cupsLastError())));
@@ -1513,8 +1546,8 @@ static int cups_queue_resume(int snum)
 
        request = ippNew();
 
-       request->request.op.operation_id = IPP_RESUME_PRINTER;
-       request->request.op.request_id   = 1;
+       ippSetOperation(request, IPP_RESUME_PRINTER);
+       ippSetRequestId(request, 1);
 
        language = cupsLangDefault();
 
@@ -1544,7 +1577,7 @@ static int cups_queue_resume(int snum)
        */
 
        if ((response = cupsDoRequest(http, request, "/admin/")) != NULL) {
-               if (response->request.status.status_code >= IPP_OK_CONFLICT) {
+               if (ippGetStatusCode(response) >= IPP_OK_CONFLICT) {
                        DEBUG(0,("Unable to resume printer %s - %s\n",
                                 lp_printername(snum),
                                ippErrorString(cupsLastError())));
index b925bedaceb6e99e4e435a69fc24615e87a25687..aac3892dcd3e1e2b4ca9044755207e4852313ab1 100644 (file)
@@ -138,11 +138,69 @@ static int generic_job_resume(int snum, struct printjob *pjob)
                                 NULL);
 }
 
+/****************************************************************************
+get the current list of queued jobs
+****************************************************************************/
+static int generic_queue_get(const char *printer_name,
+                             enum printing_types printing_type,
+                             char *lpq_command,
+                             print_queue_struct **q,
+                             print_status_struct *status)
+{
+       char **qlines;
+       int fd;
+       int numlines, i, qcount;
+       print_queue_struct *queue = NULL;
+
+       /* never do substitution when running the 'lpq command' since we can't
+          get it rigt when using the background update daemon.  Make the caller
+          do it before passing off the command string to us here. */
+
+       print_run_command(-1, printer_name, False, lpq_command, &fd, NULL);
+
+       if (fd == -1) {
+               DEBUG(5,("generic_queue_get: Can't read print queue status for printer %s\n",
+                       printer_name ));
+               return 0;
+       }
+
+       numlines = 0;
+       qlines = fd_lines_load(fd, &numlines,0,NULL);
+       close(fd);
+
+       /* turn the lpq output into a series of job structures */
+       qcount = 0;
+       ZERO_STRUCTP(status);
+       if (numlines && qlines) {
+               queue = SMB_MALLOC_ARRAY(print_queue_struct, numlines+1);
+               if (!queue) {
+                       TALLOC_FREE(qlines);
+                       *q = NULL;
+                       return 0;
+               }
+               memset(queue, '\0', sizeof(print_queue_struct)*(numlines+1));
+
+               for (i=0; i<numlines; i++) {
+                       /* parse the line */
+                       if (parse_lpq_entry(printing_type,qlines[i],
+                                           &queue[qcount],status,qcount==0)) {
+                               qcount++;
+                       }
+               }
+       }
+
+       TALLOC_FREE(qlines);
+        *q = queue;
+       return qcount;
+}
+
 /****************************************************************************
  Submit a file for printing - called from print_job_end()
 ****************************************************************************/
 
-static int generic_job_submit(int snum, struct printjob *pjob)
+static int generic_job_submit(int snum, struct printjob *pjob,
+                             enum printing_types printing_type,
+                             char *lpq_cmd)
 {
        int ret = -1;
        char *current_directory = NULL;
@@ -152,6 +210,8 @@ static int generic_job_submit(int snum, struct printjob *pjob)
        char *jobname = NULL;
        TALLOC_CTX *ctx = talloc_tos();
        fstring job_page_count, job_size;
+       print_queue_struct *q;
+       print_status_struct status;
 
        /* we print from the directory path to give the best chance of
            parsing the lpq output */
@@ -202,6 +262,36 @@ static int generic_job_submit(int snum, struct printjob *pjob)
                        "%z", job_size,
                        "%c", job_page_count,
                        NULL);
+       if (ret != 0) {
+               ret = -1;
+               goto out;
+       }
+
+       /*
+        * check the queue for the newly submitted job, this allows us to
+        * determine the backend job identifier (sysjob).
+        */
+       pjob->sysjob = -1;
+       ret = generic_queue_get(lp_printername(snum), printing_type, lpq_cmd,
+                               &q, &status);
+       if (ret > 0) {
+               int i;
+               for (i = 0; i < ret; i++) {
+                       if (strcmp(q[i].fs_file, p) == 0) {
+                               pjob->sysjob = q[i].sysjob;
+                               DEBUG(5, ("new job %u (%s) matches sysjob %d\n",
+                                         pjob->jobid, jobname, pjob->sysjob));
+                               break;
+                       }
+               }
+               SAFE_FREE(q);
+               ret = 0;
+       }
+       if (pjob->sysjob == -1) {
+               DEBUG(0, ("failed to get sysjob for job %u (%s), tracking as "
+                         "Unix job\n", pjob->jobid, jobname));
+       }
+
 
  out:
 
@@ -212,63 +302,6 @@ static int generic_job_submit(int snum, struct printjob *pjob)
         return ret;
 }
 
-
-/****************************************************************************
-get the current list of queued jobs
-****************************************************************************/
-static int generic_queue_get(const char *printer_name, 
-                             enum printing_types printing_type,
-                             char *lpq_command,
-                             print_queue_struct **q, 
-                             print_status_struct *status)
-{
-       char **qlines;
-       int fd;
-       int numlines, i, qcount;
-       print_queue_struct *queue = NULL;
-       
-       /* never do substitution when running the 'lpq command' since we can't
-          get it rigt when using the background update daemon.  Make the caller 
-          do it before passing off the command string to us here. */
-
-       print_run_command(-1, printer_name, False, lpq_command, &fd, NULL);
-
-       if (fd == -1) {
-               DEBUG(5,("generic_queue_get: Can't read print queue status for printer %s\n",
-                       printer_name ));
-               return 0;
-       }
-       
-       numlines = 0;
-       qlines = fd_lines_load(fd, &numlines,0,NULL);
-       close(fd);
-
-       /* turn the lpq output into a series of job structures */
-       qcount = 0;
-       ZERO_STRUCTP(status);
-       if (numlines && qlines) {
-               queue = SMB_MALLOC_ARRAY(print_queue_struct, numlines+1);
-               if (!queue) {
-                       TALLOC_FREE(qlines);
-                       *q = NULL;
-                       return 0;
-               }
-               memset(queue, '\0', sizeof(print_queue_struct)*(numlines+1));
-
-               for (i=0; i<numlines; i++) {
-                       /* parse the line */
-                       if (parse_lpq_entry(printing_type,qlines[i],
-                                           &queue[qcount],status,qcount==0)) {
-                               qcount++;
-                       }
-               }               
-       }
-
-       TALLOC_FREE(qlines);
-        *q = queue;
-       return qcount;
-}
-
 /****************************************************************************
  pause a queue
 ****************************************************************************/
index 1392cba7b8f0c5c5ec94ec9089c4ead4c6cc5010..529f0dd0d7c007ff213fcc43357824a4c8941300 100644 (file)
 #define NOVELL_SERVER_VERSION_STRING           "iprintserverversion="
 #define NOVELL_SERVER_VERSION_OES_SP1          33554432
 
+#if (CUPS_VERSION_MAJOR > 1) || (CUPS_VERSION_MINOR > 5)
+#define HAVE_CUPS_1_6 1
+#endif
+
+#ifndef HAVE_CUPS_1_6
+#define ippGetCount(attr)     attr->num_values
+#define ippGetGroupTag(attr)  attr->group_tag
+#define ippGetName(attr)      attr->name
+#define ippGetValueTag(attr)  attr->value_tag
+#define ippGetStatusCode(ipp) ipp->request.status.status_code
+#define ippGetBoolean(attr, element) attr->values[element].boolean
+#define ippGetInteger(attr, element) attr->values[element].integer
+#define ippGetString(attr, element, language) attr->values[element].string.text
+
+static ipp_attribute_t *
+ippFirstAttribute(ipp_t *ipp)
+{
+  if (!ipp)
+    return (NULL);
+  return (ipp->current = ipp->attrs);
+}
+
+static ipp_attribute_t *
+ippNextAttribute(ipp_t *ipp)
+{
+  if (!ipp || !ipp->current)
+    return (NULL);
+  return (ipp->current = ipp->current->next);
+}
+
+static int ippSetOperation(ipp_t *ipp, ipp_op_t op)
+{
+    ipp->request.op.operation_id = op;
+    return (1);
+}
+
+static int ippSetRequestId(ipp_t *ipp, int request_id)
+{
+    ipp->request.any.request_id = request_id;
+    return (1);
+}
+#endif
+
 /*
  * 'iprint_passwd_cb()' - The iPrint password callback...
  */
@@ -92,8 +135,8 @@ static int iprint_get_server_version(http_t *http, char* serviceUri)
 
        request = ippNew();
 
-       request->request.op.operation_id = (ipp_op_t)OPERATION_NOVELL_MGMT;
-       request->request.op.request_id   = 1;
+       ippSetOperation(request, (ipp_op_t)OPERATION_NOVELL_MGMT);
+       ippSetRequestId(request, 1);
 
        language = cupsLangDefault();
 
@@ -114,12 +157,12 @@ static int iprint_get_server_version(http_t *http, char* serviceUri)
        */
 
        if (((response = cupsDoRequest(http, request, "/ipp/")) == NULL) ||
-           (response->request.status.status_code >= IPP_OK_CONFLICT))
+           (ippGetStatusCode(response) >= IPP_OK_CONFLICT))
                goto out;
 
        if (((attr = ippFindAttribute(response, "server-version",
                                      IPP_TAG_STRING)) != NULL)) {
-               if ((ver = strstr(attr->values[0].string.text,
+               if ((ver = strstr(ippGetString(attr, 0, NULL),
                                   NOVELL_SERVER_VERSION_STRING)) != NULL) {
                        ver += strlen(NOVELL_SERVER_VERSION_STRING);
                       /*
@@ -135,7 +178,7 @@ static int iprint_get_server_version(http_t *http, char* serviceUri)
                                serverVersion = 0;
                }
 
-               if ((os = strstr(attr->values[0].string.text,
+               if ((os = strstr(ippGetString(attr, 0, NULL),
                                   NOVELL_SERVER_SYSNAME)) != NULL) {
                        os += strlen(NOVELL_SERVER_SYSNAME);
                        if ((temp = strchr(os,'<')) != NULL)
@@ -184,8 +227,8 @@ static int iprint_cache_add_printer(http_t *http,
 
        request = ippNew();
 
-       request->request.op.operation_id = IPP_GET_PRINTER_ATTRIBUTES;
-       request->request.op.request_id   = reqId;
+       ippSetOperation(request, IPP_GET_PRINTER_ATTRIBUTES);
+       ippSetRequestId(request, reqId);
 
        language = cupsLangDefault();
 
@@ -230,13 +273,13 @@ static int iprint_cache_add_printer(http_t *http,
                goto out;
        }
 
-       for (attr = response->attrs; attr != NULL;) {
+       for (attr = ippFirstAttribute(response); attr != NULL;) {
               /*
                * Skip leading attributes until we hit a printer...
                */
 
-               while (attr != NULL && attr->group_tag != IPP_TAG_PRINTER)
-                       attr = attr->next;
+               while (attr != NULL && ippGetGroupTag(attr) != IPP_TAG_PRINTER)
+                       attr = ippNextAttribute(response);
 
                if (attr == NULL)
                        break;
@@ -250,15 +293,15 @@ static int iprint_cache_add_printer(http_t *http,
                smb_enabled= 1;
                secure     = 0;
 
-               while (attr != NULL && attr->group_tag == IPP_TAG_PRINTER) {
-                       if (strcmp(attr->name, "printer-name") == 0 &&
-                           attr->value_tag == IPP_TAG_NAME)
-                               name = attr->values[0].string.text;
+               while (attr != NULL && ippGetGroupTag(attr) == IPP_TAG_PRINTER) {
+                       if (strcmp(ippGetName(attr), "printer-name") == 0 &&
+                           ippGetValueTag(attr) == IPP_TAG_NAME)
+                               name = ippGetString(attr, 0, NULL);
 
-                       if (strcmp(attr->name, "printer-info") == 0 &&
-                           (attr->value_tag == IPP_TAG_TEXT ||
-                           attr->value_tag == IPP_TAG_TEXTLANG))
-                               info = attr->values[0].string.text;
+                       if (strcmp(ippGetName(attr), "printer-info") == 0 &&
+                           (ippGetValueTag(attr) == IPP_TAG_TEXT ||
+                           ippGetValueTag(attr) == IPP_TAG_TEXTLANG))
+                               info = ippGetString(attr, 0, NULL);
 
                       /*
                        * If the smb-enabled attribute is present and the
@@ -266,11 +309,11 @@ static int iprint_cache_add_printer(http_t *http,
                        * If the attribute is not present, assume that the
                        * printer should show up
                        */
-                       if (!strcmp(attr->name, "smb-enabled") &&
-                           ((attr->value_tag == IPP_TAG_INTEGER &&
-                           !attr->values[0].integer) ||
-                           (attr->value_tag == IPP_TAG_BOOLEAN &&
-                           !attr->values[0].boolean)))
+                       if (!strcmp(ippGetName(attr), "smb-enabled") &&
+                           ((ippGetValueTag(attr) == IPP_TAG_INTEGER &&
+                           !ippGetInteger(attr, 0)) ||
+                           (ippGetValueTag(attr) == IPP_TAG_BOOLEAN &&
+                           !ippGetBoolean(attr, 0))))
                                smb_enabled = 0;
 
                       /*
@@ -279,14 +322,14 @@ static int iprint_cache_add_printer(http_t *http,
                        * If the attribute is not present, assume that the
                        * printer should show up
                        */
-                       if (!strcmp(attr->name, "security-enabled") &&
-                           ((attr->value_tag == IPP_TAG_INTEGER &&
-                           attr->values[0].integer) ||
-                           (attr->value_tag == IPP_TAG_BOOLEAN &&
-                           attr->values[0].boolean)))
+                       if (!strcmp(ippGetName(attr), "security-enabled") &&
+                           ((ippGetValueTag(attr) == IPP_TAG_INTEGER &&
+                           ippGetInteger(attr, 0)) ||
+                           (ippGetValueTag(attr) == IPP_TAG_BOOLEAN &&
+                           ippGetBoolean(attr, 0))))
                                secure = 1;
 
-                       attr = attr->next;
+                       attr = ippNextAttribute(response);
                }
 
               /*
@@ -343,9 +386,8 @@ bool iprint_cache_reload(void)
 
        request = ippNew();
 
-       request->request.op.operation_id =
-               (ipp_op_t)OPERATION_NOVELL_LIST_PRINTERS;
-       request->request.op.request_id   = 1;
+       ippSetOperation(request, (ipp_op_t)OPERATION_NOVELL_LIST_PRINTERS);
+       ippSetRequestId(request, 1);
 
        language = cupsLangDefault();
 
@@ -368,13 +410,13 @@ bool iprint_cache_reload(void)
                goto out;
        }
 
-       for (attr = response->attrs; attr != NULL;) {
+       for (attr = ippFirstAttribute(response); attr != NULL;) {
               /*
                * Skip leading attributes until we hit a printer...
                */
 
-               while (attr != NULL && attr->group_tag != IPP_TAG_PRINTER)
-                       attr = attr->next;
+               while (attr != NULL && ippGetGroupTag(attr) != IPP_TAG_PRINTER)
+                       attr = ippNextAttribute(response);
 
                if (attr == NULL)
                        break;
@@ -383,24 +425,24 @@ bool iprint_cache_reload(void)
                * Pull the needed attributes from this printer...
                */
 
-               while (attr != NULL && attr->group_tag == IPP_TAG_PRINTER)
+               while (attr != NULL && ippGetGroupTag(attr) == IPP_TAG_PRINTER)
                {
-                       if (strcmp(attr->name, "printer-name") == 0 &&
-                           (attr->value_tag == IPP_TAG_URI ||
-                            attr->value_tag == IPP_TAG_NAME ||
-                            attr->value_tag == IPP_TAG_TEXT ||
-                            attr->value_tag == IPP_TAG_NAMELANG ||
-                            attr->value_tag == IPP_TAG_TEXTLANG))
+                       if (strcmp(ippGetName(attr), "printer-name") == 0 &&
+                           (ippGetValueTag(attr) == IPP_TAG_URI ||
+                            ippGetValueTag(attr) == IPP_TAG_NAME ||
+                            ippGetValueTag(attr) == IPP_TAG_TEXT ||
+                            ippGetValueTag(attr) == IPP_TAG_NAMELANG ||
+                            ippGetValueTag(attr) == IPP_TAG_TEXTLANG))
                        {
-                               for (i = 0; i<attr->num_values; i++)
+                               for (i = 0; i<ippGetCount(attr); i++)
                                {
-                                       char *url = attr->values[i].string.text;
+                                       char *url = ippGetString(attr, i, NULL);
                                        if (!url || !strlen(url))
                                                continue;
                                        iprint_cache_add_printer(http, i+2, url);
                                }
                        }
-                       attr = attr->next;
+                       attr = ippNextAttribute(response);
                }
        }
 
@@ -466,8 +508,8 @@ static int iprint_job_delete(const char *sharename, const char *lprm_command, st
 
        request = ippNew();
 
-       request->request.op.operation_id = IPP_CANCEL_JOB;
-       request->request.op.request_id   = 1;
+       ippSetOperation(request, IPP_CANCEL_JOB);
+       ippSetRequestId(request, 1);
 
        language = cupsLangDefault();
 
@@ -493,7 +535,7 @@ static int iprint_job_delete(const char *sharename, const char *lprm_command, st
        slprintf(httpPath, sizeof(httpPath) - 1, "/ipp/%s", sharename);
 
        if ((response = cupsDoRequest(http, request, httpPath)) != NULL) {
-               if (response->request.status.status_code >= IPP_OK_CONFLICT) {
+               if (ippGetStatusCode(response) >= IPP_OK_CONFLICT) {
                        DEBUG(0,("Unable to cancel job %d - %s\n", pjob->sysjob,
                                ippErrorString(cupsLastError())));
                } else {
@@ -564,8 +606,8 @@ static int iprint_job_pause(int snum, struct printjob *pjob)
 
        request = ippNew();
 
-       request->request.op.operation_id = IPP_HOLD_JOB;
-       request->request.op.request_id   = 1;
+       ippSetOperation(request, IPP_HOLD_JOB);
+       ippSetRequestId(request, 1);
 
        language = cupsLangDefault();
 
@@ -593,7 +635,7 @@ static int iprint_job_pause(int snum, struct printjob *pjob)
                 lp_printername(snum));
 
        if ((response = cupsDoRequest(http, request, httpPath)) != NULL) {
-               if (response->request.status.status_code >= IPP_OK_CONFLICT) {
+               if (ippGetStatusCode(response) >= IPP_OK_CONFLICT) {
                        DEBUG(0,("Unable to hold job %d - %s\n", pjob->sysjob,
                                ippErrorString(cupsLastError())));
                } else {
@@ -664,8 +706,8 @@ static int iprint_job_resume(int snum, struct printjob *pjob)
 
        request = ippNew();
 
-       request->request.op.operation_id = IPP_RELEASE_JOB;
-       request->request.op.request_id   = 1;
+       ippSetOperation(request, IPP_RELEASE_JOB);
+       ippSetRequestId(request, 1);
 
        language = cupsLangDefault();
 
@@ -693,7 +735,7 @@ static int iprint_job_resume(int snum, struct printjob *pjob)
                 lp_printername(snum));
 
        if ((response = cupsDoRequest(http, request, httpPath)) != NULL) {
-               if (response->request.status.status_code >= IPP_OK_CONFLICT) {
+               if (ippGetStatusCode(response) >= IPP_OK_CONFLICT) {
                        DEBUG(0,("Unable to release job %d - %s\n", pjob->sysjob,
                                ippErrorString(cupsLastError())));
                } else {
@@ -722,7 +764,9 @@ static int iprint_job_resume(int snum, struct printjob *pjob)
  * 'iprint_job_submit()' - Submit a job for printing.
  */
 
-static int iprint_job_submit(int snum, struct printjob *pjob)
+static int iprint_job_submit(int snum, struct printjob *pjob,
+                            enum printing_types printing_type,
+                            char *lpq_cmd)
 {
        int             ret = 1;                /* Return value */
        http_t          *http = NULL;           /* HTTP connection to server */
@@ -763,8 +807,8 @@ static int iprint_job_submit(int snum, struct printjob *pjob)
 
        request = ippNew();
 
-       request->request.op.operation_id = IPP_PRINT_JOB;
-       request->request.op.request_id   = 1;
+       ippSetOperation(request, IPP_PRINT_JOB);
+       ippSetRequestId(request, 1);
 
        language = cupsLangDefault();
 
@@ -797,7 +841,7 @@ static int iprint_job_submit(int snum, struct printjob *pjob)
        slprintf(uri, sizeof(uri) - 1, "/ipp/%s", lp_printername(snum));
 
        if ((response = cupsDoFileRequest(http, request, uri, pjob->filename)) != NULL) {
-               if (response->request.status.status_code >= IPP_OK_CONFLICT) {
+               if (ippGetStatusCode(response) >= IPP_OK_CONFLICT) {
                        DEBUG(0,("Unable to print file to %s - %s\n",
                                 lp_printername(snum),
                                 ippErrorString(cupsLastError())));
@@ -817,9 +861,9 @@ static int iprint_job_submit(int snum, struct printjob *pjob)
        if ( ret == 0 ) {
 
                attr = ippFindAttribute(response, "job-id", IPP_TAG_INTEGER);
-               if (attr != NULL && attr->group_tag == IPP_TAG_JOB)
+               if (attr != NULL && ippGetGroupTag(attr) == IPP_TAG_JOB)
                {
-                       pjob->sysjob = attr->values[0].integer;
+                       pjob->sysjob = ippGetInteger(attr, 0);
                }
        }
 
@@ -866,7 +910,6 @@ static int iprint_queue_get(const char *sharename,
        int             job_id;         /* job-id attribute */
        int             job_k_octets;   /* job-k-octets attribute */
        time_t          job_time;       /* time-at-creation attribute */
-       time_t          printer_current_time = 0;       /* printer's current time */
        time_t          printer_up_time = 0;    /* printer's uptime */
        ipp_jstate_t    job_status;     /* job-status attribute */
        int             job_priority;   /* job-priority attribute */
@@ -939,8 +982,8 @@ static int iprint_queue_get(const char *sharename,
 
        request = ippNew();
 
-       request->request.op.operation_id = IPP_GET_PRINTER_ATTRIBUTES;
-       request->request.op.request_id   = 2;
+       ippSetOperation(request, IPP_GET_PRINTER_ATTRIBUTES);
+       ippSetRequestId(request, 2);
 
        language = cupsLangDefault();
 
@@ -971,9 +1014,9 @@ static int iprint_queue_get(const char *sharename,
                goto out;
        }
 
-       if (response->request.status.status_code >= IPP_OK_CONFLICT) {
+       if (ippGetStatusCode(response) >= IPP_OK_CONFLICT) {
                DEBUG(0,("Unable to get printer status for %s - %s\n", printername,
-                        ippErrorString(response->request.status.status_code)));
+                        ippErrorString(ippGetStatusCode(response))));
                *q = queue;
                goto out;
        }
@@ -983,7 +1026,7 @@ static int iprint_queue_get(const char *sharename,
        */
 
        if ((attr = ippFindAttribute(response, "printer-state", IPP_TAG_ENUM)) != NULL) {
-               if (attr->values[0].integer == IPP_PRINTER_STOPPED)
+               if (ippGetInteger(attr, 0) == IPP_PRINTER_STOPPED)
                        status->status = LPSTAT_STOPPED;
                else
                        status->status = LPSTAT_OK;
@@ -991,15 +1034,11 @@ static int iprint_queue_get(const char *sharename,
 
        if ((attr = ippFindAttribute(response, "printer-state-message",
                                     IPP_TAG_TEXT)) != NULL)
-               fstrcpy(status->message, attr->values[0].string.text);
-
-       if ((attr = ippFindAttribute(response, "printer-current-time",
-                                    IPP_TAG_DATE)) != NULL)
-               printer_current_time = ippDateToTime(attr->values[0].date);
+               fstrcpy(status->message, ippGetString(attr, 0, NULL));
 
        if ((attr = ippFindAttribute(response, "printer-up-time",
                                     IPP_TAG_INTEGER)) != NULL)
-               printer_up_time = attr->values[0].integer;
+               printer_up_time = ippGetInteger(attr, 0);
 
        ippDelete(response);
        response = NULL;
@@ -1016,8 +1055,8 @@ static int iprint_queue_get(const char *sharename,
 
        request = ippNew();
 
-       request->request.op.operation_id = IPP_GET_JOBS;
-       request->request.op.request_id   = 3;
+       ippSetOperation(request, IPP_GET_JOBS);
+       ippSetRequestId(request, 3);
 
        ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
                     "attributes-charset", NULL, "utf-8");
@@ -1045,9 +1084,9 @@ static int iprint_queue_get(const char *sharename,
                goto out;
        }
 
-       if (response->request.status.status_code >= IPP_OK_CONFLICT) {
+       if (ippGetStatusCode(response) >= IPP_OK_CONFLICT) {
                DEBUG(0,("Unable to get jobs for %s - %s\n", uri,
-                        ippErrorString(response->request.status.status_code)));
+                        ippErrorString(ippGetStatusCode(response))));
                goto out;
        }
 
@@ -1059,13 +1098,13 @@ static int iprint_queue_get(const char *sharename,
        qalloc = 0;
        queue  = NULL;
 
-       for (attr = response->attrs; attr != NULL; attr = attr->next) {
+       for (attr = ippFirstAttribute(response); attr != NULL; attr = ippNextAttribute(response)) {
               /*
                * Skip leading attributes until we hit a job...
                */
 
-               while (attr != NULL && attr->group_tag != IPP_TAG_JOB)
-                       attr = attr->next;
+               while (attr != NULL && ippGetGroupTag(attr) != IPP_TAG_JOB)
+                       attr = ippNextAttribute(response);
 
                if (attr == NULL)
                        break;
@@ -1100,30 +1139,30 @@ static int iprint_queue_get(const char *sharename,
                user_name    = NULL;
                job_name     = NULL;
 
-               while (attr != NULL && attr->group_tag == IPP_TAG_JOB) {
-                       if (attr->name == NULL) {
-                               attr = attr->next;
+               while (attr != NULL && ippGetGroupTag(attr) == IPP_TAG_JOB) {
+                       if (ippGetName(attr) == NULL) {
+                               attr = ippNextAttribute(response);
                                break;
                        }
 
-                       if (strcmp(attr->name, "job-id") == 0 &&
-                           attr->value_tag == IPP_TAG_INTEGER)
-                               job_id = attr->values[0].integer;
+                       if (strcmp(ippGetName(attr), "job-id") == 0 &&
+                           ippGetValueTag(attr) == IPP_TAG_INTEGER)
+                               job_id = ippGetInteger(attr, 0);
 
-                       if (strcmp(attr->name, "job-k-octets") == 0 &&
-                           attr->value_tag == IPP_TAG_INTEGER)
-                               job_k_octets = attr->values[0].integer;
+                       if (strcmp(ippGetName(attr), "job-k-octets") == 0 &&
+                           ippGetValueTag(attr) == IPP_TAG_INTEGER)
+                               job_k_octets = ippGetInteger(attr, 0);
 
-                       if (strcmp(attr->name, "job-priority") == 0 &&
-                           attr->value_tag == IPP_TAG_INTEGER)
-                               job_priority = attr->values[0].integer;
+                       if (strcmp(ippGetName(attr), "job-priority") == 0 &&
+                           ippGetValueTag(attr) == IPP_TAG_INTEGER)
+                               job_priority = ippGetInteger(attr, 0);
 
-                       if (strcmp(attr->name, "job-state") == 0 &&
-                           attr->value_tag == IPP_TAG_ENUM)
-                               job_status = (ipp_jstate_t)(attr->values[0].integer);
+                       if (strcmp(ippGetName(attr), "job-state") == 0 &&
+                           ippGetValueTag(attr) == IPP_TAG_ENUM)
+                               job_status = (ipp_jstate_t)ippGetInteger(attr, 0);
 
-                       if (strcmp(attr->name, "time-at-creation") == 0 &&
-                           attr->value_tag == IPP_TAG_INTEGER)
+                       if (strcmp(ippGetName(attr), "time-at-creation") == 0 &&
+                           ippGetValueTag(attr) == IPP_TAG_INTEGER)
                        {
                               /*
                                * If jobs times are in Unix time, the accuracy of the job
@@ -1133,22 +1172,22 @@ static int iprint_queue_get(const char *sharename,
                                */
 
                                if (jobUseUnixTime)
-                                       job_time = attr->values[0].integer; 
+                                       job_time = ippGetInteger(attr, 0);
                                else
-                                       job_time = time(NULL) - printer_up_time + attr->values[0].integer;
+                                       job_time = time(NULL) - printer_up_time + ippGetInteger(attr, 0);
                        }
 
-                       if (strcmp(attr->name, "job-name") == 0 &&
-                           (attr->value_tag == IPP_TAG_NAMELANG ||
-                            attr->value_tag == IPP_TAG_NAME))
-                               job_name = attr->values[0].string.text;
+                       if (strcmp(ippGetName(attr), "job-name") == 0 &&
+                           (ippGetValueTag(attr) == IPP_TAG_NAMELANG ||
+                            ippGetValueTag(attr) == IPP_TAG_NAME))
+                               job_name = ippGetString(attr, 0, NULL);
 
-                       if (strcmp(attr->name, "job-originating-user-name") == 0 &&
-                           (attr->value_tag == IPP_TAG_NAMELANG ||
-                            attr->value_tag == IPP_TAG_NAME))
-                               user_name = attr->values[0].string.text;
+                       if (strcmp(ippGetName(attr), "job-originating-user-name") == 0 &&
+                           (ippGetValueTag(attr) == IPP_TAG_NAMELANG ||
+                            ippGetValueTag(attr) == IPP_TAG_NAME))
+                               user_name = ippGetString(attr, 0, NULL);
 
-                       attr = attr->next;
+                       attr = ippNextAttribute(response);
                }
 
               /*
@@ -1162,7 +1201,7 @@ static int iprint_queue_get(const char *sharename,
                                continue;
                }
 
-               temp->job      = job_id;
+               temp->sysjob   = job_id;
                temp->size     = job_k_octets * 1024;
                temp->status   = job_status == IPP_JOB_PENDING ? LPQ_QUEUED :
                                 job_status == IPP_JOB_STOPPED ? LPQ_PAUSED :
index f15bd4f754a435928e4eecfd4a4921220a2e50b8..aa5b41d57cd367f13fb28fd946de0626d5f64d9a 100644 (file)
@@ -373,18 +373,21 @@ done:
  unpack a pjob from a tdb buffer
 ***********************************************************************/
 
-static int unpack_pjob( uint8 *buf, int buflen, struct printjob *pjob )
+static int unpack_pjob(TALLOC_CTX *mem_ctx, uint8 *buf, int buflen,
+                      struct printjob *pjob)
 {
        int     len = 0;
        int     used;
-       uint32 pjpid, pjsysjob, pjfd, pjstarttime, pjstatus;
+       uint32 pjpid, pjjobid, pjsysjob, pjfd, pjstarttime, pjstatus;
        uint32 pjsize, pjpage_count, pjspooled, pjsmbjob;
 
-       if ( !buf || !pjob )
+       if (!buf || !pjob) {
                return -1;
+       }
 
-       len += tdb_unpack(buf+len, buflen-len, "dddddddddfffff",
+       len += tdb_unpack(buf+len, buflen-len, "ddddddddddfffff",
                                &pjpid,
+                               &pjjobid,
                                &pjsysjob,
                                &pjfd,
                                &pjstarttime,
@@ -399,10 +402,11 @@ static int unpack_pjob( uint8 *buf, int buflen, struct printjob *pjob )
                                pjob->clientmachine,
                                pjob->queuename);
 
-       if ( len == -1 )
+       if (len == -1) {
                return -1;
+       }
 
-        used = unpack_devicemode(NULL, buf+len, buflen-len, &pjob->devmode);
+        used = unpack_devicemode(mem_ctx, buf+len, buflen-len, &pjob->devmode);
         if (used == -1) {
                return -1;
         }
@@ -410,6 +414,7 @@ static int unpack_pjob( uint8 *buf, int buflen, struct printjob *pjob )
        len += used;
 
        pjob->pid = pjpid;
+       pjob->jobid = pjjobid;
        pjob->sysjob = pjsysjob;
        pjob->fd = pjfd;
        pjob->starttime = pjstarttime;
@@ -427,9 +432,11 @@ static int unpack_pjob( uint8 *buf, int buflen, struct printjob *pjob )
  Useful function to find a print job in the database.
 ****************************************************************************/
 
-static struct printjob *print_job_find(const char *sharename, uint32 jobid)
+static struct printjob *print_job_find(TALLOC_CTX *mem_ctx,
+                                      const char *sharename,
+                                      uint32 jobid)
 {
-       static struct printjob  pjob;
+       struct printjob         *pjob;
        uint32_t tmp;
        TDB_DATA                ret;
        struct tdb_print_db     *pdb = get_print_db_byname(sharename);
@@ -445,26 +452,30 @@ static struct printjob *print_job_find(const char *sharename, uint32 jobid)
        release_print_db(pdb);
 
        if (!ret.dptr) {
-               DEBUG(10,("print_job_find: failed to find jobid %u.\n", (unsigned int)jobid ));
+               DEBUG(10, ("print_job_find: failed to find jobid %u.\n",
+                          jobid));
                return NULL;
        }
 
-       talloc_free(pjob.devmode);
-
-       ZERO_STRUCT( pjob );
-
-       if ( unpack_pjob( ret.dptr, ret.dsize, &pjob ) == -1 ) {
-               DEBUG(10,("print_job_find: failed to unpack jobid %u.\n", (unsigned int)jobid ));
-               SAFE_FREE(ret.dptr);
-               return NULL;
+       pjob = talloc_zero(mem_ctx, struct printjob);
+       if (pjob == NULL) {
+               goto err_out;
        }
 
-       SAFE_FREE(ret.dptr);
+       if (unpack_pjob(mem_ctx, ret.dptr, ret.dsize, pjob) == -1) {
+               DEBUG(10, ("failed to unpack jobid %u.\n", jobid));
+               talloc_free(pjob);
+               pjob = NULL;
+               goto err_out;
+       }
 
        DEBUG(10,("print_job_find: returning system job %d for jobid %u.\n",
-                       (int)pjob.sysjob, (unsigned int)jobid ));
+                 pjob->sysjob, jobid));
+       SMB_ASSERT(pjob->jobid == jobid);
 
-       return &pjob;
+err_out:
+       SAFE_FREE(ret.dptr);
+       return pjob;
 }
 
 /* Convert a unix jobid to a smb jobid */
@@ -489,15 +500,25 @@ static int unixjob_traverse_fn(TDB_CONTEXT *the_tdb, TDB_DATA key,
                return 0;
 
        if (state->sysjob == pjob->sysjob) {
-               uint32 jobid = IVAL(key.dptr,0);
-
-               state->sysjob_to_jobid_value = jobid;
+               state->sysjob_to_jobid_value = pjob->jobid;
                return 1;
        }
 
        return 0;
 }
 
+static uint32 sysjob_to_jobid_pdb(struct tdb_print_db *pdb, int sysjob)
+{
+       struct unixjob_traverse_state state;
+
+       state.sysjob = sysjob;
+       state.sysjob_to_jobid_value = (uint32)-1;
+
+       tdb_traverse(pdb->tdb, unixjob_traverse_fn, &state);
+
+       return state.sysjob_to_jobid_value;
+}
+
 /****************************************************************************
  This is a *horribly expensive call as we have to iterate through all the
  current printer tdb's. Don't do this often ! JRA.
@@ -737,8 +758,9 @@ static bool pjob_store(struct tevent_context *ev,
        do {
                len = 0;
                buflen = newlen;
-               len += tdb_pack(buf+len, buflen-len, "dddddddddfffff",
+               len += tdb_pack(buf+len, buflen-len, "ddddddddddfffff",
                                (uint32)pjob->pid,
+                               (uint32)pjob->jobid,
                                (uint32)pjob->sysjob,
                                (uint32)pjob->fd,
                                (uint32)pjob->starttime,
@@ -775,37 +797,39 @@ static bool pjob_store(struct tevent_context *ev,
 
        /* Send notify updates for what has changed */
 
-       if ( ret ) {
+       if (ret) {
                bool changed = false;
                struct printjob old_pjob;
 
-               if ( old_data.dsize )
-               {
-                       if ( unpack_pjob( old_data.dptr, old_data.dsize, &old_pjob ) != -1 )
-                       {
-                               pjob_store_notify(server_event_context(),
+               if (old_data.dsize) {
+                       TALLOC_CTX *tmp_ctx = talloc_new(ev);
+                       if (tmp_ctx == NULL)
+                               goto done;
+
+                       len = unpack_pjob(tmp_ctx, old_data.dptr,
+                                         old_data.dsize, &old_pjob);
+                       if (len != -1 ) {
+                               pjob_store_notify(ev,
                                                  msg_ctx,
                                                  sharename, jobid, &old_pjob,
                                                  pjob,
                                                  &changed);
-                               talloc_free(old_pjob.devmode);
-
                                if (changed) {
                                        add_to_jobs_changed(pdb, jobid);
                                }
                        }
+                       talloc_free(tmp_ctx);
 
-               }
-               else {
+               } else {
                        /* new job */
-                       pjob_store_notify(server_event_context(), msg_ctx,
+                       pjob_store_notify(ev, msg_ctx,
                                          sharename, jobid, NULL, pjob,
                                          &changed);
                }
        }
 
-       release_print_db(pdb);
 done:
+       release_print_db(pdb);
        SAFE_FREE( old_data.dptr );
        SAFE_FREE( buf );
 
@@ -824,19 +848,21 @@ static void pjob_delete(struct tevent_context *ev,
        struct printjob *pjob;
        uint32 job_status = 0;
        struct tdb_print_db *pdb;
-
-       pdb = get_print_db_byname( sharename );
-
-       if (!pdb)
+       TALLOC_CTX *tmp_ctx = talloc_new(ev);
+       if (tmp_ctx == NULL) {
                return;
+       }
 
-       pjob = print_job_find( sharename, jobid );
+       pdb = get_print_db_byname(sharename);
+       if (!pdb) {
+               goto err_out;
+       }
 
+       pjob = print_job_find(tmp_ctx, sharename, jobid);
        if (!pjob) {
-               DEBUG(5, ("pjob_delete: we were asked to delete nonexistent job %u\n",
-                                       (unsigned int)jobid));
-               release_print_db(pdb);
-               return;
+               DEBUG(5, ("we were asked to delete nonexistent job %u\n",
+                         jobid));
+               goto err_release;
        }
 
        /* We must cycle through JOB_STATUS_DELETING and
@@ -850,8 +876,11 @@ static void pjob_delete(struct tevent_context *ev,
 
        tdb_delete(pdb->tdb, print_key(jobid, &tmp));
        remove_from_jobs_added(sharename, jobid);
-       release_print_db( pdb );
        rap_jobid_delete(sharename, jobid);
+err_release:
+       release_print_db(pdb);
+err_out:
+       talloc_free(tmp_ctx);
 }
 
 /****************************************************************************
@@ -864,18 +893,24 @@ static void print_unix_job(struct tevent_context *ev,
                           uint32 jobid)
 {
        struct printjob pj, *old_pj;
+       TALLOC_CTX *tmp_ctx = talloc_new(ev);
+       if (tmp_ctx == NULL) {
+               return;
+       }
 
-       if (jobid == (uint32)-1)
-               jobid = q->job + UNIX_JOB_START;
+       if (jobid == (uint32)-1) {
+               jobid = q->sysjob + UNIX_JOB_START;
+       }
 
        /* Preserve the timestamp on an existing unix print job */
 
-       old_pj = print_job_find(sharename, jobid);
+       old_pj = print_job_find(tmp_ctx, sharename, jobid);
 
        ZERO_STRUCT(pj);
 
        pj.pid = (pid_t)-1;
-       pj.sysjob = q->job;
+       pj.jobid = jobid;
+       pj.sysjob = q->sysjob;
        pj.fd = -1;
        pj.starttime = old_pj ? old_pj->starttime : q->time;
        pj.status = q->status;
@@ -893,6 +928,7 @@ static void print_unix_job(struct tevent_context *ev,
        fstrcpy(pj.queuename, old_pj ? old_pj->queuename : sharename );
 
        pjob_store(ev, msg_ctx, sharename, jobid, &pj);
+       talloc_free(tmp_ctx);
 }
 
 
@@ -905,6 +941,7 @@ struct traverse_struct {
        struct printif *print_if;
        struct tevent_context *ev;
        struct messaging_context *msg_ctx;
+       TALLOC_CTX *mem_ctx;
 };
 
 /****************************************************************************
@@ -921,19 +958,17 @@ static int traverse_fn_delete(TDB_CONTEXT *t, TDB_DATA key, TDB_DATA data, void
        if (  key.dsize != sizeof(jobid) )
                return 0;
 
-       jobid = IVAL(key.dptr, 0);
-       if ( unpack_pjob( data.dptr, data.dsize, &pjob ) == -1 )
+       if (unpack_pjob(ts->mem_ctx, data.dptr, data.dsize, &pjob) == -1)
                return 0;
        talloc_free(pjob.devmode);
-
+       jobid = pjob.jobid;
 
        if (!pjob.smbjob) {
                /* remove a unix job if it isn't in the system queue any more */
-
                for (i=0;i<ts->qcount;i++) {
-                       uint32 u_jobid = (ts->queue[i].job + UNIX_JOB_START);
-                       if (jobid == u_jobid)
+                       if (ts->queue[i].sysjob == pjob.sysjob) {
                                break;
+                       }
                }
                if (i == ts->qcount) {
                        DEBUG(10,("traverse_fn_delete: pjob %u deleted due to !smbjob\n",
@@ -964,16 +999,12 @@ static int traverse_fn_delete(TDB_CONTEXT *t, TDB_DATA key, TDB_DATA data, void
 
        /* this check only makes sense for jobs submitted from Windows clients */
 
-       if ( pjob.smbjob ) {
+       if (pjob.smbjob) {
                for (i=0;i<ts->qcount;i++) {
-                       uint32 curr_jobid;
-
                        if ( pjob.status == LPQ_DELETED )
                                continue;
 
-                       curr_jobid = print_parse_jobid(ts->queue[i].fs_file);
-
-                       if (jobid == curr_jobid) {
+                       if (ts->queue[i].sysjob == pjob.sysjob) {
 
                                /* try to clean up any jobs that need to be deleted */
 
@@ -1028,11 +1059,8 @@ static int traverse_fn_delete(TDB_CONTEXT *t, TDB_DATA key, TDB_DATA data, void
                return 0;
        }
 
-       /* Save the pjob attributes we will store.
-          FIXME!!! This is the only place where queue->job
-          represents the SMB jobid      --jerry */
-
-       ts->queue[i].job = jobid;
+       /* Save the pjob attributes we will store. */
+       ts->queue[i].sysjob = pjob.sysjob;
        ts->queue[i].size = pjob.size;
        ts->queue[i].page_count = pjob.page_count;
        ts->queue[i].status = pjob.status;
@@ -1183,7 +1211,7 @@ static void store_queue_struct(struct tdb_print_db *pdb, struct traverse_struct
 
                qcount++;
                data.dsize += tdb_pack(NULL, 0, "ddddddff",
-                               (uint32)queue[i].job,
+                               (uint32)queue[i].sysjob,
                                (uint32)queue[i].size,
                                (uint32)queue[i].page_count,
                                (uint32)queue[i].status,
@@ -1203,7 +1231,7 @@ static void store_queue_struct(struct tdb_print_db *pdb, struct traverse_struct
                        continue;
 
                len += tdb_pack(data.dptr + len, data.dsize - len, "ddddddff",
-                               (uint32)queue[i].job,
+                               (uint32)queue[i].sysjob,
                                (uint32)queue[i].size,
                                (uint32)queue[i].page_count,
                                (uint32)queue[i].status,
@@ -1317,11 +1345,11 @@ done:
  main work for updating the lpq cache for a printer queue
 ****************************************************************************/
 
-static void print_queue_update_internal( struct tevent_context *ev,
-                                        struct messaging_context *msg_ctx,
-                                        const char *sharename,
-                                         struct printif *current_printif,
-                                         char *lpq_command, char *lprm_command )
+static void print_queue_update_internal(struct tevent_context *ev,
+                                       struct messaging_context *msg_ctx,
+                                       const char *sharename,
+                                        struct printif *current_printif,
+                                        char *lpq_command, char *lprm_command)
 {
        int i, qcount;
        print_queue_struct *queue = NULL;
@@ -1333,8 +1361,9 @@ static void print_queue_update_internal( struct tevent_context *ev,
        TDB_DATA jcdata;
        fstring keystr, cachestr;
        struct tdb_print_db *pdb = get_print_db_byname(sharename);
+       TALLOC_CTX *tmp_ctx = talloc_new(ev);
 
-       if (!pdb) {
+       if ((pdb == NULL) || (tmp_ctx == NULL)) {
                return;
        }
 
@@ -1375,12 +1404,10 @@ static void print_queue_update_internal( struct tevent_context *ev,
 
          fill in any system job numbers as we go
        */
-
        jcdata = get_jobs_added_data(pdb);
 
        for (i=0; i<qcount; i++) {
-               uint32 jobid = print_parse_jobid(queue[i].fs_file);
-
+               uint32 jobid = sysjob_to_jobid_pdb(pdb, queue[i].sysjob);
                if (jobid == (uint32)-1) {
                        /* assume its a unix print job */
                        print_unix_job(ev, msg_ctx,
@@ -1389,18 +1416,18 @@ static void print_queue_update_internal( struct tevent_context *ev,
                }
 
                /* we have an active SMB print job - update its status */
-               pjob = print_job_find(sharename, jobid);
+               pjob = print_job_find(tmp_ctx, sharename, jobid);
                if (!pjob) {
                        /* err, somethings wrong. Probably smbd was restarted
                           with jobs in the queue. All we can do is treat them
                           like unix jobs. Pity. */
+                       DEBUG(1, ("queued print job %d not found in jobs list, "
+                                 "assuming unix job\n", jobid));
                        print_unix_job(ev, msg_ctx,
                                       sharename, &queue[i], jobid);
                        continue;
                }
 
-               pjob->sysjob = queue[i].job;
-
                /* don't reset the status on jobs to be deleted */
 
                if ( pjob->status != LPQ_DELETING )
@@ -1425,6 +1452,7 @@ static void print_queue_update_internal( struct tevent_context *ev,
        tstruct.print_if = current_printif;
        tstruct.ev = ev;
        tstruct.msg_ctx = msg_ctx;
+       tstruct.mem_ctx = tmp_ctx;
 
        tdb_traverse(pdb->tdb, traverse_fn_delete, (void *)&tstruct);
 
@@ -1432,6 +1460,7 @@ static void print_queue_update_internal( struct tevent_context *ev,
        store_queue_struct(pdb, &tstruct);
 
        SAFE_FREE(tstruct.queue);
+       talloc_free(tmp_ctx);
 
        DEBUG(10,("print_queue_update_internal: printer %s INFO/total_jobs = %d\n",
                                sharename, tstruct.total_jobs ));
@@ -2044,32 +2073,19 @@ bool print_job_exists(const char* sharename, uint32 jobid)
 }
 
 /****************************************************************************
- Give the filename used for a jobid.
- Only valid for the process doing the spooling and when the job
- has not been spooled.
-****************************************************************************/
-
-char *print_job_fname(const char* sharename, uint32 jobid)
-{
-       struct printjob *pjob = print_job_find(sharename, jobid);
-       if (!pjob || pjob->spooled || pjob->pid != sys_getpid())
-               return NULL;
-       return pjob->filename;
-}
-
-
-/****************************************************************************
- Give the filename used for a jobid.
+ Return the device mode asigned to a specific print job.
  Only valid for the process doing the spooling and when the job
  has not been spooled.
 ****************************************************************************/
 
-struct spoolss_DeviceMode *print_job_devmode(const char* sharename, uint32 jobid)
+struct spoolss_DeviceMode *print_job_devmode(TALLOC_CTX *mem_ctx,
+                                            const char *sharename,
+                                            uint32 jobid)
 {
-       struct printjob *pjob = print_job_find(sharename, jobid);
-
-       if ( !pjob )
+       struct printjob *pjob = print_job_find(mem_ctx, sharename, jobid);
+       if (pjob == NULL) {
                return NULL;
+       }
 
        return pjob->devmode;
 }
@@ -2083,13 +2099,23 @@ bool print_job_set_name(struct tevent_context *ev,
                        const char *sharename, uint32 jobid, const char *name)
 {
        struct printjob *pjob;
+       bool ret;
+       TALLOC_CTX *tmp_ctx = talloc_new(ev);
+       if (tmp_ctx == NULL) {
+               return false;
+       }
 
-       pjob = print_job_find(sharename, jobid);
-       if (!pjob || pjob->pid != sys_getpid())
-               return False;
+       pjob = print_job_find(tmp_ctx, sharename, jobid);
+       if (!pjob || pjob->pid != sys_getpid()) {
+               ret = false;
+               goto err_out;
+       }
 
        fstrcpy(pjob->jobname, name);
-       return pjob_store(ev, msg_ctx, sharename, jobid, pjob);
+       ret = pjob_store(ev, msg_ctx, sharename, jobid, pjob);
+err_out:
+       talloc_free(tmp_ctx);
+       return ret;
 }
 
 /****************************************************************************
@@ -2100,16 +2126,12 @@ bool print_job_get_name(TALLOC_CTX *mem_ctx, const char *sharename, uint32_t job
 {
        struct printjob *pjob;
 
-       pjob = print_job_find(sharename, jobid);
+       pjob = print_job_find(mem_ctx, sharename, jobid);
        if (!pjob || pjob->pid != sys_getpid()) {
                return false;
        }
 
-       *name = talloc_strdup(mem_ctx, pjob->jobname);
-       if (!*name) {
-               return false;
-       }
-
+       *name = pjob->jobname;
        return true;
 }
 
@@ -2182,19 +2204,29 @@ static bool print_job_delete1(struct tevent_context *ev,
                              int snum, uint32 jobid)
 {
        const char* sharename = lp_const_servicename(snum);
-       struct printjob *pjob = print_job_find(sharename, jobid);
+       struct printjob *pjob;
        int result = 0;
        struct printif *current_printif = get_printer_fns( snum );
+       bool ret;
+       TALLOC_CTX *tmp_ctx = talloc_new(ev);
+       if (tmp_ctx == NULL) {
+               return false;
+       }
 
-       if (!pjob)
-               return False;
+       pjob = print_job_find(tmp_ctx, sharename, jobid);
+       if (!pjob) {
+               ret = false;
+               goto err_out;
+       }
 
        /*
         * If already deleting just return.
         */
 
-       if (pjob->status == LPQ_DELETING)
-               return True;
+       if (pjob->status == LPQ_DELETING) {
+               ret = true;
+               goto err_out;
+       }
 
        /* Hrm - we need to be able to cope with deleting a job before it
           has reached the spooler.  Just mark it as LPQ_DELETING and
@@ -2224,8 +2256,10 @@ static bool print_job_delete1(struct tevent_context *ev,
                        struct tdb_print_db *pdb = get_print_db_byname(sharename);
                        int njobs = 1;
 
-                       if (!pdb)
-                               return False;
+                       if (!pdb) {
+                               ret = false;
+                               goto err_out;
+                       }
                        pjob_delete(ev, msg_ctx, sharename, jobid);
                        /* Ensure we keep a rough count of the number of total jobs... */
                        tdb_change_int32_atomic(pdb->tdb, "INFO/total_jobs", &njobs, -1);
@@ -2235,7 +2269,10 @@ static bool print_job_delete1(struct tevent_context *ev,
 
        remove_from_jobs_added( sharename, jobid );
 
-       return (result == 0);
+       ret = (result == 0);
+err_out:
+       talloc_free(tmp_ctx);
+       return ret;
 }
 
 /****************************************************************************
@@ -2246,12 +2283,23 @@ static bool is_owner(const struct auth_serversupplied_info *server_info,
                     const char *servicename,
                     uint32 jobid)
 {
-       struct printjob *pjob = print_job_find(servicename, jobid);
+       struct printjob *pjob;
+       bool ret;
+       TALLOC_CTX *tmp_ctx = talloc_new(server_info);
+       if (tmp_ctx == NULL) {
+               return false;
+       }
 
-       if (!pjob || !server_info)
-               return False;
+       pjob = print_job_find(tmp_ctx, servicename, jobid);
+       if (!pjob || !server_info) {
+               ret = false;
+               goto err_out;
+       }
 
-       return strequal(pjob->user, server_info->sanitized_username);
+       ret = strequal(pjob->user, server_info->sanitized_username);
+err_out:
+       talloc_free(tmp_ctx);
+       return ret;
 }
 
 /****************************************************************************
@@ -2265,7 +2313,11 @@ WERROR print_job_delete(const struct auth_serversupplied_info *server_info,
        const char* sharename = lp_const_servicename(snum);
        struct printjob *pjob;
        bool    owner;
-       char    *fname;
+       WERROR werr;
+       TALLOC_CTX *tmp_ctx = talloc_new(msg_ctx);
+       if (tmp_ctx == NULL) {
+               return WERR_NOT_ENOUGH_MEMORY;
+       }
 
        owner = is_owner(server_info, lp_const_servicename(snum), jobid);
 
@@ -2285,7 +2337,8 @@ pause, or resume print job. User name: %s. Printer name: %s.",
                              lp_printername(snum) );
                /* END_ADMIN_LOG */
 
-               return WERR_ACCESS_DENIED;
+               werr = WERR_ACCESS_DENIED;
+               goto err_out;
        }
 
        /*
@@ -2295,18 +2348,20 @@ pause, or resume print job. User name: %s. Printer name: %s.",
         * spool file & return.
         */
 
-       fname = print_job_fname(sharename, jobid);
-       if (fname != NULL) {
-               /* remove the spool file */
-               DEBUG(10, ("print_job_delete: "
-                          "Removing spool file [%s]\n", fname));
-               if (unlink(fname) == -1) {
-                       return map_werror_from_unix(errno);
+       pjob = print_job_find(tmp_ctx, sharename, jobid);
+       if (!pjob || pjob->spooled || pjob->pid != getpid()) {
+               DEBUG(10, ("Skipping spool file removal for job %u\n", jobid));
+       } else {
+               DEBUG(10, ("Removing spool file [%s]\n", pjob->filename));
+               if (unlink(pjob->filename) == -1) {
+                       werr = map_werror_from_unix(errno);
+                       goto err_out;
                }
        }
 
        if (!print_job_delete1(server_event_context(), msg_ctx, snum, jobid)) {
-               return WERR_ACCESS_DENIED;
+               werr = WERR_ACCESS_DENIED;
+               goto err_out;
        }
 
        /* force update the database and say the delete failed if the
@@ -2314,39 +2369,49 @@ pause, or resume print job. User name: %s. Printer name: %s.",
 
        print_queue_update(msg_ctx, snum, True);
 
-       pjob = print_job_find(sharename, jobid);
+       pjob = print_job_find(tmp_ctx, sharename, jobid);
        if (pjob && (pjob->status != LPQ_DELETING)) {
-               return WERR_ACCESS_DENIED;
+               werr = WERR_ACCESS_DENIED;
+               goto err_out;
        }
+       werr = WERR_PRINTER_HAS_JOBS_QUEUED;
 
-       return WERR_PRINTER_HAS_JOBS_QUEUED;
+err_out:
+       talloc_free(tmp_ctx);
+       return werr;
 }
 
 /****************************************************************************
  Pause a job.
 ****************************************************************************/
 
-bool print_job_pause(const struct auth_serversupplied_info *server_info,
+WERROR print_job_pause(const struct auth_serversupplied_info *server_info,
                     struct messaging_context *msg_ctx,
-                    int snum, uint32 jobid, WERROR *errcode)
+                    int snum, uint32 jobid)
 {
        const char* sharename = lp_const_servicename(snum);
        struct printjob *pjob;
        int ret = -1;
        struct printif *current_printif = get_printer_fns( snum );
+       WERROR werr;
+       TALLOC_CTX *tmp_ctx = talloc_new(msg_ctx);
+       if (tmp_ctx == NULL) {
+               return WERR_NOT_ENOUGH_MEMORY;
+       }
 
-       pjob = print_job_find(sharename, jobid);
-
+       pjob = print_job_find(tmp_ctx, sharename, jobid);
        if (!pjob || !server_info) {
                DEBUG(10, ("print_job_pause: no pjob or user for jobid %u\n",
                        (unsigned int)jobid ));
-               return False;
+               werr = WERR_INVALID_PARAM;
+               goto err_out;
        }
 
        if (!pjob->spooled || pjob->sysjob == -1) {
                DEBUG(10, ("print_job_pause: not spooled or bad sysjob = %d for jobid %u\n",
                        (int)pjob->sysjob, (unsigned int)jobid ));
-               return False;
+               werr = WERR_INVALID_PARAM;
+               goto err_out;
        }
 
        if (!is_owner(server_info, lp_const_servicename(snum), jobid) &&
@@ -2362,16 +2427,16 @@ pause, or resume print job. User name: %s. Printer name: %s.",
                              lp_printername(snum) );
                /* END_ADMIN_LOG */
 
-               *errcode = WERR_ACCESS_DENIED;
-               return False;
+               werr = WERR_ACCESS_DENIED;
+               goto err_out;
        }
 
        /* need to pause the spooled entry */
        ret = (*(current_printif->job_pause))(snum, pjob);
 
        if (ret != 0) {
-               *errcode = WERR_INVALID_PARAM;
-               return False;
+               werr = WERR_INVALID_PARAM;
+               goto err_out;
        }
 
        /* force update the database */
@@ -2383,42 +2448,48 @@ pause, or resume print job. User name: %s. Printer name: %s.",
                          JOB_STATUS_PAUSED);
 
        /* how do we tell if this succeeded? */
-
-       return True;
+       werr = WERR_OK;
+err_out:
+       talloc_free(tmp_ctx);
+       return werr;
 }
 
 /****************************************************************************
  Resume a job.
 ****************************************************************************/
 
-bool print_job_resume(const struct auth_serversupplied_info *server_info,
+WERROR print_job_resume(const struct auth_serversupplied_info *server_info,
                      struct messaging_context *msg_ctx,
-                     int snum, uint32 jobid, WERROR *errcode)
+                     int snum, uint32 jobid)
 {
        const char *sharename = lp_const_servicename(snum);
        struct printjob *pjob;
        int ret;
        struct printif *current_printif = get_printer_fns( snum );
+       WERROR werr;
+       TALLOC_CTX *tmp_ctx = talloc_new(msg_ctx);
+       if (tmp_ctx == NULL)
+               return WERR_NOT_ENOUGH_MEMORY;
 
-       pjob = print_job_find(sharename, jobid);
-
+       pjob = print_job_find(tmp_ctx, sharename, jobid);
        if (!pjob || !server_info) {
                DEBUG(10, ("print_job_resume: no pjob or user for jobid %u\n",
                        (unsigned int)jobid ));
-               return False;
+               werr = WERR_INVALID_PARAM;
+               goto err_out;
        }
 
        if (!pjob->spooled || pjob->sysjob == -1) {
                DEBUG(10, ("print_job_resume: not spooled or bad sysjob = %d for jobid %u\n",
                        (int)pjob->sysjob, (unsigned int)jobid ));
-               return False;
+               werr = WERR_INVALID_PARAM;
+               goto err_out;
        }
 
        if (!is_owner(server_info, lp_const_servicename(snum), jobid) &&
            !print_access_check(server_info, msg_ctx, snum,
                                JOB_ACCESS_ADMINISTER)) {
                DEBUG(3, ("resume denied by security descriptor\n"));
-               *errcode = WERR_ACCESS_DENIED;
 
                /* BEGIN_ADMIN_LOG */
                sys_adminlog( LOG_ERR,
@@ -2427,14 +2498,15 @@ pause, or resume print job. User name: %s. Printer name: %s.",
                              uidtoname(server_info->utok.uid),
                              lp_printername(snum) );
                /* END_ADMIN_LOG */
-               return False;
+               werr = WERR_ACCESS_DENIED;
+               goto err_out;
        }
 
        ret = (*(current_printif->job_resume))(snum, pjob);
 
        if (ret != 0) {
-               *errcode = WERR_INVALID_PARAM;
-               return False;
+               werr = WERR_INVALID_PARAM;
+               goto err_out;
        }
 
        /* force update the database */
@@ -2445,7 +2517,10 @@ pause, or resume print job. User name: %s. Printer name: %s.",
        notify_job_status(server_event_context(), msg_ctx, sharename, jobid,
                          JOB_STATUS_QUEUED);
 
-       return True;
+       werr = WERR_OK;
+err_out:
+       talloc_free(tmp_ctx);
+       return werr;
 }
 
 /****************************************************************************
@@ -2459,26 +2534,36 @@ ssize_t print_job_write(struct tevent_context *ev,
        const char* sharename = lp_const_servicename(snum);
        ssize_t return_code;
        struct printjob *pjob;
+       TALLOC_CTX *tmp_ctx = talloc_new(ev);
+       if (tmp_ctx == NULL) {
+               return -1;
+       }
 
-       pjob = print_job_find(sharename, jobid);
+       pjob = print_job_find(tmp_ctx, sharename, jobid);
+       if (!pjob) {
+               return_code = -1;
+               goto err_out;
+       }
 
-       if (!pjob)
-               return -1;
        /* don't allow another process to get this info - it is meaningless */
-       if (pjob->pid != sys_getpid())
-               return -1;
+       if (pjob->pid != sys_getpid()) {
+               return_code = -1;
+               goto err_out;
+       }
 
        /* if SMBD is spooling this can't be allowed */
        if (pjob->status == PJOB_SMBD_SPOOLING) {
-               return -1;
+               return_code = -1;
+               goto err_out;
        }
 
        return_code = write_data(pjob->fd, buf, size);
-
-       if (return_code>0) {
+       if (return_code > 0) {
                pjob->size += size;
                pjob_store(ev, msg_ctx, sharename, jobid, pjob);
        }
+err_out:
+       talloc_free(tmp_ctx);
        return return_code;
 }
 
@@ -2825,6 +2910,7 @@ WERROR print_job_start(const struct auth_serversupplied_info *server_info,
        ZERO_STRUCT(pjob);
 
        pjob.pid = sys_getpid();
+       pjob.jobid = jobid;
        pjob.sysjob = -1;
        pjob.fd = -1;
        pjob.starttime = time(NULL);
@@ -2889,16 +2975,24 @@ void print_job_endpage(struct messaging_context *msg_ctx,
 {
        const char* sharename = lp_const_servicename(snum);
        struct printjob *pjob;
-
-       pjob = print_job_find(sharename, jobid);
-       if (!pjob)
+       TALLOC_CTX *tmp_ctx = talloc_new(msg_ctx);
+       if (tmp_ctx == NULL) {
                return;
+       }
+
+       pjob = print_job_find(tmp_ctx, sharename, jobid);
+       if (!pjob) {
+               goto err_out;
+       }
        /* don't allow another process to get this info - it is meaningless */
-       if (pjob->pid != sys_getpid())
-               return;
+       if (pjob->pid != sys_getpid()) {
+               goto err_out;
+       }
 
        pjob->page_count++;
        pjob_store(server_event_context(), msg_ctx, sharename, jobid, pjob);
+err_out:
+       talloc_free(tmp_ctx);
 }
 
 /****************************************************************************
@@ -2914,17 +3008,23 @@ NTSTATUS print_job_end(struct messaging_context *msg_ctx, int snum,
        struct printjob *pjob;
        int ret;
        SMB_STRUCT_STAT sbuf;
-       struct printif *current_printif = get_printer_fns( snum );
+       struct printif *current_printif = get_printer_fns(snum);
        NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
+       char *lpq_cmd;
+       TALLOC_CTX *tmp_ctx = talloc_new(msg_ctx);
+       if (tmp_ctx == NULL) {
+               return NT_STATUS_NO_MEMORY;
+       }
 
-       pjob = print_job_find(sharename, jobid);
-
+       pjob = print_job_find(tmp_ctx, sharename, jobid);
        if (!pjob) {
-               return NT_STATUS_PRINT_CANCELLED;
+               status = NT_STATUS_PRINT_CANCELLED;
+               goto err_out;
        }
 
        if (pjob->spooled || pjob->pid != sys_getpid()) {
-               return NT_STATUS_ACCESS_DENIED;
+               status = NT_STATUS_ACCESS_DENIED;
+               goto err_out;
        }
 
        if (close_type == NORMAL_CLOSE || close_type == SHUTDOWN_CLOSE) {
@@ -2978,8 +3078,31 @@ NTSTATUS print_job_end(struct messaging_context *msg_ctx, int snum,
                return NT_STATUS_OK;
        }
 
-       ret = (*(current_printif->job_submit))(snum, pjob);
+       /* don't strip out characters like '$' from the printername */
+       lpq_cmd = talloc_string_sub2(tmp_ctx,
+                                    lp_lpqcommand(snum),
+                                    "%p",
+                                    lp_printername(snum),
+                                    false, false, false);
+       if (lpq_cmd == NULL) {
+               status = NT_STATUS_PRINT_CANCELLED;
+               goto fail;
+       }
+       lpq_cmd = talloc_sub_advanced(tmp_ctx,
+                                     lp_servicename(snum),
+                                     current_user_info.unix_name,
+                                     "",
+                                     current_user.ut.gid,
+                                     get_current_username(),
+                                     current_user_info.domain,
+                                     lpq_cmd);
+       if (lpq_cmd == NULL) {
+               status = NT_STATUS_PRINT_CANCELLED;
+               goto fail;
+       }
 
+       ret = (*(current_printif->job_submit))(snum, pjob,
+                                              current_printif->type, lpq_cmd);
        if (ret) {
                status = NT_STATUS_PRINT_CANCELLED;
                goto fail;
@@ -3004,6 +3127,8 @@ fail:
        pjob->fd = -1;
        unlink(pjob->filename);
        pjob_delete(server_event_context(), msg_ctx, sharename, jobid);
+err_out:
+       talloc_free(tmp_ctx);
        return status;
 }
 
@@ -3026,6 +3151,10 @@ static bool get_stored_queue_info(struct messaging_context *msg_ctx,
        int max_reported_jobs = lp_max_reported_jobs(snum);
        bool ret = False;
        const char* sharename = lp_servicename(snum);
+       TALLOC_CTX *tmp_ctx = talloc_new(msg_ctx);
+       if (tmp_ctx == NULL) {
+               return false;
+       }
 
        /* make sure the database is up to date */
        if (print_cache_expired(lp_const_servicename(snum), True))
@@ -3075,7 +3204,7 @@ static bool get_stored_queue_info(struct messaging_context *msg_ctx,
                                &qtime,
                                queue[i].fs_user,
                                queue[i].fs_file);
-               queue[i].job = qjob;
+               queue[i].sysjob = qjob;
                queue[i].size = qsize;
                queue[i].page_count = qpage_count;
                queue[i].status = qstatus;
@@ -3092,14 +3221,14 @@ static bool get_stored_queue_info(struct messaging_context *msg_ctx,
 
                jobid = IVAL(cgdata.dptr, i*4);
                DEBUG(5,("get_stored_queue_info: added job = %u\n", (unsigned int)jobid));
-               pjob = print_job_find(lp_const_servicename(snum), jobid);
+               pjob = print_job_find(tmp_ctx, lp_const_servicename(snum), jobid);
                if (!pjob) {
                        DEBUG(5,("get_stored_queue_info: failed to find added job = %u\n", (unsigned int)jobid));
                        remove_from_jobs_added(sharename, jobid);
                        continue;
                }
 
-               queue[total_count].job = jobid;
+               queue[total_count].sysjob = jobid;
                queue[total_count].size = pjob->size;
                queue[total_count].page_count = pjob->page_count;
                queue[total_count].status = pjob->status;
@@ -3108,6 +3237,7 @@ static bool get_stored_queue_info(struct messaging_context *msg_ctx,
                fstrcpy(queue[total_count].fs_user, pjob->user);
                fstrcpy(queue[total_count].fs_file, pjob->jobname);
                total_count++;
+               talloc_free(pjob);
        }
 
        /* Update the changed jobids. */
@@ -3117,7 +3247,7 @@ static bool get_stored_queue_info(struct messaging_context *msg_ctx,
                bool found = false;
 
                for (j = 0; j < total_count; j++) {
-                       if (queue[j].job == jobid) {
+                       if (queue[j].sysjob == jobid) {
                                found = true;
                                break;
                        }
@@ -3129,7 +3259,7 @@ static bool get_stored_queue_info(struct messaging_context *msg_ctx,
                        DEBUG(5,("get_stored_queue_info: changed job: %u\n",
                                 (unsigned int) jobid));
 
-                       pjob = print_job_find(sharename, jobid);
+                       pjob = print_job_find(tmp_ctx, sharename, jobid);
                        if (pjob == NULL) {
                                DEBUG(5,("get_stored_queue_info: failed to find "
                                         "changed job = %u\n",
@@ -3138,7 +3268,7 @@ static bool get_stored_queue_info(struct messaging_context *msg_ctx,
                                continue;
                        }
 
-                       queue[j].job = jobid;
+                       queue[j].sysjob = jobid;
                        queue[j].size = pjob->size;
                        queue[j].page_count = pjob->page_count;
                        queue[j].status = pjob->status;
@@ -3146,6 +3276,7 @@ static bool get_stored_queue_info(struct messaging_context *msg_ctx,
                        queue[j].time = pjob->starttime;
                        fstrcpy(queue[j].fs_user, pjob->user);
                        fstrcpy(queue[j].fs_file, pjob->jobname);
+                       talloc_free(pjob);
 
                        DEBUG(5,("get_stored_queue_info: updated queue[%u], jobid: %u, jobname: %s\n",
                                 (unsigned int) j, (unsigned int) jobid, pjob->jobname));
@@ -3173,6 +3304,7 @@ static bool get_stored_queue_info(struct messaging_context *msg_ctx,
 
        SAFE_FREE(data.dptr);
        SAFE_FREE(cgdata.dptr);
+       talloc_free(tmp_ctx);
        return ret;
 }
 
@@ -3340,11 +3472,11 @@ WERROR print_queue_purge(const struct auth_serversupplied_info *server_info,
 
        for (i=0;i<njobs;i++) {
                bool owner = is_owner(server_info, lp_const_servicename(snum),
-                                     queue[i].job);
+                                     queue[i].sysjob);
 
                if (owner || can_job_admin) {
                        print_job_delete1(server_event_context(), msg_ctx,
-                                         snum, queue[i].job);
+                                         snum, queue[i].sysjob);
                }
        }
 
index 3d8b0d8b1bb7db88f9e17aa9fbda3147ab3817aa..23464d59b0b0425d9f04d1b9ba903c7ef94318a6 100644 (file)
@@ -82,7 +82,8 @@ NTSTATUS print_spool_open(files_struct *fsp,
                }
        }
 
-       /* Ok, now we have to open an actual file.
+       /*
+        * Ok, now we have to open an actual file.
         * Here is the reason:
         * We want to write the spool job to this file in
         * smbd for scalability reason (and also because
@@ -92,9 +93,13 @@ NTSTATUS print_spool_open(files_struct *fsp,
         * to spoolss in output_file so it can monitor and
         * take over once we call EndDocPrinter().
         * Of course we will not start writing until
-        * StartDocPrinter() actually gives the ok. */
+        * StartDocPrinter() actually gives the ok.
+        * smbd spooler files do not include a print jobid
+        * path component, as the jobid is only known after
+        * calling StartDocPrinter().
+        */
 
-       pf->filename = talloc_asprintf(pf, "%s/%s.XXXXXX",
+       pf->filename = talloc_asprintf(pf, "%s/%sXXXXXX",
                                        lp_pathname(SNUM(fsp->conn)),
                                        PRINT_SPOOL_PREFIX);
        if (!pf->filename) {
index b22050632ea0124ec56ef9b3f80deee5614ceba7..f02e0c55769ba9469bb5aa7cf7f018bbafc14e2b 100644 (file)
@@ -237,7 +237,8 @@ static int print_command(int argc, char **argv)
 
        slprintf(job.jobname, sizeof(job.jobname) - 1, "%s", argv[2]);
 
-       if (!(pw = getpwuid(getuid()))) {
+       if (!(pw = getpwuid(geteuid()))) {
+               printf("getpwuid failed\n");
                return 1;
        }
 
index e3bb3015c26194176a0a3b847ca9c61ad11b090e..7f1a22908baac403eaa25691d866b6d43d29fafe 100644 (file)
@@ -34,7 +34,7 @@ void init_samr_CryptPasswordEx(const char *pwd,
        /* samr_CryptPasswordEx */
 
        uchar pwbuf[532];
-       struct MD5Context md5_ctx;
+       MD5_CTX md5_ctx;
        uint8_t confounder[16];
        DATA_BLOB confounded_session_key = data_blob(NULL, 16);
 
index 4cc06597b92d92ffa2c84a2f91b644424efd09a1..8868a9894e666e6e1f120f91097d0c269db5aebf 100644 (file)
@@ -3219,7 +3219,7 @@ static void spoolss_notify_job_position(struct messaging_context *msg_ctx,
                                        struct spoolss_PrinterInfo2 *pinfo2,
                                        TALLOC_CTX *mem_ctx)
 {
-       SETUP_SPOOLSS_NOTIFY_DATA_INTEGER(data, queue->job);
+       SETUP_SPOOLSS_NOTIFY_DATA_INTEGER(data, queue->sysjob);
 }
 
 /*******************************************************************
@@ -3685,7 +3685,7 @@ static WERROR printer_notify_info(struct pipes_struct *p,
                                                           &queue[j], info,
                                                           pinfo2, snum,
                                                           &option_type,
-                                                          queue[j].job,
+                                                          queue[j].sysjob,
                                                           mem_ctx);
                        }
 
@@ -6783,7 +6783,7 @@ static WERROR fill_job_info1(TALLOC_CTX *mem_ctx,
 
        t = gmtime(&queue->time);
 
-       r->job_id               = queue->job;
+       r->job_id               = queue->sysjob;
 
        r->printer_name         = talloc_strdup(mem_ctx, lp_servicename(snum));
        W_ERROR_HAVE_NO_MEMORY(r->printer_name);
@@ -6824,7 +6824,7 @@ static WERROR fill_job_info2(TALLOC_CTX *mem_ctx,
 
        t = gmtime(&queue->time);
 
-       r->job_id               = queue->job;
+       r->job_id               = queue->sysjob;
 
        r->printer_name         = talloc_strdup(mem_ctx, lp_servicename(snum));
        W_ERROR_HAVE_NO_MEMORY(r->printer_name);
@@ -6877,10 +6877,10 @@ static WERROR fill_job_info3(TALLOC_CTX *mem_ctx,
                             int position, int snum,
                             struct spoolss_PrinterInfo2 *pinfo2)
 {
-       r->job_id               = queue->job;
+       r->job_id               = queue->sysjob;
        r->next_job_id          = 0;
        if (next_queue) {
-               r->next_job_id  = next_queue->job;
+               r->next_job_id  = next_queue->sysjob;
        }
        r->reserved             = 0;
 
@@ -7189,17 +7189,13 @@ WERROR _spoolss_SetJob(struct pipes_struct *p,
                }
                break;
        case SPOOLSS_JOB_CONTROL_PAUSE:
-               if (print_job_pause(session_info, p->msg_ctx,
-                                   snum, r->in.job_id, &errcode)) {
-                       errcode = WERR_OK;
-               }
+               errcode = print_job_pause(session_info, p->msg_ctx,
+                                         snum, r->in.job_id);
                break;
        case SPOOLSS_JOB_CONTROL_RESTART:
        case SPOOLSS_JOB_CONTROL_RESUME:
-               if (print_job_resume(session_info, p->msg_ctx,
-                                    snum, r->in.job_id, &errcode)) {
-                       errcode = WERR_OK;
-               }
+               errcode = print_job_resume(session_info, p->msg_ctx,
+                                          snum, r->in.job_id);
                break;
        case 0:
                errcode = WERR_OK;
@@ -9028,7 +9024,7 @@ static WERROR getjob_level_1(TALLOC_CTX *mem_ctx,
        bool found = false;
 
        for (i=0; i<count; i++) {
-               if (queue[i].job == (int)jobid) {
+               if (queue[i].sysjob == (int)jobid) {
                        found = true;
                        break;
                }
@@ -9063,7 +9059,7 @@ static WERROR getjob_level_2(TALLOC_CTX *mem_ctx,
        WERROR result;
 
        for (i=0; i<count; i++) {
-               if (queue[i].job == (int)jobid) {
+               if (queue[i].sysjob == (int)jobid) {
                        found = true;
                        break;
                }
@@ -9081,7 +9077,7 @@ static WERROR getjob_level_2(TALLOC_CTX *mem_ctx,
         *  a failure condition
         */
 
-       devmode = print_job_devmode(lp_const_servicename(snum), jobid);
+       devmode = print_job_devmode(mem_ctx, lp_const_servicename(snum), jobid);
        if (!devmode) {
                result = spoolss_create_default_devmode(mem_ctx,
                                                pinfo2->printername,
index 4b065d0dd2d0cb2b1bc300079d0ad722f5d8318d..3aaef5cac21879e4c0bc86508f34923bfcaf35db 100644 (file)
@@ -1168,7 +1168,7 @@ static void display_trust_dom_info_4(struct lsa_TrustDomainInfoPassword *p,
 
        DATA_BLOB data     = data_blob_const(p->password->data, p->password->length);
        DATA_BLOB data_old = data_blob_const(p->old_password->data, p->old_password->length);
-       DATA_BLOB session_key_blob = data_blob_const(session_key, sizeof(session_key));
+       DATA_BLOB session_key_blob = data_blob_const(session_key, 16);
 
        pwd     = sess_decrypt_string(talloc_tos(), &data, &session_key_blob);
        pwd_old = sess_decrypt_string(talloc_tos(), &data_old, &session_key_blob);
index 663daa4b640cae0101c2d4dbc00c78c679570d1c..eefc2c61d82a21daf811beda31aff4c3b5a6f1e3 100644 (file)
@@ -603,13 +603,51 @@ struct smbd_server_connection {
                        bool blocking_lock_unlock_state;
                } locks;
                struct smbd_smb2_request *requests;
+               /*
+                * seqnum_low is the lowest sequence number
+                * we will accept.
+                */
                uint64_t seqnum_low;
-               uint32_t credits_granted;
-               uint32_t max_credits;
+               /*
+                * seqnum_range is the range of credits we have
+                * granted from the sequence windows starting
+                * at seqnum_low.
+                *
+                * This gets incremented when new credits are
+                * granted and gets decremented when the
+                * lowest sequence number is consumed
+                * (when seqnum_low gets incremented).
+                */
+               uint16_t seqnum_range;
+               /*
+                * credits_grantedThe number of credits we have currently granted
+                * to the client.
+                *
+                * This gets incremented when new credits are
+                * granted and gets decremented when any credit
+                * is comsumed.
+                *
+                * Note: the decrementing is different compared
+                *       to seqnum_range.
+                */
+               uint16_t credits_granted;
+               /*
+                * The maximum number of credits we will ever
+                * grant to the client.
+                *
+                * Typically we will only grant 1/16th of
+                * max_credits.
+                *
+                * This is the "server max credits" parameter.
+                */
+               uint16_t max_credits;
+               /*
+                * a bitmap of size max_credits
+                */
+               struct bitmap *credits_bitmap;
                uint32_t max_trans;
                uint32_t max_read;
                uint32_t max_write;
-               struct bitmap *credits_bitmap;
                bool compound_related_in_progress;
        } smb2;
 };
index 429250ee196d081ad7c519dbad15461c0580ef8f..e87d132c6224dcb07594fdc358cc9db0b16da641 100644 (file)
@@ -143,11 +143,6 @@ void send_nt_replies(connection_struct *conn,
                             total_sent_thistime + alignment_offset
                             + data_alignment_offset);
 
-               /*
-                * We might have had SMBnttranss in req->inbuf, fix that.
-                */
-               SCVAL(req->outbuf, smb_com, SMBnttrans);
-
                /*
                 * Set total params and data to be sent.
                 */
@@ -3255,6 +3250,12 @@ void reply_nttranss(struct smb_request *req)
 
        show_msg((char *)req->inbuf);
 
+       /* Windows clients expect all replies to
+          an NT transact secondary (SMBnttranss 0xA1)
+          to have a command code of NT transact
+          (SMBnttrans 0xA0). See bug #8989 for details. */
+       req->cmd = SMBnttrans;
+
        if (req->wct < 18) {
                reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
                END_PROFILE(SMBnttranss);
index 4f243e2e9ff63e732e8bbd29342abb818b265c6b..02bd32a3fcb740ce42811fe6dc5ce60648b8f135 100644 (file)
@@ -76,9 +76,22 @@ int linux_setlease(int fd, int leasetype)
 {
        int ret;
 
+       /* First set the signal handler. */
+       if (linux_set_lease_sighandler(fd) == -1) {
+               return -1;
+       }
        ret = fcntl(fd, F_SETLEASE, leasetype);
        if (ret == -1 && errno == EACCES) {
                set_effective_capability(LEASE_CAPABILITY);
+               /*
+                * Bug 8974 - work around Linux kernel bug
+                * https://bugzilla.kernel.org/show_bug.cgi?id=43336.
+                * "fcntl(F_SETLEASE) resets signal number when
+                *  called multiple times"
+                */
+               if (linux_set_lease_sighandler(fd) == -1) {
+                       return -1;
+               }
                ret = fcntl(fd, F_SETLEASE, leasetype);
        }
 
index 8a5d81f87b227a9dc8e09f59bc1233e39d2eb6fe..cef0677ed1dbcf1d3f3c0bca5ae33356cc9c39c6 100644 (file)
@@ -114,10 +114,11 @@ static NTSTATUS smbd_initialize_smb2(struct smbd_server_connection *sconn)
        sconn->smb2.sessions.limit = 0x0000FFFE;
        sconn->smb2.sessions.list = NULL;
        sconn->smb2.seqnum_low = 0;
-       sconn->smb2.credits_granted = 0;
+       sconn->smb2.seqnum_range = 1;
+       sconn->smb2.credits_granted = 1;
        sconn->smb2.max_credits = lp_smb2_max_credits();
        sconn->smb2.credits_bitmap = bitmap_talloc(sconn,
-                       DEFAULT_SMB2_MAX_CREDIT_BITMAP_FACTOR*sconn->smb2.max_credits);
+                                                  sconn->smb2.max_credits);
        if (sconn->smb2.credits_bitmap == NULL) {
                return NT_STATUS_NO_MEMORY;
        }
@@ -298,67 +299,116 @@ static NTSTATUS smbd_smb2_request_create(struct smbd_server_connection *sconn,
        return NT_STATUS_OK;
 }
 
-static bool smb2_validate_message_id(struct smbd_server_connection *sconn,
-                               const uint8_t *inhdr)
+static bool smb2_validate_sequence_number(struct smbd_server_connection *sconn,
+                                         uint64_t message_id, uint64_t seq_id)
 {
-       uint64_t message_id = BVAL(inhdr, SMB2_HDR_MESSAGE_ID);
        struct bitmap *credits_bm = sconn->smb2.credits_bitmap;
-       uint16_t opcode = IVAL(inhdr, SMB2_HDR_OPCODE);
-       unsigned int bitmap_offset;
+       unsigned int offset;
 
-       if (opcode == SMB2_OP_CANCEL) {
-               /* SMB2_CANCEL requests by definition resend messageids. */
-               return true;
+       if (seq_id < sconn->smb2.seqnum_low) {
+               DEBUG(0,("smb2_validate_sequence_number: bad message_id "
+                       "%llu (sequence id %llu) "
+                       "(granted = %u, low = %llu, range = %u)\n",
+                       (unsigned long long)message_id,
+                       (unsigned long long)seq_id,
+                       (unsigned int)sconn->smb2.credits_granted,
+                       (unsigned long long)sconn->smb2.seqnum_low,
+                       (unsigned int)sconn->smb2.seqnum_range));
+               return false;
        }
 
-       if (message_id < sconn->smb2.seqnum_low ||
-                       message_id > (sconn->smb2.seqnum_low +
-                       (sconn->smb2.max_credits * DEFAULT_SMB2_MAX_CREDIT_BITMAP_FACTOR))) {
-               DEBUG(0,("smb2_validate_message_id: bad message_id "
-                       "%llu (low = %llu, max = %lu)\n",
+       if (seq_id >= sconn->smb2.seqnum_low + sconn->smb2.seqnum_range) {
+               DEBUG(0,("smb2_validate_sequence_number: bad message_id "
+                       "%llu (sequence id %llu) "
+                       "(granted = %u, low = %llu, range = %u)\n",
                        (unsigned long long)message_id,
+                       (unsigned long long)seq_id,
+                       (unsigned int)sconn->smb2.credits_granted,
                        (unsigned long long)sconn->smb2.seqnum_low,
-                       (unsigned long)sconn->smb2.max_credits ));
+                       (unsigned int)sconn->smb2.seqnum_range));
                return false;
        }
 
-       if (sconn->smb2.credits_granted == 0) {
-               DEBUG(0,("smb2_validate_message_id: client used more "
-                        "credits than granted message_id (%llu)\n",
-                        (unsigned long long)message_id));
+       offset = seq_id % sconn->smb2.max_credits;
+
+       if (bitmap_query(credits_bm, offset)) {
+               DEBUG(0,("smb2_validate_sequence_number: duplicate message_id "
+                       "%llu (sequence id %llu) "
+                       "(granted = %u, low = %llu, range = %u) "
+                       "(bm offset %u)\n",
+                       (unsigned long long)message_id,
+                       (unsigned long long)seq_id,
+                       (unsigned int)sconn->smb2.credits_granted,
+                       (unsigned long long)sconn->smb2.seqnum_low,
+                       (unsigned int)sconn->smb2.seqnum_range,
+                       offset));
                return false;
        }
 
-       /* client just used a credit. */
-       sconn->smb2.credits_granted -= 1;
+       /* Mark the message_ids as seen in the bitmap. */
+       bitmap_set(credits_bm, offset);
 
-       /* Mark the message_id as seen in the bitmap. */
-       bitmap_offset = (unsigned int)(message_id %
-                       (uint64_t)(sconn->smb2.max_credits * DEFAULT_SMB2_MAX_CREDIT_BITMAP_FACTOR));
-       if (bitmap_query(credits_bm, bitmap_offset)) {
-               DEBUG(0,("smb2_validate_message_id: duplicate message_id "
-                       "%llu (bm offset %u)\n",
-                       (unsigned long long)message_id,
-                       bitmap_offset));
+       if (seq_id != sconn->smb2.seqnum_low) {
+               return true;
+       }
+
+       /*
+        * Move the window forward by all the message_id's
+        * already seen.
+        */
+       while (bitmap_query(credits_bm, offset)) {
+               DEBUG(10,("smb2_validate_sequence_number: clearing "
+                         "id %llu (position %u) from bitmap\n",
+                         (unsigned long long)(sconn->smb2.seqnum_low),
+                         offset));
+               bitmap_clear(credits_bm, offset);
+
+               sconn->smb2.seqnum_low += 1;
+               sconn->smb2.seqnum_range -= 1;
+               offset = sconn->smb2.seqnum_low % sconn->smb2.max_credits;
+       }
+
+       return true;
+}
+
+static bool smb2_validate_message_id(struct smbd_server_connection *sconn,
+                               const uint8_t *inhdr)
+{
+       uint64_t message_id = BVAL(inhdr, SMB2_HDR_MESSAGE_ID);
+       uint16_t opcode = IVAL(inhdr, SMB2_HDR_OPCODE);
+       bool ok;
+
+       if (opcode == SMB2_OP_CANCEL) {
+               /* SMB2_CANCEL requests by definition resend messageids. */
+               return true;
+       }
+
+       DEBUG(11, ("smb2_validate_message_id: mid %llu, credits_granted %llu, "
+                  "seqnum low/range: %llu/%llu\n",
+                  (unsigned long long) message_id,
+                  (unsigned long long) sconn->smb2.credits_granted,
+                  (unsigned long long) sconn->smb2.seqnum_low,
+                  (unsigned long long) sconn->smb2.seqnum_range));
+
+       if (sconn->smb2.credits_granted < 1) {
+               DEBUG(0, ("smb2_validate_message_id: client used more "
+                         "credits than granted, mid %llu, credits_granted %llu, "
+                         "seqnum low/range: %llu/%llu\n",
+                         (unsigned long long) message_id,
+                         (unsigned long long) sconn->smb2.credits_granted,
+                         (unsigned long long) sconn->smb2.seqnum_low,
+                         (unsigned long long) sconn->smb2.seqnum_range));
                return false;
        }
-       bitmap_set(credits_bm, bitmap_offset);
 
-       if (message_id == sconn->smb2.seqnum_low + 1) {
-               /* Move the window forward by all the message_id's
-                  already seen. */
-               while (bitmap_query(credits_bm, bitmap_offset)) {
-                       DEBUG(10,("smb2_validate_message_id: clearing "
-                               "id %llu (position %u) from bitmap\n",
-                               (unsigned long long)(sconn->smb2.seqnum_low + 1),
-                               bitmap_offset ));
-                       bitmap_clear(credits_bm, bitmap_offset);
-                       sconn->smb2.seqnum_low += 1;
-                       bitmap_offset = (bitmap_offset + 1) %
-                               (sconn->smb2.max_credits * DEFAULT_SMB2_MAX_CREDIT_BITMAP_FACTOR);
-               }
+       ok = smb2_validate_sequence_number(sconn, message_id, message_id);
+       if (!ok) {
+               return false;
        }
 
+       /* substract used credits */
+       sconn->smb2.credits_granted -= 1;
+
        return true;
 }
 
@@ -453,10 +503,33 @@ static void smb2_set_operation_credit(struct smbd_server_connection *sconn,
        uint8_t *outhdr = (uint8_t *)out_vector->iov_base;
        uint16_t credits_requested;
        uint32_t out_flags;
+       uint16_t cmd;
+       NTSTATUS out_status;
        uint16_t credits_granted = 0;
+       uint64_t credits_possible;
+       uint16_t current_max_credits;
+
+       /*
+        * first we grant only 1/16th of the max range.
+        *
+        * Windows also starts with the 1/16th and then grants
+        * more later. I was only able to trigger higher
+        * values, when using a verify high credit charge.
+        *
+        * TODO: scale up depending one load, free memory
+        *       or other stuff.
+        *       Maybe also on the relationship between number
+        *       of requests and the used sequence number.
+        *       Which means we would grant more credits
+        *       for client which use multi credit requests.
+        */
+       current_max_credits = sconn->smb2.max_credits / 16;
+       current_max_credits = MAX(current_max_credits, 1);
 
+       cmd = SVAL(inhdr, SMB2_HDR_OPCODE);
        credits_requested = SVAL(inhdr, SMB2_HDR_CREDIT);
        out_flags = IVAL(outhdr, SMB2_HDR_FLAGS);
+       out_status = NT_STATUS(IVAL(outhdr, SMB2_HDR_STATUS));
 
        SMB_ASSERT(sconn->smb2.max_credits >= sconn->smb2.credits_granted);
 
@@ -466,48 +539,83 @@ static void smb2_set_operation_credit(struct smbd_server_connection *sconn,
                 * response, we should not grant
                 * credits on the final response.
                 */
-               credits_requested = 0;
-       }
+               credits_granted = 0;
+       } else if (credits_requested > 0) {
+               uint16_t additional_max = 0;
+               uint16_t additional_credits = credits_requested - 1;
+
+               switch (cmd) {
+               case SMB2_OP_NEGPROT:
+                       break;
+               case SMB2_OP_SESSSETUP:
+                       /*
+                        * Windows 2012 RC1 starts to grant
+                        * additional credits
+                        * with a successful session setup
+                        */
+                       if (NT_STATUS_IS_OK(out_status)) {
+                               additional_max = 32;
+                       }
+                       break;
+               default:
+                       /*
+                        * We match windows and only grant additional credits
+                        * in chunks of 32.
+                        */
+                       additional_max = 32;
+                       break;
+               }
 
-       if (credits_requested) {
-               uint16_t modified_credits_requested;
-               uint32_t multiplier;
+               additional_credits = MIN(additional_credits, additional_max);
 
+               credits_granted = 1 + additional_credits;
+       } else if (sconn->smb2.credits_granted == 0) {
                /*
-                * Split up max_credits into 1/16ths, and then scale
-                * the requested credits by how many 16ths have been
-                * currently granted. Less than 1/16th == grant all
-                * requested (100%), scale down as more have been
-                * granted. Never ask for less than 1 as the client
-                * asked for at least 1. JRA.
+                * Make sure the client has always at least one credit
                 */
-
-               multiplier = 16 - (((sconn->smb2.credits_granted * 16) / sconn->smb2.max_credits) % 16);
-
-               modified_credits_requested = (multiplier * credits_requested) / 16;
-               if (modified_credits_requested == 0) {
-                       modified_credits_requested = 1;
-               }
-
-               /* Remember what we gave out. */
-               credits_granted = MIN(modified_credits_requested,
-                                       (sconn->smb2.max_credits - sconn->smb2.credits_granted));
+               credits_granted = 1;
        }
 
-       if (credits_granted == 0 && sconn->smb2.credits_granted == 0) {
-               /* First negprot packet, or ensure the client credits can
-                  never drop to zero. */
-               credits_granted = 1;
+       /*
+        * sequence numbers should not wrap
+        *
+        * 1. calculate the possible credits until
+        *    the sequence numbers start to wrap on 64-bit.
+        *
+        * 2. UINT64_MAX is used for Break Notifications.
+        *
+        * 2. truncate the possible credits to the maximum
+        *    credits we want to grant to the client in total.
+        *
+        * 3. remove the range we'll already granted to the client
+        *    this makes sure the client consumes the lowest sequence
+        *    number, before we can grant additional credits.
+        */
+       credits_possible = UINT64_MAX - sconn->smb2.seqnum_low;
+       if (credits_possible > 0) {
+               /* remove UINT64_MAX */
+               credits_possible -= 1;
        }
+       credits_possible = MIN(credits_possible, current_max_credits);
+       credits_possible -= sconn->smb2.seqnum_range;
+
+       credits_granted = MIN(credits_granted, credits_possible);
 
        SSVAL(outhdr, SMB2_HDR_CREDIT, credits_granted);
        sconn->smb2.credits_granted += credits_granted;
+       sconn->smb2.seqnum_range += credits_granted;
 
        DEBUG(10,("smb2_set_operation_credit: requested %u, "
-               "granted %u, total granted %u\n",
+               "granted %u, current possible/max %u/%u, "
+               "total granted/max/low/range %u/%u/%llu/%u\n",
                (unsigned int)credits_requested,
                (unsigned int)credits_granted,
-               (unsigned int)sconn->smb2.credits_granted ));
+               (unsigned int)credits_possible,
+               (unsigned int)current_max_credits,
+               (unsigned int)sconn->smb2.credits_granted,
+               (unsigned int)sconn->smb2.max_credits,
+               (unsigned long long)sconn->smb2.seqnum_low,
+               (unsigned int)sconn->smb2.seqnum_range));
 }
 
 static void smb2_calculate_credits(const struct smbd_smb2_request *inreq,
@@ -2522,6 +2630,12 @@ void smbd_smb2_first_negprot(struct smbd_server_connection *sconn,
                return;
        }
 
+       status = smbd_smb2_request_validate(req);
+       if (!NT_STATUS_IS_OK(status)) {
+               smbd_server_connection_terminate(sconn, nt_errstr(status));
+               return;
+       }
+
        status = smbd_smb2_request_setup_out(req);
        if (!NT_STATUS_IS_OK(status)) {
                smbd_server_connection_terminate(sconn, nt_errstr(status));
index a8e5ec37a43c820500e23f4e6a71e95582cdc373..5aeed8c74eb3376a3eadf848818d6ca24b707d41 100644 (file)
@@ -298,7 +298,7 @@ static struct tevent_req *smbd_smb2_write_send(TALLOC_CTX *mem_ctx,
 
        if (!NT_STATUS_EQUAL(status, NT_STATUS_RETRY)) {
                /* Real error in setting up aio. Fail. */
-               tevent_req_nterror(req, NT_STATUS_FILE_CLOSED);
+               tevent_req_nterror(req, status);
                return tevent_req_post(req, ev);
        }
 
index c7cf1a27d7bcb1fd4306cbb0ba623306cd06ee6e..9514c72fb807dd89a40316cade7c259dac90a5db 100644 (file)
@@ -863,12 +863,6 @@ void send_trans2_replies(connection_struct *conn,
                reply_outbuf(req, 10, total_sent_thistime + alignment_offset
                             + data_alignment_offset);
 
-               /*
-                * We might have SMBtrans2s in req which was transferred to
-                * the outbuf, fix that.
-                */
-               SCVAL(req->outbuf, smb_com, SMBtrans2);
-
                /* Set total params and data to be sent */
                SSVAL(req->outbuf,smb_tprcnt,paramsize);
                SSVAL(req->outbuf,smb_tdrcnt,datasize);
@@ -8839,6 +8833,15 @@ void reply_transs2(struct smb_request *req)
 
        show_msg((char *)req->inbuf);
 
+       /* Windows clients expect all replies to
+          a transact secondary (SMBtranss2 0x33)
+          to have a command code of transact
+          (SMBtrans2 0x32). See bug #8989
+          and also [MS-CIFS] section 2.2.4.47.2
+          for details.
+       */
+       req->cmd = SMBtrans2;
+
        if (req->wct < 8) {
                reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
                END_PROFILE(SMBtranss2);
index e7c0378697ab9ae82b01df4dfd0473243fbc0a5b..1f6eb6c4d42bb85a6da64f372db93f85db58fa20 100644 (file)
@@ -151,7 +151,7 @@ static char *make_parm_name(const char *label)
 void get_xsrf_token(const char *username, const char *pass,
                    const char *formname, time_t xsrf_time, char token_str[33])
 {
-       struct MD5Context md5_ctx;
+       MD5_CTX md5_ctx;
        uint8_t token[16];
        int i;
 
index 4c078dfadee5f9201e72175f5b07694b01c318b0..55069f6477acc3bb0c3d58519743b7ec0656053b 100644 (file)
@@ -306,7 +306,7 @@ static NTSTATUS check_info3_in_group(struct netr_SamInfo3 *info3,
        status = sid_array_from_info3(talloc_tos(), info3,
                                      &token->sids,
                                      &token->num_sids,
-                                     true, false);
+                                     true);
        if (!NT_STATUS_IS_OK(status)) {
                TALLOC_FREE(frame);
                return status;
index 9c38b5a2a9a5fcc44db2360c9f2c00f0e9c95358..7487f8ffcf471c453272f60ede71baaed3c83044 100644 (file)
@@ -123,41 +123,87 @@ struct tevent_req *winbindd_sids_to_xids_send(TALLOC_CTX *mem_ctx,
 static bool winbindd_sids_to_xids_in_cache(struct dom_sid *sid,
                                           struct id_map *map)
 {
-       uid_t uid;
-       gid_t gid;
-       bool expired;
+       bool is_online = is_domain_online(find_our_domain());
+       gid_t gid = (gid_t)-1;
+       bool gid_expired = false;
+       bool gid_cached = false;
+       bool gid_negative = false;
+       uid_t uid = (uid_t)-1;
+       bool uid_expired = false;
+       bool uid_cached = false;
+       bool uid_negative = false;
 
        if (!winbindd_use_idmap_cache()) {
                return false;
        }
+
        /*
         * SIDS_TO_XIDS is primarily used to resolve the user's group
         * sids. So we check groups before users.
         */
-       if (idmap_cache_find_sid2gid(sid, &gid, &expired)) {
-               if (expired && is_domain_offline(find_our_domain())) {
-                       return false;
+       gid_cached = idmap_cache_find_sid2gid(sid, &gid, &gid_expired);
+       if (!is_online) {
+               gid_expired = false;
+       }
+       if (gid_cached && !gid_expired) {
+               if (gid != (gid_t)-1) {
+                       map->sid = sid;
+                       map->xid.id = gid;
+                       map->xid.type = ID_TYPE_GID;
+                       map->status = ID_MAPPED;
+                       return true;
+               }
+               gid_negative = true;
+       }
+       uid_cached = idmap_cache_find_sid2uid(sid, &uid, &uid_expired);
+       if (!is_online) {
+               uid_expired = false;
+       }
+       if (uid_cached && !uid_expired) {
+               if (uid != (uid_t)-1) {
+                       map->sid = sid;
+                       map->xid.id = uid;
+                       map->xid.type = ID_TYPE_UID;
+                       map->status = ID_MAPPED;
+                       return true;
                }
+               uid_negative = true;
+       }
+
+       /*
+        * Here we know that we only have negative
+        * or no entries.
+        *
+        * All valid cases already returned to the caller.
+        */
+
+       if (gid_negative && uid_negative) {
+               map->sid = sid;
+               map->xid.id = UINT32_MAX;
+               map->xid.type = ID_TYPE_NOT_SPECIFIED;
+               map->status = ID_MAPPED;
+               return true;
+       }
+
+       if (gid_negative) {
                map->sid = sid;
-               map->xid.id = gid;
+               map->xid.id = gid; /* this is (gid_t)-1 */
                map->xid.type = ID_TYPE_GID;
                map->status = ID_MAPPED;
                return true;
        }
-       if (idmap_cache_find_sid2uid(sid, &uid, &expired)) {
-               if (expired && is_domain_online(find_our_domain())) {
-                       return false;
-               }
+
+       if (uid_negative) {
                map->sid = sid;
-               map->xid.id = uid;
+               map->xid.id = uid; /* this is (uid_t)-1 */
                map->xid.type = ID_TYPE_UID;
                map->status = ID_MAPPED;
                return true;
        }
+
        return false;
 }
 
-
 static void winbindd_sids_to_xids_lookupsids_done(struct tevent_req *subreq)
 {
        struct tevent_req *req = tevent_req_callback_data(
@@ -256,21 +302,26 @@ NTSTATUS winbindd_sids_to_xids_recv(struct tevent_req *req,
 
        for (i=0; i<state->num_sids; i++) {
                char type;
-               uint64_t unix_id = (uint64_t)-1;
+               uint32_t unix_id = UINT32_MAX;
                bool found = true;
 
                if (state->cached[i].sid != NULL) {
                        unix_id = state->cached[i].xid.id;
-                       if (state->cached[i].xid.type == ID_TYPE_UID) {
+
+                       switch (state->cached[i].xid.type) {
+                       case ID_TYPE_UID:
                                type = 'U';
-                       } else {
+                               break;
+                       case ID_TYPE_GID:
                                type = 'G';
+                               break;
+                       default:
+                               found = false;
+                               break;
                        }
                } else {
                        unix_id = state->ids.ids[num_non_cached].unix_id;
-                       if (unix_id == -1) {
-                               found = false;
-                       }
+
                        switch(state->ids.ids[num_non_cached].type) {
                        case WBC_ID_TYPE_UID:
                                type = 'U';
@@ -286,10 +337,15 @@ NTSTATUS winbindd_sids_to_xids_recv(struct tevent_req *req,
                                break;
                        default:
                                found = false;
+                               break;
                        }
                        num_non_cached += 1;
                }
 
+               if (unix_id == UINT32_MAX) {
+                       found = false;
+               }
+
                if (found) {
                        result = talloc_asprintf_append_buffer(
                                result, "%c%lu\n", type,
index 63cb2d2f02a908345f8eeb7c7ead5bffc95a0952..37b65783c8b3a6099051d034210641519d75c521 100644 (file)
@@ -1033,12 +1033,18 @@ NTSTATUS lookup_usergroups_cached(struct winbindd_domain *domain,
                return NT_STATUS_UNSUCCESSFUL;
        }
 
-       /* Skip Domain local groups outside our domain.
-          We'll get these from the getsidaliases() RPC call. */
+       /*
+        * Before bug #7843 the "Domain Local" groups were added with a
+        * lookupuseraliases call, but this isn't done anymore for our domain
+        * so we need to resolve resource groups here.
+        *
+        * When to use Resource Groups:
+        * http://technet.microsoft.com/en-us/library/cc753670%28v=WS.10%29.aspx
+        */
        status = sid_array_from_info3(mem_ctx, info3,
                                      user_sids,
                                      &num_groups,
-                                     false, true);
+                                     false);
 
        if (!NT_STATUS_IS_OK(status)) {
                TALLOC_FREE(info3);
index 7f4af4f08cd8183b829e5bf6b9f6aefe47e30cf4..78de8cd006ece6ca712950aeb7263d3ac203d5ef 100644 (file)
@@ -110,7 +110,7 @@ _PUBLIC_ NTSTATUS cli_credentials_get_ntlm_response(struct cli_credentials *cred
                /* LM Key is incompatible... */
                *flags &= ~CLI_CRED_LANMAN_AUTH;
        } else if (*flags & CLI_CRED_NTLM2) {
-               struct MD5Context md5_session_nonce_ctx;
+               MD5_CTX md5_session_nonce_ctx;
                uint8_t session_nonce[16];
                uint8_t session_nonce_hash[16];
                uint8_t user_session_key[16];
index 53d12d96df39ac0604b09dbe79c9d7225f2fb202..8d584a59e9aaa07dbf27a49899dc710cc07e3135 100644 (file)
@@ -1351,7 +1351,7 @@ static int setup_primary_wdigest(struct setup_password_fields_io *io,
        }
 
        for (i=0; i < ARRAY_SIZE(wdigest); i++) {
-               struct MD5Context md5;
+               MD5_CTX md5;
                MD5Init(&md5);
                if (wdigest[i].nt4dom) {
                        MD5Update(&md5, wdigest[i].nt4dom->data, wdigest[i].nt4dom->length);
index d6d53db32972d139e3f1001d13749776b195e900..baa64d431bdca16532ab89bbaf58e67aa1f795e6 100644 (file)
@@ -103,7 +103,7 @@ bool signing_good(struct smb_signing_context *sign_info,
 void sign_outgoing_message(struct smb_request_buffer *out, DATA_BLOB *mac_key, unsigned int seq_num) 
 {
        uint8_t calc_md5_mac[16];
-       struct MD5Context md5_ctx;
+       MD5_CTX md5_ctx;
 
        /*
         * Firstly put the sequence number into the first 4 bytes.
@@ -138,7 +138,7 @@ bool check_signed_incoming_message(struct smb_request_buffer *in, DATA_BLOB *mac
        uint8_t calc_md5_mac[16];
        uint8_t *server_sent_mac;
        uint8_t sequence_buf[8];
-       struct MD5Context md5_ctx;
+       MD5_CTX md5_ctx;
        const size_t offset_end_of_sig = (HDR_SS_FIELD + 8);
        int i;
        const int sign_range = 0;
index e1094f20571c3a9a8c57a9793db5158105472b79..861d746fd118c8db2ce1a2be6f4285c765856c2d 100644 (file)
@@ -274,7 +274,7 @@ static NTSTATUS libnet_SetPassword_samr_handle_26(struct libnet_context *ctx, TA
        DATA_BLOB session_key;
        DATA_BLOB confounded_session_key = data_blob_talloc(mem_ctx, NULL, 16);
        uint8_t confounder[16]; 
-       struct MD5Context md5;
+       MD5_CTX md5;
 
        if (r->samr_handle.in.info21) {
                return NT_STATUS_INVALID_PARAMETER_MIX;
@@ -330,7 +330,7 @@ static NTSTATUS libnet_SetPassword_samr_handle_25(struct libnet_context *ctx, TA
        DATA_BLOB session_key;
        DATA_BLOB confounded_session_key = data_blob_talloc(mem_ctx, NULL, 16);
        uint8_t confounder[16]; 
-       struct MD5Context md5;
+       MD5_CTX md5;
 
        if (!r->samr_handle.in.info21) {
                return NT_STATUS_INVALID_PARAMETER_MIX;
index 969d698a16f51777e4af3ead95c6917895df65d4..55e17672fd34567e4e7f6deb16d35faf7f363c7a 100644 (file)
@@ -107,7 +107,7 @@ static NTSTATUS ntp_signd_process(struct ntp_signd_connection *ntp_signd_conn,
        enum ndr_err_code ndr_err;
        struct ldb_result *res;
        const char *attrs[] = { "unicodePwd", "userAccountControl", "cn", NULL };
-       struct MD5Context ctx;
+       MD5_CTX ctx;
        struct samr_Password *nt_hash;
        uint32_t user_account_control;
        int ret;
index f2dcd05d8973e45eae3372707751c31b223b64a5..ee13a11dc9ea2973366297b01b57eb0f5e694ae1 100644 (file)
@@ -544,7 +544,7 @@ NTSTATUS samr_set_password_ex(struct dcesrv_call_state *dce_call,
        DATA_BLOB new_password;
        DATA_BLOB co_session_key;
        DATA_BLOB session_key = data_blob(NULL, 0);
-       struct MD5Context ctx;
+       MD5_CTX ctx;
 
        nt_status = dcesrv_fetch_session_key(dce_call->conn, &session_key);
        if (!NT_STATUS_IS_OK(nt_status)) {
index 36b2b5540c0f70ea1f14e5745ad0ea6967ff8f9b..c5fd6b84bce463c5d2fe80e8ccc7c15e4be0c288 100644 (file)
@@ -350,6 +350,7 @@ struct torture_suite *torture_local_ndr(TALLOC_CTX *mem_ctx)
        torture_suite_add_suite(suite, ndr_netlogon_suite(suite));
        torture_suite_add_suite(suite, ndr_drsuapi_suite(suite));
        torture_suite_add_suite(suite, ndr_spoolss_suite(suite));
+       torture_suite_add_suite(suite, ndr_ntprinting_suite(suite));
        torture_suite_add_suite(suite, ndr_samr_suite(suite));
        torture_suite_add_suite(suite, ndr_drsblobs_suite(suite));
        torture_suite_add_suite(suite, ndr_nbt_suite(suite));
diff --git a/source4/torture/ndr/ntprinting.c b/source4/torture/ndr/ntprinting.c
new file mode 100644 (file)
index 0000000..44ad86b
--- /dev/null
@@ -0,0 +1,440 @@
+/*
+   Unix SMB/CIFS implementation.
+   test suite for ntprinting ndr operations
+
+   Copyright (C) Guenther Deschner 2012
+
+   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/ndr/ndr.h"
+#include "librpc/gen_ndr/ndr_ntprinting.h"
+#include "torture/ndr/proto.h"
+
+static const uint8_t ntprinting_printer_data[] = {
+       0x48, 0x10, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9d, 0x0e, 0x03, 0x09,
+       0x00, 0x00, 0x00, 0x00, 0x24, 0x13, 0xb8, 0x4e, 0x00, 0x4b, 0x79, 0x6f,
+       0x63, 0x65, 0x72, 0x61, 0x2d, 0x35, 0x30, 0x30, 0x00, 0x6b, 0x79, 0x6f,
+       0x63, 0x65, 0x72, 0x61, 0x2d, 0x35, 0x30, 0x30, 0x00, 0x53, 0x61, 0x6d,
+       0x62, 0x61, 0x20, 0x50, 0x72, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x20, 0x50,
+       0x6f, 0x72, 0x74, 0x00, 0x6b, 0x79, 0x6f, 0x63, 0x65, 0x72, 0x61, 0x2d,
+       0x35, 0x30, 0x30, 0x00, 0x4b, 0x79, 0x6f, 0x63, 0x65, 0x72, 0x61, 0x20,
+       0x54, 0x61, 0x73, 0x6b, 0x41, 0x6c, 0x66, 0x61, 0x20, 0x35, 0x30, 0x30,
+       0x63, 0x69, 0x00, 0x62, 0x75, 0x6c, 0x6c, 0x70, 0x65, 0x6e, 0x00, 0x00,
+       0x77, 0x69, 0x6e, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x00, 0x52, 0x41, 0x57,
+       0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x5c, 0x5c, 0x69, 0x72, 0x6f, 0x62,
+       0x6f, 0x74, 0x5c, 0x4b, 0x79, 0x6f, 0x63, 0x65, 0x72, 0x61, 0x2d, 0x35,
+       0x30, 0x30, 0x00, 0x4c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x00, 0x01, 0x04,
+       0x00, 0x06, 0xdc, 0x00, 0x60, 0x08, 0x01, 0x00, 0x01, 0x00, 0xea, 0x0a,
+       0x6f, 0x08, 0x64, 0x00, 0x01, 0x00, 0x0f, 0x00, 0x58, 0x02, 0x02, 0x00,
+       0x01, 0x00, 0x58, 0x02, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x53, 0xff,
+       0x81, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+       0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x60, 0x08,
+       0x00, 0x00, 0x50, 0x52, 0x49, 0x56, 0xe2, 0x30, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x10, 0x27, 0x10, 0x27, 0x10, 0x27, 0x00, 0x00, 0x10, 0x27, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x54, 0x06, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x02, 0x10, 0x00, 0x5c, 0x4b,
+       0x03, 0x00, 0x68, 0x43, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x75,
+       0xbf, 0xbb, 0x29, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x0e, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x53, 0x4d,
+       0x54, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x70, 0x03, 0x6b, 0x00,
+       0x79, 0x00, 0x6f, 0x00, 0x63, 0x00, 0x65, 0x00, 0x72, 0x00, 0x61, 0x00,
+       0x2d, 0x00, 0x35, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x4a, 0x43,
+       0x4c, 0x54, 0x72, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x00, 0x4d, 0x65,
+       0x64, 0x69, 0x75, 0x6d, 0x00, 0x4a, 0x43, 0x4c, 0x48, 0x61, 0x6c, 0x66,
+       0x74, 0x6f, 0x6e, 0x65, 0x00, 0x47, 0x72, 0x61, 0x64, 0x61, 0x74, 0x69,
+       0x6f, 0x6e, 0x00, 0x4a, 0x43, 0x4c, 0x52, 0x65, 0x64, 0x4c, 0x65, 0x76,
+       0x65, 0x6c, 0x00, 0x4e, 0x6f, 0x6e, 0x65, 0x00, 0x4a, 0x43, 0x4c, 0x47,
+       0x72, 0x65, 0x65, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x00, 0x4e, 0x6f,
+       0x6e, 0x65, 0x00, 0x4a, 0x43, 0x4c, 0x42, 0x6c, 0x75, 0x65, 0x4c, 0x65,
+       0x76, 0x65, 0x6c, 0x00, 0x4e, 0x6f, 0x6e, 0x65, 0x00, 0x4a, 0x43, 0x4c,
+       0x48, 0x75, 0x65, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x00, 0x4e, 0x6f,
+       0x6e, 0x65, 0x00, 0x4a, 0x43, 0x4c, 0x48, 0x75, 0x65, 0x52, 0x65, 0x64,
+       0x00, 0x4e, 0x6f, 0x6e, 0x65, 0x00, 0x4a, 0x43, 0x4c, 0x48, 0x75, 0x65,
+       0x59, 0x65, 0x6c, 0x6c, 0x6f, 0x77, 0x00, 0x4e, 0x6f, 0x6e, 0x65, 0x00,
+       0x4a, 0x43, 0x4c, 0x48, 0x75, 0x65, 0x47, 0x72, 0x65, 0x65, 0x6e, 0x00,
+       0x4e, 0x6f, 0x6e, 0x65, 0x00, 0x4a, 0x43, 0x4c, 0x48, 0x75, 0x65, 0x43,
+       0x79, 0x61, 0x6e, 0x00, 0x4e, 0x6f, 0x6e, 0x65, 0x00, 0x4a, 0x43, 0x4c,
+       0x48, 0x75, 0x65, 0x42, 0x6c, 0x75, 0x65, 0x00, 0x4e, 0x6f, 0x6e, 0x65,
+       0x00, 0x4a, 0x43, 0x4c, 0x48, 0x75, 0x65, 0x4d, 0x61, 0x67, 0x65, 0x6e,
+       0x74, 0x61, 0x00, 0x4e, 0x6f, 0x6e, 0x65, 0x00, 0x4a, 0x43, 0x4c, 0x4c,
+       0x69, 0x67, 0x68, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x47, 0x61, 0x6d, 0x6d,
+       0x61, 0x00, 0x4e, 0x6f, 0x6e, 0x65, 0x00, 0x4a, 0x43, 0x4c, 0x4c, 0x69,
+       0x67, 0x68, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x72,
+       0x61, 0x73, 0x74, 0x00, 0x4e, 0x6f, 0x6e, 0x65, 0x00, 0x4a, 0x43, 0x4c,
+       0x53, 0x61, 0x74, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x4e,
+       0x6f, 0x6e, 0x65, 0x00, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69,
+       0x6f, 0x6e, 0x00, 0x36, 0x30, 0x30, 0x64, 0x70, 0x69, 0x00, 0x4b, 0x43,
+       0x45, 0x63, 0x6f, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x00, 0x4f, 0x66, 0x66,
+       0x00, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x4d, 0x6f, 0x64, 0x65, 0x6c, 0x00,
+       0x43, 0x4d, 0x59, 0x4b, 0x00, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x72, 0x65,
+       0x70, 0x72, 0x6f, 0x64, 0x00, 0x50, 0x72, 0x69, 0x6e, 0x74, 0x65, 0x72,
+       0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x00, 0x43, 0x49, 0x45,
+       0x00, 0x50, 0x72, 0x6e, 0x44, 0x65, 0x66, 0x00, 0x50, 0x61, 0x67, 0x65,
+       0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x00, 0x4f, 0x6e, 0x00, 0x50, 0x61,
+       0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x00, 0x4c, 0x65, 0x74, 0x74, 0x65,
+       0x72, 0x00, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x67, 0x69, 0x6f, 0x6e,
+       0x00, 0x00, 0x4c, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x45, 0x64, 0x67,
+       0x65, 0x00, 0x00, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x53, 0x6c, 0x6f, 0x74,
+       0x00, 0x2a, 0x55, 0x73, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x54, 0x72, 0x61,
+       0x79, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x00, 0x4d, 0x65, 0x64, 0x69, 0x61,
+       0x54, 0x79, 0x70, 0x65, 0x00, 0x41, 0x75, 0x74, 0x6f, 0x00, 0x4f, 0x75,
+       0x74, 0x70, 0x75, 0x74, 0x42, 0x69, 0x6e, 0x00, 0x4e, 0x6f, 0x6e, 0x65,
+       0x00, 0x4b, 0x43, 0x53, 0x74, 0x61, 0x70, 0x6c, 0x65, 0x00, 0x4e, 0x6f,
+       0x6e, 0x65, 0x00, 0x53, 0x74, 0x61, 0x70, 0x6c, 0x65, 0x43, 0x6f, 0x75,
+       0x6e, 0x74, 0x00, 0x4e, 0x6f, 0x6e, 0x65, 0x00, 0x4b, 0x43, 0x50, 0x75,
+       0x6e, 0x63, 0x68, 0x00, 0x4e, 0x6f, 0x6e, 0x65, 0x00, 0x4b, 0x43, 0x42,
+       0x6f, 0x6f, 0x6b, 0x6c, 0x65, 0x74, 0x00, 0x4e, 0x6f, 0x6e, 0x65, 0x00,
+       0x4b, 0x43, 0x46, 0x6f, 0x6c, 0x64, 0x00, 0x4e, 0x6f, 0x6e, 0x65, 0x00,
+       0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x00, 0x46, 0x61, 0x6c, 0x73, 0x65,
+       0x00, 0x4a, 0x6f, 0x67, 0x00, 0x4e, 0x6f, 0x6e, 0x65, 0x00, 0x44, 0x75,
+       0x70, 0x6c, 0x65, 0x78, 0x00, 0x4e, 0x6f, 0x6e, 0x65, 0x00, 0x4b, 0x43,
+       0x43, 0x6f, 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x00, 0x50, 0x72, 0x6e, 0x44,
+       0x65, 0x66, 0x00, 0x4b, 0x6d, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x6d, 0x65,
+       0x6e, 0x74, 0x00, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x00, 0x4b,
+       0x43, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x00, 0x44, 0x65, 0x66,
+       0x61, 0x75, 0x6c, 0x74, 0x00, 0x63, 0x75, 0x70, 0x73, 0x4a, 0x6f, 0x62,
+       0x48, 0x6f, 0x6c, 0x64, 0x55, 0x6e, 0x74, 0x69, 0x6c, 0x00, 0x6e, 0x6f,
+       0x2d, 0x68, 0x6f, 0x6c, 0x64, 0x00, 0x63, 0x75, 0x70, 0x73, 0x4a, 0x6f,
+       0x62, 0x53, 0x68, 0x65, 0x65, 0x74, 0x73, 0x53, 0x74, 0x61, 0x72, 0x74,
+       0x00, 0x6e, 0x6f, 0x6e, 0x65, 0x00, 0x63, 0x75, 0x70, 0x73, 0x4a, 0x6f,
+       0x62, 0x53, 0x68, 0x65, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x64, 0x00, 0x6e,
+       0x6f, 0x6e, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x0c, 0x02, 0x00, 0x00, 0x53, 0x50, 0x55, 0x43, 0x00, 0x06,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+       0x00, 0x00, 0x50, 0x72, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x72, 0x69,
+       0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x50, 0x72, 0x69, 0x6e,
+       0x74, 0x65, 0x72, 0x44, 0x72, 0x69, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74,
+       0x61, 0x5c, 0x54, 0x72, 0x61, 0x79, 0x46, 0x6f, 0x72, 0x6d, 0x53, 0x69,
+       0x7a, 0x65, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xce,
+       0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x50, 0x72, 0x69, 0x6e, 0x74,
+       0x65, 0x72, 0x44, 0x72, 0x69, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61,
+       0x5c, 0x54, 0x72, 0x61, 0x79, 0x46, 0x6f, 0x72, 0x6d, 0x54, 0x61, 0x62,
+       0x6c, 0x65, 0x00, 0x03, 0x00, 0x00, 0x00, 0xce, 0x00, 0x00, 0x00, 0xce,
+       0x00, 0x43, 0x00, 0x61, 0x00, 0x73, 0x00, 0x73, 0x00, 0x65, 0x00, 0x74,
+       0x00, 0x74, 0x00, 0x65, 0x00, 0x20, 0x00, 0x31, 0x00, 0x00, 0x00, 0x4c,
+       0x00, 0x65, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x00, 0x61, 0x00, 0x73, 0x00, 0x73,
+       0x00, 0x65, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x20, 0x00, 0x32,
+       0x00, 0x00, 0x00, 0x4c, 0x00, 0x65, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65,
+       0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x00, 0x61,
+       0x00, 0x73, 0x00, 0x73, 0x00, 0x65, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65,
+       0x00, 0x20, 0x00, 0x33, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x65, 0x00, 0x74,
+       0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x43, 0x00, 0x61, 0x00, 0x73, 0x00, 0x73, 0x00, 0x65, 0x00, 0x74,
+       0x00, 0x74, 0x00, 0x65, 0x00, 0x20, 0x00, 0x34, 0x00, 0x00, 0x00, 0x4c,
+       0x00, 0x65, 0x00, 0x74, 0x00, 0x74, 0x00, 0x65, 0x00, 0x72, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x79, 0x00, 0x70, 0x00, 0x61,
+       0x00, 0x73, 0x00, 0x73, 0x00, 0x20, 0x00, 0x54, 0x00, 0x72, 0x00, 0x61,
+       0x00, 0x79, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x65, 0x00, 0x74, 0x00, 0x74,
+       0x00, 0x65, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x01, 0x00, 0x00, 0x00, 0x50, 0x72, 0x69, 0x6e, 0x74, 0x65, 0x72,
+       0x44, 0x72, 0x69, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x5c, 0x54,
+       0x72, 0x61, 0x79, 0x46, 0x6f, 0x72, 0x6d, 0x4d, 0x61, 0x70, 0x53, 0x69,
+       0x7a, 0x65, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x39,
+       0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x50, 0x72, 0x69, 0x6e, 0x74,
+       0x65, 0x72, 0x44, 0x72, 0x69, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61,
+       0x5c, 0x54, 0x72, 0x61, 0x79, 0x46, 0x6f, 0x72, 0x6d, 0x4d, 0x61, 0x70,
+       0x00, 0x03, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x50, 0x46, 0x37,
+       0x30, 0x30, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x46, 0x37, 0x30,
+       0x30, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x46, 0x37, 0x30, 0x30,
+       0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x46, 0x37, 0x30, 0x30, 0x44,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x46, 0x31, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x50, 0x72,
+       0x69, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x72, 0x69, 0x76, 0x65, 0x72, 0x44,
+       0x61, 0x74, 0x61, 0x5c, 0x54, 0x72, 0x61, 0x79, 0x46, 0x6f, 0x72, 0x6d,
+       0x4b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x53, 0x69, 0x7a, 0x65, 0x00,
+       0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00,
+       0x01, 0x00, 0x00, 0x00, 0x50, 0x72, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x44,
+       0x72, 0x69, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x5c, 0x54, 0x72,
+       0x61, 0x79, 0x46, 0x6f, 0x72, 0x6d, 0x4b, 0x65, 0x79, 0x77, 0x6f, 0x72,
+       0x64, 0x00, 0x03, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x50, 0x46,
+       0x37, 0x30, 0x30, 0x41, 0x00, 0x00, 0x50, 0x46, 0x37, 0x30, 0x30, 0x42,
+       0x00, 0x00, 0x50, 0x46, 0x37, 0x30, 0x30, 0x43, 0x00, 0x00, 0x50, 0x46,
+       0x37, 0x30, 0x30, 0x44, 0x00, 0x00, 0x4d, 0x46, 0x31, 0x00, 0x00, 0x00,
+       0x01, 0x00, 0x00, 0x00, 0x44, 0x73, 0x53, 0x70, 0x6f, 0x6f, 0x6c, 0x65,
+       0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+       0x00, 0x00, 0x44, 0x73, 0x53, 0x70, 0x6f, 0x6f, 0x6c, 0x65, 0x72, 0x5c,
+       0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x00, 0x01,
+       0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x49, 0x00, 0x52, 0x00, 0x4f,
+       0x00, 0x42, 0x00, 0x4f, 0x00, 0x54, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+       0x00, 0x44, 0x73, 0x53, 0x70, 0x6f, 0x6f, 0x6c, 0x65, 0x72, 0x5c, 0x73,
+       0x68, 0x6f, 0x72, 0x74, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4e, 0x61,
+       0x6d, 0x65, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x49,
+       0x00, 0x52, 0x00, 0x4f, 0x00, 0x42, 0x00, 0x4f, 0x00, 0x54, 0x00, 0x00,
+       0x00, 0x01, 0x00, 0x00, 0x00, 0x44, 0x73, 0x53, 0x70, 0x6f, 0x6f, 0x6c,
+       0x65, 0x72, 0x5c, 0x75, 0x4e, 0x43, 0x4e, 0x61, 0x6d, 0x65, 0x00, 0x01,
+       0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x5c, 0x00, 0x49,
+       0x00, 0x52, 0x00, 0x4f, 0x00, 0x42, 0x00, 0x4f, 0x00, 0x54, 0x00, 0x5c,
+       0x00, 0x6b, 0x00, 0x79, 0x00, 0x6f, 0x00, 0x63, 0x00, 0x65, 0x00, 0x72,
+       0x00, 0x61, 0x00, 0x2d, 0x00, 0x35, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+static bool ntprinting_printer_check(struct torture_context *tctx,
+                                    struct ntprinting_printer *r)
+{
+       torture_assert_int_equal(tctx, r->info.attributes, 0x00081048, "attributes");
+       torture_assert_int_equal(tctx, r->info.priority, 1, "priority");
+       torture_assert_int_equal(tctx, r->info.default_priority, 1, "default_priority");
+       torture_assert_int_equal(tctx, r->info.starttime, 0, "startime");
+       torture_assert_int_equal(tctx, r->info.untiltime, 0, "untiltime");
+       torture_assert_int_equal(tctx, r->info.status, 0, "status");
+       torture_assert_int_equal(tctx, r->info.cjobs, 5, "cjobs");
+       torture_assert_int_equal(tctx, r->info.averageppm, 0, "averageppm");
+       torture_assert_int_equal(tctx, r->info.changeid, 0x09030e9d, "changeid");
+       torture_assert_int_equal(tctx, r->info.c_setprinter, 0, "c_setprinter");
+       torture_assert_int_equal(tctx, r->info.setuptime, 0x4eb81324, "setuptime");
+       torture_assert_str_equal(tctx, r->info.servername, "", "servername");
+       torture_assert_str_equal(tctx, r->info.printername, "Kyocera-500", "printername");
+       torture_assert_str_equal(tctx, r->info.sharename, "kyocera-500", "sharename");
+       torture_assert_str_equal(tctx, r->info.portname, "Samba Printer Port", "portname");
+       torture_assert_str_equal(tctx, r->info.drivername, "kyocera-500", "drivername");
+       torture_assert_str_equal(tctx, r->info.comment, "Kyocera TaskAlfa 500ci", "comment");
+       torture_assert_str_equal(tctx, r->info.location, "bullpen", "comment");
+       torture_assert_str_equal(tctx, r->info.sepfile, "", "sepfile");
+       torture_assert_str_equal(tctx, r->info.printprocessor, "winprint", "printprocessor");
+       torture_assert_str_equal(tctx, r->info.datatype, "RAW", "datatype");
+       torture_assert_str_equal(tctx, r->info.parameters, "", "parameters");
+
+       torture_assert(tctx, r->devmode, "devmode");
+       torture_assert_str_equal(tctx, r->devmode->devicename, "\\\\irobot\\Kyocera-500", "devicename");
+       torture_assert_str_equal(tctx, r->devmode->formname, "Letter", "formname");
+       torture_assert_int_equal(tctx, r->devmode->specversion, 0x0401, "specversion");
+       torture_assert_int_equal(tctx, r->devmode->driverversion, 0x0600, "driverversion");
+       torture_assert_int_equal(tctx, r->devmode->size, 0x00dc, "size");
+       torture_assert_int_equal(tctx, r->devmode->driverextra, 0x0860, "driverextra");
+       torture_assert_int_equal(tctx, r->devmode->orientation, 1, "orientation");
+       torture_assert_int_equal(tctx, r->devmode->papersize, 1, "papersize");
+       torture_assert_int_equal(tctx, r->devmode->paperlength, 0x0aea, "paperlength");
+       torture_assert_int_equal(tctx, r->devmode->paperwidth, 0x086f, "paperwidth");
+       torture_assert_int_equal(tctx, r->devmode->scale, 0x0064, "scale");
+       torture_assert_int_equal(tctx, r->devmode->copies, 1, "copies");
+       torture_assert_int_equal(tctx, r->devmode->defaultsource, 0x000f, "defaultsource");
+       torture_assert_int_equal(tctx, r->devmode->printquality, 0x0258, "printquality");
+       torture_assert_int_equal(tctx, r->devmode->color, 2, "color");
+       torture_assert_int_equal(tctx, r->devmode->duplex, 1, "duplex");
+       torture_assert_int_equal(tctx, r->devmode->yresolution, 0x0258, "yresolution");
+       torture_assert_int_equal(tctx, r->devmode->ttoption, 2, "ttoption");
+       torture_assert_int_equal(tctx, r->devmode->collate, 1, "collate");
+       torture_assert_int_equal(tctx, r->devmode->logpixels, 0, "logpixels");
+       torture_assert_int_equal(tctx, r->devmode->fields, 0x0381ff53, "fields");
+       torture_assert_int_equal(tctx, r->devmode->bitsperpel, 0, "bitsperpel");
+       torture_assert_int_equal(tctx, r->devmode->pelswidth, 0, "pelswidth");
+       torture_assert_int_equal(tctx, r->devmode->pelsheight, 0, "pelsheight");
+       torture_assert_int_equal(tctx, r->devmode->displayflags, 1, "displayflags");
+       torture_assert_int_equal(tctx, r->devmode->displayfrequency, 0, "displayfrequency");
+       torture_assert_int_equal(tctx, r->devmode->icmmethod, 1, "icmmethod");
+       torture_assert_int_equal(tctx, r->devmode->icmintent, 2, "icmintent");
+       torture_assert_int_equal(tctx, r->devmode->mediatype, 0x00000101, "mediatype");
+       torture_assert_int_equal(tctx, r->devmode->dithertype, 0, "dithertype");
+       torture_assert_int_equal(tctx, r->devmode->reserved1, 0, "reserved1");
+       torture_assert_int_equal(tctx, r->devmode->reserved2, 0, "reserved2");
+       torture_assert_int_equal(tctx, r->devmode->panningwidth, 0, "panningwidth");
+       torture_assert_int_equal(tctx, r->devmode->panningheight, 0, "panningheight");
+
+       torture_assert(tctx, r->devmode->nt_dev_private, "nt_dev_private");
+       torture_assert_int_equal(tctx, r->devmode->nt_dev_private->length, 2144, "nt_dev_private->length");
+
+       torture_assert_int_equal(tctx, r->count, 11, "count");
+
+       torture_assert_int_equal(tctx, r->printer_data[0].ptr, 1, "ptr");
+       torture_assert_str_equal(tctx, r->printer_data[0].name, "PrinterDriverData", "name");
+       torture_assert_int_equal(tctx, r->printer_data[0].type, 0, "type");
+       torture_assert_int_equal(tctx, r->printer_data[0].data.length, 0, "data.length");
+
+       torture_assert_int_equal(tctx, r->printer_data[1].ptr, 1, "ptr");
+       torture_assert_str_equal(tctx, r->printer_data[1].name, "PrinterDriverData\\TrayFormSize", "name");
+       torture_assert_int_equal(tctx, r->printer_data[1].type, 4, "type");
+       torture_assert_int_equal(tctx, r->printer_data[1].data.length, 4, "data.length");
+
+       torture_assert_int_equal(tctx, r->printer_data[2].ptr, 1, "ptr");
+       torture_assert_str_equal(tctx, r->printer_data[2].name, "PrinterDriverData\\TrayFormTable", "name");
+       torture_assert_int_equal(tctx, r->printer_data[2].type, 3, "type");
+       torture_assert_int_equal(tctx, r->printer_data[2].data.length, 206, "data.length");
+
+       torture_assert_int_equal(tctx, r->printer_data[3].ptr, 1, "ptr");
+       torture_assert_str_equal(tctx, r->printer_data[3].name, "PrinterDriverData\\TrayFormMapSize", "name");
+       torture_assert_int_equal(tctx, r->printer_data[3].type, 4, "type");
+       torture_assert_int_equal(tctx, r->printer_data[3].data.length, 4, "data.length");
+
+       torture_assert_int_equal(tctx, r->printer_data[4].ptr, 1, "ptr");
+       torture_assert_str_equal(tctx, r->printer_data[4].name, "PrinterDriverData\\TrayFormMap", "name");
+       torture_assert_int_equal(tctx, r->printer_data[4].type, 3, "type");
+       torture_assert_int_equal(tctx, r->printer_data[4].data.length, 57, "data.length");
+
+       torture_assert_int_equal(tctx, r->printer_data[5].ptr, 1, "ptr");
+       torture_assert_str_equal(tctx, r->printer_data[5].name, "PrinterDriverData\\TrayFormKeywordSize", "name");
+       torture_assert_int_equal(tctx, r->printer_data[5].type, 4, "type");
+       torture_assert_int_equal(tctx, r->printer_data[5].data.length, 4, "data.length");
+
+       torture_assert_int_equal(tctx, r->printer_data[6].ptr, 1, "ptr");
+       torture_assert_str_equal(tctx, r->printer_data[6].name, "PrinterDriverData\\TrayFormKeyword", "name");
+       torture_assert_int_equal(tctx, r->printer_data[6].type, 3, "type");
+       torture_assert_int_equal(tctx, r->printer_data[6].data.length, 38, "data.length");
+
+       torture_assert_int_equal(tctx, r->printer_data[7].ptr, 1, "ptr");
+       torture_assert_str_equal(tctx, r->printer_data[7].name, "DsSpooler", "name");
+       torture_assert_int_equal(tctx, r->printer_data[7].type, 0, "type");
+       torture_assert_int_equal(tctx, r->printer_data[7].data.length, 0, "data.length");
+
+       torture_assert_int_equal(tctx, r->printer_data[8].ptr, 1, "ptr");
+       torture_assert_str_equal(tctx, r->printer_data[8].name, "DsSpooler\\serverName", "name");
+       torture_assert_int_equal(tctx, r->printer_data[8].type, 1, "type");
+       torture_assert_int_equal(tctx, r->printer_data[8].data.length, 14, "data.length");
+
+       torture_assert_int_equal(tctx, r->printer_data[9].ptr, 1, "ptr");
+       torture_assert_str_equal(tctx, r->printer_data[9].name, "DsSpooler\\shortServerName", "name");
+       torture_assert_int_equal(tctx, r->printer_data[9].type, 1, "type");
+       torture_assert_int_equal(tctx, r->printer_data[9].data.length, 14, "data.length");
+
+       torture_assert_int_equal(tctx, r->printer_data[10].ptr, 1, "ptr");
+       torture_assert_str_equal(tctx, r->printer_data[10].name, "DsSpooler\\uNCName", "name");
+       torture_assert_int_equal(tctx, r->printer_data[10].type, 1, "type");
+       torture_assert_int_equal(tctx, r->printer_data[10].data.length, 42, "data.length");
+
+       return true;
+}
+
+struct torture_suite *ndr_ntprinting_suite(TALLOC_CTX *ctx)
+{
+       struct torture_suite *suite = torture_suite_create(ctx, "ntprinting");
+
+       torture_suite_add_ndr_pull_test(suite,
+                                       ntprinting_printer,
+                                       ntprinting_printer_data,
+                                       ntprinting_printer_check);
+
+       /* pullpush not working atm.
+       torture_suite_add_ndr_pullpush_test(suite,
+                                           ntprinting_printer,
+                                           data_blob_const(ntprinting_printer_data, sizeof(ntprinting_printer_data)),
+                                           ntprinting_printer_check);
+       */
+       return suite;
+}
index ce49d4fb852857a1f478358d3697e8c922ba4499..89eb1a0022a643075057a06800c1e734a301e65c 100644 (file)
@@ -78,7 +78,7 @@ static bool test_ntp_signd(struct torture_context *tctx,
        char *unix_address;
        int sys_errno;
 
-       struct MD5Context ctx;
+       MD5_CTX ctx;
        uint8_t sig[16];
        enum ndr_err_code ndr_err;
        bool ok;
index d0de30966c2af63fa32ea65a2f2543decce35264..26bed195122cd0fcbeb693c299f2f2f8d7ff051a 100644 (file)
@@ -774,7 +774,7 @@ static bool join3(struct torture_context *tctx,
                DATA_BLOB session_key;
                DATA_BLOB confounded_session_key = data_blob_talloc(
                        mem_ctx, NULL, 16);
-               struct MD5Context ctx;
+               MD5_CTX ctx;
                uint8_t confounder[16];
 
                ZERO_STRUCT(u_info);
index 0ba0d2633f04403a3ca07943535feccfb5e6c6ec..0b3dcd45fa0152173b04cce992f0783ad54be703 100644 (file)
@@ -1075,7 +1075,7 @@ static bool test_ntlm2(struct samlogon_state *samlogon_state, char **error_strin
        uint8_t session_nonce_hash[16];
        uint8_t client_chall[8];
 
-       struct MD5Context md5_session_nonce_ctx;
+       MD5_CTX md5_session_nonce_ctx;
        HMACMD5Context hmac_ctx;
 
        ZERO_STRUCT(user_session_key);
index 53cb10abf28071435b5e7c6e55c9adce7c685764..7d9a1e2c44f31d9e091323c5a27f3935919c616f 100644 (file)
@@ -771,7 +771,7 @@ static bool test_SetUserPassEx(struct dcerpc_pipe *p, struct torture_context *tc
        uint8_t confounder[16];
        char *newpass;
        struct dcerpc_binding_handle *b = p->binding_handle;
-       struct MD5Context ctx;
+       MD5_CTX ctx;
        struct samr_GetUserPwInfo pwp;
        struct samr_PwInfo info;
        int policy_min_pw_len = 0;
@@ -856,7 +856,7 @@ static bool test_SetUserPass_25(struct dcerpc_pipe *p, struct torture_context *t
        bool ret = true;
        DATA_BLOB session_key;
        DATA_BLOB confounded_session_key = data_blob_talloc(tctx, NULL, 16);
-       struct MD5Context ctx;
+       MD5_CTX ctx;
        uint8_t confounder[16];
        char *newpass;
        struct dcerpc_binding_handle *b = p->binding_handle;
@@ -1140,7 +1140,7 @@ static bool test_SetUserPass_level_ex(struct dcerpc_pipe *p,
        bool ret = true;
        DATA_BLOB session_key;
        DATA_BLOB confounded_session_key = data_blob_talloc(tctx, NULL, 16);
-       struct MD5Context ctx;
+       MD5_CTX ctx;
        uint8_t confounder[16];
        char *newpass;
        struct dcerpc_binding_handle *b = p->binding_handle;
@@ -2458,7 +2458,7 @@ bool test_ChangePasswordRandomBytes(struct dcerpc_pipe *p, struct torture_contex
        DATA_BLOB session_key;
        DATA_BLOB confounded_session_key = data_blob_talloc(tctx, NULL, 16);
        uint8_t confounder[16];
-       struct MD5Context ctx;
+       MD5_CTX ctx;
 
        bool ret = true;
        struct lsa_String server, account;
index 75adaf447c7274f3a2788db42e36af896b1edff8..fd065fc6183a6a03884c3aa30a9a69b364ca802a 100644 (file)
 #include "libcli/libcli.h"
 #include "libcli/raw/raw_proto.h"
 #include "libcli/resolve/resolve.h"
+#include "libcli/smb2/smb2.h"
+#include "libcli/smb2/smb2_calls.h"
 #include "lib/cmdline/popt_common.h"
 #include "system/filesys.h"
 #include "torture/ndr/ndr.h"
+#include "torture/smb2/proto.h"
 
 #define TORTURE_WELLKNOWN_PRINTER      "torture_wkn_printer"
 #define TORTURE_PRINTER                        "torture_printer"
@@ -51,6 +54,7 @@
 #define TORTURE_DRIVER_TIMESTAMPS      "torture_driver_timestamps"
 #define TORTURE_DRIVER_DELETER         "torture_driver_deleter"
 #define TORTURE_DRIVER_DELETERIN       "torture_driver_deleterin"
+#define TORTURE_PRINTER_STATIC1                "print1"
 
 #define TOP_LEVEL_PRINT_KEY "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Print"
 #define TOP_LEVEL_PRINT_PRINTERS_KEY TOP_LEVEL_PRINT_KEY "\\Printers"
@@ -7726,6 +7730,81 @@ static bool test_print_test_extended(struct torture_context *tctx,
        return ret;
 }
 
+/* use smbd file IO to spool a print job */
+static bool test_print_test_smbd(struct torture_context *tctx,
+                                void *private_data)
+{
+       struct torture_printer_context *t =
+               (struct torture_printer_context *)talloc_get_type_abort(private_data, struct torture_printer_context);
+       struct dcerpc_pipe *p = t->spoolss_pipe;
+       struct dcerpc_binding_handle *b = p->binding_handle;
+       NTSTATUS status;
+       uint32_t count;
+       union spoolss_JobInfo *info = NULL;
+       int i;
+
+       struct smb2_tree *tree;
+       struct smb2_handle job_h;
+       struct cli_credentials *credentials = cmdline_credentials;
+       struct smbcli_options options;
+       TALLOC_CTX *mem_ctx = talloc_new(tctx);
+       /*
+        * Do not test against the dynamically added printers, printing via
+        * smbd means that a different spoolss process may handle the
+        * OpenPrinter request to the one that handled the AddPrinter request.
+        * This currently leads to an ugly race condition where one process
+        * sees the new printer and one doesn't.
+        */
+       const char *share = TORTURE_PRINTER_STATIC1;
+
+       torture_comment(tctx, "Testing smbd job spooling\n");
+       lpcfg_smbcli_options(tctx->lp_ctx, &options);
+
+       status = smb2_connect(tctx,
+                             torture_setting_string(tctx, "host", NULL),
+                             lpcfg_smb_ports(tctx->lp_ctx),
+                             share,
+                             lpcfg_resolve_context(tctx->lp_ctx),
+                             credentials,
+                             &tree,
+                             tctx->ev,
+                             &options,
+                             lpcfg_socket_options(tctx->lp_ctx),
+                             lpcfg_gensec_settings(tctx, tctx->lp_ctx));
+       if (!NT_STATUS_IS_OK(status)) {
+               printf("Failed to connect to SMB2 printer %s - %s\n",
+                      share, nt_errstr(status));
+               return false;
+       }
+
+       status = torture_smb2_testfile(tree, "smbd_spooler_job", &job_h);
+       torture_assert_ntstatus_ok(tctx, status, "smbd spool job create");
+
+       status = smb2_util_write(tree, job_h, "exciting print job data", 0,
+                                sizeof("exciting print job data"));
+       torture_assert_ntstatus_ok(tctx, status, "smbd spool job write");
+
+       /* check back end spoolss job was created */
+       torture_assert(tctx,
+               test_EnumJobs_args(tctx, b, &t->handle, 1, &count, &info),
+               "EnumJobs level 1 failed");
+
+       for (i = 0; i < count; i++) {
+               if (!strcmp(info[i].info1.document_name, "smbd_spooler_job")) {
+                       break;
+               }
+       }
+       torture_assert(tctx, (i != count), "smbd_spooler_job not found");
+
+       status = smb2_util_close(tree, job_h);
+       torture_assert_ntstatus_ok(tctx, status, "smbd spool job close");
+
+       /* disconnect from printer share */
+       talloc_free(mem_ctx);
+
+       return true;
+}
+
 static bool test_printer_sd(struct torture_context *tctx,
                            void *private_data)
 {
@@ -7907,6 +7986,7 @@ void torture_tcase_printer(struct torture_tcase *tcase)
        torture_tcase_add_simple_test(tcase, "csetprinter", test_csetprinter);
        torture_tcase_add_simple_test(tcase, "print_test", test_print_test);
        torture_tcase_add_simple_test(tcase, "print_test_extended", test_print_test_extended);
+       torture_tcase_add_simple_test(tcase, "print_test_smbd", test_print_test_smbd);
        torture_tcase_add_simple_test(tcase, "printer_info", test_printer_info);
        torture_tcase_add_simple_test(tcase, "sd", test_printer_sd);
        torture_tcase_add_simple_test(tcase, "dm", test_printer_dm);
index babe5f19e676050148d997de67bfaee292b1464b..6a9f8815cae62dece2e92275777966eb001b0b64 100644 (file)
@@ -33,7 +33,7 @@ bld.RECURSE('libnetapi')
 bld.RECURSE('libsmbclient')
 
 bld.SAMBA_SUBSYSTEM('TORTURE_NDR',
-       source='ndr/ndr.c ndr/winreg.c ndr/atsvc.c ndr/lsa.c ndr/epmap.c ndr/dfs.c ndr/netlogon.c ndr/drsuapi.c ndr/spoolss.c ndr/samr.c ndr/dfsblob.c ndr/drsblobs.c ndr/nbt.c ndr/ntlmssp.c ndr/backupkey.c',
+       source='ndr/ndr.c ndr/winreg.c ndr/atsvc.c ndr/lsa.c ndr/epmap.c ndr/dfs.c ndr/netlogon.c ndr/drsuapi.c ndr/spoolss.c ndr/ntprinting.c ndr/samr.c ndr/dfsblob.c ndr/drsblobs.c ndr/nbt.c ndr/ntlmssp.c ndr/backupkey.c',
        autoproto='ndr/proto.h',
        deps='torture'
        )