+ =============================
+ 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
== The Samba Team
======================================================================
-Release notes for older releases follow:
-----------------------------------------
+
+----------------------------------------------------------------------
+
=============================
Release Notes for Samba 3.6.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>
</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>
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>
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
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
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
</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
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>
</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
</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>
</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>
</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>
</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>
</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>
</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>
</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>.
</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>
</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>
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
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>
</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>.
</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
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
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
</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
</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
</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
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.
</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>
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
</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>
</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
</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>
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
</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>
</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>
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
</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
</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
</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
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
<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
<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
</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
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
</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
</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>
</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
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
</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.
</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:
</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
</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
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>
</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
</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.
</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
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
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>
</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
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
%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
</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
</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>
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
</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>
</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>
</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)\" >> /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>
</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
</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.
</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).
</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
[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>
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
</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>
</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.
</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">
</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.
</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
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
</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
</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
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.
<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>
</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
</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>
</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>
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
</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>
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
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>
</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>
</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>
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
\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)
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
.\" 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
.\" -----------------------------------------------------------------
/* 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);
***********************************************************************/
_PUBLIC_ void hmac_md5_final(uint8_t *digest, HMACMD5Context *ctx)
{
- struct MD5Context ctx_o;
+ MD5_CTX ctx_o;
MD5Final(digest, &ctx->ctx);
typedef struct
{
- struct MD5Context ctx;
+ MD5_CTX ctx;
uint8_t k_ipad[65];
uint8_t k_opad[65];
#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 */
};
for (i=0; i < ARRAY_SIZE(testarray); i++) {
- struct MD5Context ctx;
+ MD5_CTX ctx;
uint8_t md5[16];
int e;
{
unsigned char zero[4], tmp[16];
HMACMD5Context ctx;
- struct MD5Context md5;
+ MD5_CTX md5;
ZERO_STRUCT(creds->session_key);
*/
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);
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);
{
uint8_t packet_digest[16];
static const uint8_t zeros[4];
- struct MD5Context ctx;
+ MD5_CTX ctx;
MD5Init(&ctx);
MD5Update(&ctx, zeros, 4);
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);
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. */
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;
char **pwd)
{
uint8_t buffer[516];
- struct MD5Context ctx;
+ MD5_CTX ctx;
size_t pwd_len;
DATA_BLOB confounded_session_key;
DATA_BLOB confounder;
DATA_BLOB enc_buffer;
- struct MD5Context md5;
+ MD5_CTX md5;
uint8_t _enc_key[16];
DATA_BLOB enc_key;
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;
const char *dn,
struct security_token **token)
{
+#ifdef HAVE_ADS
struct security_token *ad_token = NULL;
ADS_STATUS status;
#if _SAMBA_BUILD_ == 4
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;
}
#endif
return ADS_SUCCESS;
+#else
+ return ADS_ERROR_NT(NT_STATUS_NOT_SUPPORTED);
+#endif
}
uint32 bottom;
} ntprinting_form;
- void decode_ntprinting_form(
+ [public] void decode_ntprinting_form(
[in] ntprinting_form form
);
[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
);
ntprinting_printer_data printer_data[count];
} ntprinting_printer;
- void decode_ntprinting_printer(
+ [public] void decode_ntprinting_printer(
[in] ntprinting_printer printer
);
}
/*
- 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);
}
/*
- 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);
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);
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
USERID=`id -u`
GRPID=`id -g`
-VERSION='3.6.6'
+VERSION='3.6.7'
REVISION=''
SPECFILE="samba.spec"
RPMVER=`rpm --version | awk '{print $3}'`
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
../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 \
########################################################
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 #
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" "
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>
/* 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
#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
};
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;
/* 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 */
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;
#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
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);
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);
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 */
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 */
/* 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 */
uid_t uid = geteuid();
#if USE_SETRESUID
- setresuid(geteuid(), -1, -1);
+ setresuid(uid, uid, -1);
#endif
#if USE_SETREUID
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;
*/
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)) {
}
}
-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));
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));
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));
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));
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));
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));
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 */
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];
{
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.
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;
pacl->acl_nace));
result = gpfs2smb_acl(pacl);
- if (result == NULL) {
- goto done;
+ if (result != NULL) {
+ errno = 0;
}
done:
/* 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);
}
/* 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);
}
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;
}
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;
}
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);
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")) {
}
}
- 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);
}
}
- 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);
/* fill things from header line */
buf->time = jobtime;
- buf->job = jobid;
+ buf->sysjob = jobid;
buf->status = jobstat;
buf->priority = jobprio;
if (jobuser) {
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;
}
}
- 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;
}
}
- buf->job = atoi(tok[4]);
+ buf->sysjob = atoi(tok[4]);
buf->size = atoi(tok[7]);
if (strchr_m(tok[7],'K')) {
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);
}
/* Get the jobid */
- buf->job = atoi(parse_line->jobid);
+ buf->sysjob = atoi(parse_line->jobid);
/* Get the job name */
parse_line->space2[0] = '\0';
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);
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;
-}
#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;
/***************************************************************
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;
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);
}
/*
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();
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");
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();
*/
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 {
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();
*/
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 {
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();
*/
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 {
* '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 */
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));
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();
"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;
}
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())));
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"));
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();
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;
}
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;
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);
}
/*
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 :
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");
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;
}
*/
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;
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;
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();
*/
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())));
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();
*/
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())));
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;
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 */
"%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:
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
****************************************************************************/
#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...
*/
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();
*/
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);
/*
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)
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();
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;
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
* 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;
/*
* 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);
}
/*
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();
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;
* 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);
}
}
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();
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 {
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();
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 {
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();
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 {
* '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 */
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();
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())));
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);
}
}
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 */
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();
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;
}
*/
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;
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;
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");
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;
}
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;
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
*/
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);
}
/*
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 :
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,
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;
}
len += used;
pjob->pid = pjpid;
+ pjob->jobid = pjjobid;
pjob->sysjob = pjsysjob;
pjob->fd = pjfd;
pjob->starttime = pjstarttime;
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);
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 */
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.
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,
/* 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 );
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
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);
}
/****************************************************************************
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;
fstrcpy(pj.queuename, old_pj ? old_pj->queuename : sharename );
pjob_store(ev, msg_ctx, sharename, jobid, &pj);
+ talloc_free(tmp_ctx);
}
struct printif *print_if;
struct tevent_context *ev;
struct messaging_context *msg_ctx;
+ TALLOC_CTX *mem_ctx;
};
/****************************************************************************
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",
/* 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 */
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;
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,
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,
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;
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;
}
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,
}
/* 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 )
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);
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 ));
}
/****************************************************************************
- 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;
}
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;
}
/****************************************************************************
{
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;
}
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
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);
remove_from_jobs_added( sharename, jobid );
- return (result == 0);
+ ret = (result == 0);
+err_out:
+ talloc_free(tmp_ctx);
+ return ret;
}
/****************************************************************************
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;
}
/****************************************************************************
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);
lp_printername(snum) );
/* END_ADMIN_LOG */
- return WERR_ACCESS_DENIED;
+ werr = WERR_ACCESS_DENIED;
+ goto err_out;
}
/*
* 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
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) &&
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 */
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,
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 */
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;
}
/****************************************************************************
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;
}
ZERO_STRUCT(pjob);
pjob.pid = sys_getpid();
+ pjob.jobid = jobid;
pjob.sysjob = -1;
pjob.fd = -1;
pjob.starttime = time(NULL);
{
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);
}
/****************************************************************************
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) {
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;
pjob->fd = -1;
unlink(pjob->filename);
pjob_delete(server_event_context(), msg_ctx, sharename, jobid);
+err_out:
+ talloc_free(tmp_ctx);
return status;
}
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))
&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;
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;
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. */
bool found = false;
for (j = 0; j < total_count; j++) {
- if (queue[j].job == jobid) {
+ if (queue[j].sysjob == jobid) {
found = true;
break;
}
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",
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;
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));
SAFE_FREE(data.dptr);
SAFE_FREE(cgdata.dptr);
+ talloc_free(tmp_ctx);
return ret;
}
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);
}
}
}
}
- /* 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
* 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) {
slprintf(job.jobname, sizeof(job.jobname) - 1, "%s", argv[2]);
- if (!(pw = getpwuid(getuid()))) {
+ if (!(pw = getpwuid(geteuid()))) {
+ printf("getpwuid failed\n");
return 1;
}
/* 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);
struct spoolss_PrinterInfo2 *pinfo2,
TALLOC_CTX *mem_ctx)
{
- SETUP_SPOOLSS_NOTIFY_DATA_INTEGER(data, queue->job);
+ SETUP_SPOOLSS_NOTIFY_DATA_INTEGER(data, queue->sysjob);
}
/*******************************************************************
&queue[j], info,
pinfo2, snum,
&option_type,
- queue[j].job,
+ queue[j].sysjob,
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);
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);
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;
}
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;
bool found = false;
for (i=0; i<count; i++) {
- if (queue[i].job == (int)jobid) {
+ if (queue[i].sysjob == (int)jobid) {
found = true;
break;
}
WERROR result;
for (i=0; i<count; i++) {
- if (queue[i].job == (int)jobid) {
+ if (queue[i].sysjob == (int)jobid) {
found = true;
break;
}
* 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,
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);
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;
};
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.
*/
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);
{
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);
}
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;
}
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;
}
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);
* 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,
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));
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);
}
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);
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);
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;
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;
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(
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';
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,
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);
/* 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];
}
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);
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.
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;
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;
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;
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;
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)) {
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));
--- /dev/null
+/*
+ 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;
+}
char *unix_address;
int sys_errno;
- struct MD5Context ctx;
+ MD5_CTX ctx;
uint8_t sig[16];
enum ndr_err_code ndr_err;
bool ok;
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);
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);
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;
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;
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;
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;
#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"
#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"
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)
{
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);
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'
)