summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGerald Carter <jerry@samba.org>2004-11-11 20:37:44 +0000
committerGerald Carter <jerry@samba.org>2004-11-11 20:37:44 +0000
commit9ca1eb85c66c99ba56a6eec6294abf24a8117e44 (patch)
treeea6112fa650629428c645f3b9eb0c3919a4fe601
parent115e67c2701826f67be858c8c922d125a775d707 (diff)
downloadsamba-9ca1eb85c66c99ba56a6eec6294abf24a8117e44.tar.gz
samba-9ca1eb85c66c99ba56a6eec6294abf24a8117e44.tar.xz
samba-9ca1eb85c66c99ba56a6eec6294abf24a8117e44.zip
r3684: syncing up some changes for 3.0.9
svn merge -r 3628:3638 $SVNURL/branches/SAMBA_3_0 svn merge -r 3688:3639 $SVNURL/branches/SAMBA_3_0 svn merge -r 3644:3645 $SVNURL/branches/SAMBA_3_0 svn merge -r 3645:3649 $SVNURL/branches/SAMBA_3_0 svn merge -r 3649:3650 $SVNURL/branches/SAMBA_3_0 svn merge -r 3666:3668 $SVNURL/branches/SAMBA_3_0 svn merge -r 3671:3673 $SVNURL/branches/SAMBA_3_0 svn merge -r 3674:3681 $SVNURL/branches/SAMBA_3_0 svn merge -r 3681:3682 $SVNURL/branches/SAMBA_3_0 svn merge -r 3682:3683 $SVNURL/branches/SAMBA_3_0 also pulled in updated solaris packaging from 3.0
-rw-r--r--packaging/Debian/debian-stable/changelog20
-rw-r--r--packaging/Solaris/makepkg.sh33
-rw-r--r--packaging/Solaris/pkg-specs/pkginfo12
-rw-r--r--packaging/Solaris/postinstall4
-rw-r--r--packaging/Solaris/prototype.master15
-rwxr-xr-xpackaging/Solaris/samba.init.master (renamed from packaging/Solaris/samba.server.master)0
-rw-r--r--packaging/Solaris/smb.conf.default288
-rw-r--r--source/Makefile.in5
-rw-r--r--source/VERSION2
-rw-r--r--source/lib/util.c7
-rw-r--r--source/rpc_client/cli_spoolss.c52
-rw-r--r--source/rpc_parse/parse_spoolss.c30
-rw-r--r--source/rpcclient/cmd_spoolss.c76
-rw-r--r--source/smbd/dosmode.c4
-rw-r--r--source/smbd/lanman.c6
-rw-r--r--source/utils/testparm.c2
16 files changed, 496 insertions, 60 deletions
diff --git a/packaging/Debian/debian-stable/changelog b/packaging/Debian/debian-stable/changelog
index f27fa2317ed..9e37af4bfbf 100644
--- a/packaging/Debian/debian-stable/changelog
+++ b/packaging/Debian/debian-stable/changelog
@@ -1,3 +1,23 @@
+samba (3.0.8-1) stable; urgency=low
+
+ * samba 3.0.8 release
+
+ -- Simo Sorce <idra@samba.org> Mon, 9 November 2004 11:02:00 +0200
+
+samba (3.0.7-2) stable; urgency=low
+
+ * fix a segmentation fault in smbcacls
+ * fix 2 annoying pdbldap related bugs
+
+ -- Simo Sorce <idra@samba.org> Mon, 11 October 2004 12:22:00 +0200
+
+samba (3.0.7-1) stable; urgency=high
+
+ * samba 3.0.7 *Security* release
+ * See CAN-2004-0807 & CAN-2004-0808
+
+ -- Simo Sorce <idra@samba.org> Mon, 13 September 2004 14:40:00 +0200
+
samba (3.0.6-1) stable; urgency=low
* samba 3.0.6 release
diff --git a/packaging/Solaris/makepkg.sh b/packaging/Solaris/makepkg.sh
index a8195e0755f..7f8c4b6d717 100644
--- a/packaging/Solaris/makepkg.sh
+++ b/packaging/Solaris/makepkg.sh
@@ -8,7 +8,7 @@
INSTALL_BASE=/opt/samba
-SBINPROS="smbd nmbd winbindd swat"
+SBINPROGS="smbd nmbd winbindd swat"
BINPROGS="findsmb nmblookup pdbedit rpcclient smbclient smbcquotas smbspool smbtar tdbbackup testparm wbinfo net ntlm_auth profiles smbcacls smbcontrol smbpasswd smbstatus smbtree tdbdump testprns"
MSGFILES="de.msg en.msg fr.msg it.msg ja.msg nl.msg pl.msg tr.msg"
VFSLIBS="audit.so default_quota.so extd_audit.so full_audit.so readonly.so shadow_copy.so cap.so expand_msdfs.so fake_perms.so netatalk.so recycle.so"
@@ -34,12 +34,12 @@ add_dynamic_entries()
for file in $MSGFILES; do
echo f none lib/$file 0644 root other
done
- for file in $VFSLIBS; do
- echo f none lib/vfs/$file 0755 root other
- done
for file in $DATFILES; do
echo f none lib/$file 0644 root other
done
+ for file in $VFSLIBS; do
+ echo f none lib/vfs/$file 0755 root other
+ done
for file in $CHARSETLIBS; do
echo f none lib/charset/$file 0755 root other
done
@@ -53,26 +53,22 @@ add_dynamic_entries()
echo f none bin/smbsh 0755 root other
echo "#\n# nss_winbind.so\n#"
- echo f none /usr/lib/nss_winbind.so.1=lib/libnss_winbind.so 0755 root other
- echo s none /lib/nss_winbind.so.1=../usr/lib/nss_winbind.so.1 0755 root other
+ echo f none /lib/nss_winbind.so.1=lib/nss_winbind.so.1 0755 root other
+ # echo s none /lib/nss_winbind.so.1=/usr/lib/nss_winbind.so.1 0755 root other
if [ -f lib/pam_winbind.so ]; then
echo f none /usr/lib/security/pam_winbind.so=lib/pam_winbind.so 0755 root other
fi
- # Add the manpages
echo "#\n# man pages \n#"
- echo d none /usr ? ? ?
- echo d none /usr/share ? ? ?
- echo d none /usr/share/man ? ? ?
# Create directories for man page sections if nonexistent
cd man
for i in 1 2 3 4 5 6 7 8 9; do
- manpages=`ls *.$i 2>/dev/null`
+ manpages=`ls man$i 2>/dev/null`
if [ $? -eq 0 ]; then
- echo d none /usr/share/man/man$i ? ? ?
+ echo d none man/man${i} ? ? ?
for manpage in $manpages; do
- echo f none /usr/share/man/man${i}/${manpage}=docs/manpages/$manpage 0644 root other
+ echo f none man/man${i}/${manpage} 0644 root other
done
fi
done
@@ -94,7 +90,7 @@ add_dynamic_entries()
done
# Create entries for docs for the beginner
- echo s none docs/using_samba=$BASEDIR/swat/help/using_samba
+ echo 's none docs/using_samba=$BASEDIR/swat/using_samba'
for file in docs/*pdf; do
echo f none $file 0644 root other
done
@@ -104,7 +100,7 @@ add_dynamic_entries()
## BEGIN MAIN
#####################################################################
-TMPINSTALLDIR=$HOME/build
+TMPINSTALLDIR=/export/build
# Try to guess the distribution base..
CURR_DIR=`pwd`
@@ -157,7 +153,7 @@ DOCDIR=$INSTALL_BASE/docs
##
## copy some misc files that are ont done as part of 'make install'
##
-cp -fp nsswitch/libnss_winbind.so $TMPINSTALLDIR/$LIBDIR/libnss_winbind.so
+cp -fp nsswitch/libnss_winbind.so $TMPINSTALLDIR/$LIBDIR/nss_winbind.so.1
if [ -f nsswitch/pam_winbind.so ]; then
cp -fp nsswitch/pam_winbind.so $TMPINSTALLDIR/$LIBDIR/pam_winbind.so
fi
@@ -194,14 +190,9 @@ done
##
## Start building the prototype file
##
-echo "SBINDIR=sbin" >> pkginfo
-echo "BINDIR=bin" >> pkginfo
-echo "SWATDIR=swat" >> pkginfo
echo "CONFIGDIR=$CONFIGDIR" >> pkginfo
echo "LOGFILEBASE=$LOGFILEBASE" >> pkginfo
-echo "LIBDIR=lib" >> pkginfo
echo "PIDDIR=$PIDDIR" >> pkginfo
-echo "DOCDIR=docs" >> pkginfo
echo "PRIVATE_DIR=$PRIVATE_DIR" >> pkginfo
cp prototype.master prototype
diff --git a/packaging/Solaris/pkg-specs/pkginfo b/packaging/Solaris/pkg-specs/pkginfo
deleted file mode 100644
index d24ecaefe81..00000000000
--- a/packaging/Solaris/pkg-specs/pkginfo
+++ /dev/null
@@ -1,12 +0,0 @@
-PKG=samba
-NAME=SMB based file/printer sharing
-ARCH=sparc
-VERSION=3.0.0beta3
-CATEGORY=system
-VENDOR=Samba Group
-DESC=File and printer sharing for NT workstations
-HOTLINE=Please contact your local UNIX support group
-EMAIL=samba@samba.org
-CLASSES=none
-BASEDIR=/usr/local
-INTONLY=1
diff --git a/packaging/Solaris/postinstall b/packaging/Solaris/postinstall
index 9a21ae659ce..3586d9bc9e2 100644
--- a/packaging/Solaris/postinstall
+++ b/packaging/Solaris/postinstall
@@ -6,8 +6,8 @@ INSTALLATION COMPLETE.
All files comprising the Samba Server have been installed.
You can configure Samba by creating a configuration file at
-${BASEDIR}/samba/lib/smb.conf. For details on configuration,
-refer to the Samba man pages under ${PKG_INSTALL_ROOT}/usr/share/man
+${CONFIGDIR}/smb.conf. For details on configuration,
+refer to the Samba man pages under ${BASEDIR}/man
and the documentation at ${BASEDIR}/samba/docs.
___________________________________________________________________________
diff --git a/packaging/Solaris/prototype.master b/packaging/Solaris/prototype.master
index 7d15b7d8ae6..67dd3eb0fd0 100644
--- a/packaging/Solaris/prototype.master
+++ b/packaging/Solaris/prototype.master
@@ -24,16 +24,17 @@ e swat /etc/inet/inetd.conf=scripts/inetd.conf ? ? ?
#
# Create the samba subtree.
#
-d none $DOCDIR 755 root other
+d none docs 755 root other
+d none man 755 root other
d none $CONFIGDIR 755 root sys
d none $PRIVATE_DIR 700 root sys
-d none $SBINDIR 0755 root other
-d none $BINDIR 0755 root other
-d none $LIBDIR 0755 root other
-d none $LIBDIR/charset 0755 root other
-d none $LIBDIR/vfs 0755 root other
+d none sbin 0755 root other
+d none bin 0755 root other
+d none lib 0755 root other
+d none lib/charset 0755 root other
+d none lib/vfs 0755 root other
d none include 0755 root other
-d none $SWATDIR 0755 root other
+d none swat 0755 root other
d none $LOGFILEBASE 0755 root other
d none $PIDDIR 0755 root other
#
diff --git a/packaging/Solaris/samba.server.master b/packaging/Solaris/samba.init.master
index d8bea2421c3..d8bea2421c3 100755
--- a/packaging/Solaris/samba.server.master
+++ b/packaging/Solaris/samba.init.master
diff --git a/packaging/Solaris/smb.conf.default b/packaging/Solaris/smb.conf.default
new file mode 100644
index 00000000000..cdc958bc0e0
--- /dev/null
+++ b/packaging/Solaris/smb.conf.default
@@ -0,0 +1,288 @@
+# This is the main Samba configuration file. You should read the
+# smb.conf(5) manual page in order to understand the options listed
+# here. Samba has a huge number of configurable options (perhaps too
+# many!) most of which are not shown in this example
+#
+# Any line which starts with a ; (semi-colon) or a # (hash)
+# is a comment and is ignored. In this example we will use a #
+# for commentry and a ; for parts of the config file that you
+# may wish to enable
+#
+# NOTE: Whenever you modify this file you should run the command "testparm"
+# to check that you have not made any basic syntactic errors.
+#
+#======================= Global Settings =====================================
+[global]
+
+# workgroup = NT-Domain-Name or Workgroup-Name
+ workgroup = MYGROUP
+
+# server string is the equivalent of the NT Description field
+ server string = Samba Server
+
+# This option is important for security. It allows you to restrict
+# connections to machines which are on your local network. The
+# following example restricts access to two C class networks and
+# the "loopback" interface. For more examples of the syntax see
+# the smb.conf man page
+; hosts allow = 192.168.1. 192.168.2. 127.
+
+# if you want to automatically load your printer list rather
+# than setting them up individually then you'll need this
+ printcap name = /etc/printcap
+ load printers = yes
+
+# It should not be necessary to spell out the print system type unless
+# yours is non-standard. Currently supported print systems include:
+# bsd, sysv, plp, lprng, aix, hpux, qnx
+; printing = bsd
+
+# Uncomment this if you want a guest account, you must add this to /etc/passwd
+# otherwise the user "nobody" is used
+; guest account = pcguest
+
+# this tells Samba to use a separate log file for each machine
+# that connects
+ # log file = /var/log/samba/log.%m
+# all log information in one file
+ log file = /var/log/samba/smbd.log
+
+# Put a capping on the size of the log files (in Kb).
+ max log size = 50
+
+# Security mode. Most people will want user level security. See
+# security_level.txt for details.
+ security = user
+# Use password server option only with security = server
+; password server = <NT-Server-Name>
+
+# Password Level allows matching of _n_ characters of the password for
+# all combinations of upper and lower case.
+; password level = 8
+; username level = 8
+
+# You may wish to use password encryption. Please read
+# ENCRYPTION.txt, Win95.txt and WinNT.txt in the Samba documentation.
+# Do not enable this option unless you have read those documents
+; encrypt passwords = yes
+; smb passwd file = /etc/samba/smbpasswd
+
+# The following are needed to allow password changing from Windows to
+# update the Linux system password also.
+# NOTE: Use these with 'encrypt passwords' and 'smb passwd file' above.
+# NOTE2: You do NOT need these to allow workstations to change only
+# the encrypted SMB passwords. They allow the Unix password
+# to be kept in sync with the SMB password.
+; unix password sync = Yes
+; passwd program = /usr/bin/passwd %u
+; passwd chat = *New*UNIX*password* %n\n *ReType*new*UNIX*password* %n\n *passwd:*all*authentication*tokens*updated*successfully*
+
+# Unix users can map to different SMB User names
+; username map = /etc/samba/smbusers
+
+# Using the following line enables you to customise your configuration
+# on a per machine basis. The %m gets replaced with the netbios name
+# of the machine that is connecting
+; include = /etc/samba/smb.conf.%m
+
+# Most people will find that this option gives better performance.
+# See speed.txt and the manual pages for details
+ socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
+
+# Configure Samba to use multiple interfaces
+# If you have multiple network interfaces then you must list them
+# here. See the man page for details.
+; interfaces = 192.168.12.2/24 192.168.13.2/24
+
+# Configure remote browse list synchronisation here
+# request announcement to, or browse list sync from:
+# a specific host or from / to a whole subnet (see below)
+; remote browse sync = 192.168.3.25 192.168.5.255
+# Cause this host to announce itself to local subnets here
+; remote announce = 192.168.1.255 192.168.2.44
+
+# Browser Control Options:
+# set local master to no if you don't want Samba to become a master
+# browser on your network. Otherwise the normal election rules apply
+; local master = no
+
+# OS Level determines the precedence of this server in master browser
+# elections. The default value should be reasonable
+; os level = 33
+
+# Domain Master specifies Samba to be the Domain Master Browser. This
+# allows Samba to collate browse lists between subnets. Don't use this
+# if you already have a Windows NT domain controller doing this job
+; domain master = yes
+
+# Preferred Master causes Samba to force a local browser election on startup
+# and gives it a slightly higher chance of winning the election
+; preferred master = yes
+
+# Enable this if you want Samba to be a domain logon server for
+# Windows95 workstations.
+; domain logons = yes
+
+# if you enable domain logons then you may want a per-machine or
+# per user logon script
+# run a specific logon batch file per workstation (machine)
+; logon script = %m.bat
+# run a specific logon batch file per username
+; logon script = %U.bat
+
+# Where to store roving profiles (only for Win95 and WinNT)
+# %L substitutes for this servers netbios name, %U is username
+# You must uncomment the [Profiles] share below
+; logon path = \\%L\Profiles\%U
+
+# All NetBIOS names must be resolved to IP Addresses
+# 'Name Resolve Order' allows the named resolution mechanism to be specified
+# the default order is "host lmhosts wins bcast". "host" means use the unix
+# system gethostbyname() function call that will use either /etc/hosts OR
+# DNS or NIS depending on the settings of /etc/host.config, /etc/nsswitch.conf
+# and the /etc/resolv.conf file. "host" therefore is system configuration
+# dependant. This parameter is most often of use to prevent DNS lookups
+# in order to resolve NetBIOS names to IP Addresses. Use with care!
+# The example below excludes use of name resolution for machines that are NOT
+# on the local network segment
+# - OR - are not deliberately to be known via lmhosts or via WINS.
+; name resolve order = wins lmhosts bcast
+
+# Windows Internet Name Serving Support Section:
+# WINS Support - Tells the NMBD component of Samba to enable it's WINS Server
+; wins support = yes
+
+# WINS Server - Tells the NMBD components of Samba to be a WINS Client
+# Note: Samba can be either a WINS Server, or a WINS Client, but NOT both
+; wins server = w.x.y.z
+
+# WINS Proxy - Tells Samba to answer name resolution queries on
+# behalf of a non WINS capable client, for this to work there must be
+# at least one WINS Server on the network. The default is NO.
+; wins proxy = yes
+
+# DNS Proxy - tells Samba whether or not to try to resolve NetBIOS names
+# via DNS nslookups. The built-in default for versions 1.9.17 is yes,
+# this has been changed in version 1.9.18 to no.
+ dns proxy = no
+
+# Case Preservation can be handy - system default is _no_
+# NOTE: These can be set on a per share basis
+; preserve case = no
+; short preserve case = no
+# Default case is normally upper case for all DOS files
+; default case = lower
+# Be very careful with case sensitivity - it can break things!
+; case sensitive = no
+
+#============================ Share Definitions ==============================
+[homes]
+ comment = Home Directories
+ browseable = no
+ writable = yes
+
+# Un-comment the following and create the netlogon directory for Domain Logons
+; [netlogon]
+; comment = Network Logon Service
+; path = /home/netlogon
+; guest ok = yes
+; writable = no
+; share modes = no
+
+
+# Un-comment the following to provide a specific roving profile share
+# the default is to use the user's home directory
+;[Profiles]
+; path = /home/profiles
+; browseable = no
+; guest ok = yes
+
+
+# NOTE: If you have a BSD-style print system there is no need to
+# specifically define each individual printer
+[printers]
+ comment = All Printers
+ path = /var/spool/samba
+ browseable = no
+# Set public = yes to allow user 'guest account' to print
+ guest ok = no
+ writable = no
+ printable = yes
+
+# This one is useful for people to share files
+;[tmp]
+; comment = Temporary file space
+; path = /tmp
+; read only = no
+; public = yes
+
+# A publicly accessible directory, but read only, except for people in
+# the "staff" group
+;[public]
+; comment = Public Stuff
+; path = /home/samba
+; public = yes
+; read only = yes
+; write list = @staff
+
+# Other examples.
+#
+# A private printer, usable only by fred. Spool data will be placed in fred's
+# home directory. Note that fred must have write access to the spool directory,
+# wherever it is.
+;[fredsprn]
+; comment = Fred's Printer
+; valid users = fred
+; path = /homes/fred
+; printer = freds_printer
+; public = no
+; writable = no
+; printable = yes
+
+# A private directory, usable only by fred. Note that fred requires write
+# access to the directory.
+;[fredsdir]
+; comment = Fred's Service
+; path = /usr/somewhere/private
+; valid users = fred
+; public = no
+; writable = yes
+; printable = no
+
+# a service which has a different directory for each machine that connects
+# this allows you to tailor configurations to incoming machines. You could
+# also use the %u option to tailor it by user name.
+# The %m gets replaced with the machine name that is connecting.
+;[pchome]
+; comment = PC Directories
+; path = /usr/pc/%m
+; public = no
+; writable = yes
+
+# A publicly accessible directory, read/write to all users. Note that all files
+# created in the directory by users will be owned by the default user, so
+# any user with access can delete any other user's files. Obviously this
+# directory must be writable by the default user. Another user could of course
+# be specified, in which case all files would be owned by that user instead.
+;[public]
+; path = /usr/somewhere/else/public
+; public = yes
+; only guest = yes
+; writable = yes
+; printable = no
+
+# The following two entries demonstrate how to share a directory so that two
+# users can place files there that will be owned by the specific users. In this
+# setup, the directory should be writable by both users and should have the
+# sticky bit set on it to prevent abuse. Obviously this could be extended to
+# as many users as required.
+;[myshare]
+; comment = Mary's and Fred's stuff
+; path = /usr/somewhere/shared
+; valid users = mary fred
+; public = no
+; writable = yes
+; printable = no
+; create mask = 0765
+
+
diff --git a/source/Makefile.in b/source/Makefile.in
index 370017c3ada..0b39fd3dce8 100644
--- a/source/Makefile.in
+++ b/source/Makefile.in
@@ -472,7 +472,7 @@ PDBEDIT_OBJ = utils/pdbedit.o $(PARAM_OBJ) $(PASSDB_OBJ) $(LIBSAMBA_OBJ) \
$(UBIQX_OBJ) $(LIB_NONSMBD_OBJ) $(GROUPDB_OBJ) $(SECRETS_OBJ) \
$(POPT_LIB_OBJ) $(SMBLDAP_OBJ) $(DUMMYROOT_OBJ)
-SMBGET_OBJ = utils/smbget.o $(POPT_LIB_OBJ) $(LIBSMBCLIENT_OBJ) $(SECRETS_OBJ)
+SMBGET_OBJ = utils/smbget.o $(POPT_LIB_OBJ) $(LIBSMBCLIENT_OBJ)
RPCCLIENT_OBJ1 = rpcclient/rpcclient.o rpcclient/cmd_lsarpc.o \
rpcclient/cmd_samr.o rpcclient/cmd_spoolss.o \
@@ -508,7 +508,8 @@ LIBSMBCLIENT_OBJ = libsmb/libsmbclient.o libsmb/libsmb_compat.o \
libsmb/libsmb_cache.o \
$(PARAM_OBJ) $(LIB_NONSMBD_OBJ) \
$(LIBSMB_OBJ) $(KRBCLIENT_OBJ) $(UBIQX_OBJ) \
- $(LIBMSRPC_OBJ) $(RPC_PARSE_OBJ) $(PASSDB_GET_SET_OBJ)
+ $(LIBMSRPC_OBJ) $(RPC_PARSE_OBJ) $(PASSDB_GET_SET_OBJ) \
+ $(SECRETS_OBJ)
# This shared library is intended for linking with unit test programs
# to test Samba internals. It's called libbigballofmud.so to
diff --git a/source/VERSION b/source/VERSION
index 9cb06979bc7..90dc23b001c 100644
--- a/source/VERSION
+++ b/source/VERSION
@@ -19,7 +19,7 @@
########################################################
SAMBA_VERSION_MAJOR=3
SAMBA_VERSION_MINOR=0
-SAMBA_VERSION_RELEASE=8
+SAMBA_VERSION_RELEASE=9
########################################################
# For 'pre' releases the version will be #
diff --git a/source/lib/util.c b/source/lib/util.c
index 89cf1bfa021..feb03fe4395 100644
--- a/source/lib/util.c
+++ b/source/lib/util.c
@@ -1747,7 +1747,12 @@ BOOL is_myname_or_ipaddr(const char *s)
if (is_myname(servername))
return True;
-
+
+ /* check for loopback */
+
+ if (strequal(servername, "localhost"))
+ return True;
+
/* maybe it's my dns name */
if ( get_mydnsfullname( dnsname ) )
diff --git a/source/rpc_client/cli_spoolss.c b/source/rpc_client/cli_spoolss.c
index 5303f83bf9c..dc693eb02cf 100644
--- a/source/rpc_client/cli_spoolss.c
+++ b/source/rpc_client/cli_spoolss.c
@@ -1083,6 +1083,58 @@ WERROR cli_spoolss_addprinterex (struct cli_state *cli, TALLOC_CTX *mem_ctx,
return result;
}
+/**********************************************************************
+ * Delete a Printer Driver from the server (DOES remove
+ * the driver files)
+ */
+WERROR cli_spoolss_deleteprinterdriverex(struct cli_state *cli,
+ TALLOC_CTX *mem_ctx, const char *arch,
+ const char *driver, uint32 version)
+{
+ prs_struct qbuf, rbuf;
+ SPOOL_Q_DELETEPRINTERDRIVEREX q;
+ SPOOL_R_DELETEPRINTERDRIVEREX r;
+ WERROR result = W_ERROR(ERRgeneral);
+ fstring server;
+
+ ZERO_STRUCT(q);
+ ZERO_STRUCT(r);
+
+
+ /* Initialise input parameters */
+ prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL);
+ prs_init(&rbuf, 0, mem_ctx, UNMARSHALL);
+
+ slprintf(server, sizeof(fstring)-1, "\\\\%s", cli->desthost);
+ strupper_m(server);
+
+ /* Write the request */
+ make_spoolss_q_deleteprinterdriverex(mem_ctx, &q, server, arch, driver, version);
+
+ /* Marshall data and send request */
+
+ if (!spoolss_io_q_deleteprinterdriverex ("", &q, &qbuf, 0)
+ || !rpc_api_pipe_req (cli,SPOOLSS_DELETEPRINTERDRIVEREX , &qbuf, &rbuf))
+ {
+ goto done;
+ }
+
+ /* Unmarshall response */
+
+ if (!spoolss_io_r_deleteprinterdriverex ("", &r, &rbuf, 0))
+ goto done;
+
+ /* Return output parameters */
+
+ result = r.status;
+
+done:
+ prs_mem_free(&qbuf);
+ prs_mem_free(&rbuf);
+
+ return result;
+}
+
/*********************************************************************************
Win32 API - DeltePrinterDriver()
********************************************************************************/
diff --git a/source/rpc_parse/parse_spoolss.c b/source/rpc_parse/parse_spoolss.c
index 2b2038d16ac..6362dcf0f1d 100644
--- a/source/rpc_parse/parse_spoolss.c
+++ b/source/rpc_parse/parse_spoolss.c
@@ -1221,6 +1221,36 @@ BOOL spoolss_io_r_open_printer_ex(const char *desc, SPOOL_R_OPEN_PRINTER_EX *r_u
/*******************************************************************
* init a structure.
********************************************************************/
+BOOL make_spoolss_q_deleteprinterdriverex( TALLOC_CTX *mem_ctx,
+ SPOOL_Q_DELETEPRINTERDRIVEREX *q_u,
+ const char *server,
+ const char* arch,
+ const char* driver,
+ uint32 version)
+{
+ DEBUG(5,("make_spoolss_q_deleteprinterdriverex\n"));
+
+ q_u->server_ptr = (server!=NULL)?1:0;
+ q_u->delete_flags = DPD_DELETE_UNUSED_FILES;
+
+ /* these must be NULL terminated or else NT4 will
+ complain about invalid parameters --jerry */
+ init_unistr2(&q_u->server, server, UNI_STR_TERMINATE);
+ init_unistr2(&q_u->arch, arch, UNI_STR_TERMINATE);
+ init_unistr2(&q_u->driver, driver, UNI_STR_TERMINATE);
+
+ if (version >= 0) {
+ q_u->delete_flags |= DPD_DELETE_SPECIFIC_VERSION;
+ q_u->version = version;
+ }
+
+ return True;
+}
+
+
+/*******************************************************************
+ * init a structure.
+ ********************************************************************/
BOOL make_spoolss_q_deleteprinterdriver(
TALLOC_CTX *mem_ctx,
SPOOL_Q_DELETEPRINTERDRIVER *q_u,
diff --git a/source/rpcclient/cmd_spoolss.c b/source/rpcclient/cmd_spoolss.c
index a9882d799f8..0e17029a12c 100644
--- a/source/rpcclient/cmd_spoolss.c
+++ b/source/rpcclient/cmd_spoolss.c
@@ -521,7 +521,7 @@ static WERROR cmd_spoolss_setprinter(struct cli_state *cli,
slprintf(servername, sizeof(servername)-1, "\\\\%s", cli->desthost);
strupper_m(servername);
- fstrcpy(printername, argv[1]);
+ slprintf(printername, sizeof(servername)-1, "%s\\%s", servername, argv[1]);
fstrcpy(user, cli->user_name);
/* get a printer handle */
@@ -591,7 +591,7 @@ static WERROR cmd_spoolss_setprintername(struct cli_state *cli,
slprintf(servername, sizeof(servername)-1, "\\\\%s", cli->desthost);
strupper_m(servername);
- fstrcpy(printername, argv[1]);
+ slprintf(printername, sizeof(printername)-1, "%s\\%s", servername, argv[1]);
fstrcpy(user, cli->user_name);
/* get a printer handle */
@@ -1036,7 +1036,7 @@ static WERROR cmd_spoolss_getdriver(struct cli_state *cli,
slprintf(servername, sizeof(servername)-1, "\\\\%s", cli->desthost);
strupper_m(servername);
fstrcpy(user, cli->user_name);
- fstrcpy(printername, argv[1]);
+ slprintf(printername, sizeof(servername)-1, "%s\\%s", servername, argv[1]);
if (argc == 3)
info_level = atoi(argv[2]);
@@ -1545,6 +1545,61 @@ done:
}
+static WERROR cmd_spoolss_deletedriverex(struct cli_state *cli,
+ TALLOC_CTX *mem_ctx,
+ int argc, const char **argv)
+{
+ WERROR result, ret = WERR_UNKNOWN_PRINTER_DRIVER;
+
+ int i;
+ int vers = -1;
+
+ const char *arch = NULL;
+
+ /* parse the command arguements */
+ if (argc < 2 || argc > 4) {
+ printf ("Usage: %s <driver> [arch] [version]\n", argv[0]);
+ return WERR_OK;
+ }
+
+ if (argc >= 3)
+ arch = argv[2];
+ if (argc == 4)
+ vers = atoi (argv[3]);
+
+
+ /* delete the driver for all architectures */
+ for (i=0; archi_table[i].long_archi; i++) {
+
+ if (arch && !strequal( archi_table[i].long_archi, arch))
+ continue;
+
+ if (vers >= 0 && archi_table[i].version != vers)
+ continue;
+
+ /* make the call to remove the driver */
+ result = cli_spoolss_deleteprinterdriverex(
+ cli, mem_ctx, archi_table[i].long_archi, argv[1], archi_table[i].version);
+
+ if ( !W_ERROR_IS_OK(result) )
+ {
+ if ( !W_ERROR_EQUAL(result, WERR_UNKNOWN_PRINTER_DRIVER) ) {
+ printf ("Failed to remove driver %s for arch [%s] (version: %d): %s\n",
+ argv[1], archi_table[i].long_archi, archi_table[i].version, dos_errstr(result));
+ }
+ }
+ else
+ {
+ printf ("Driver %s and files removed for arch [%s] (version: %d).\n", argv[1],
+ archi_table[i].long_archi, archi_table[i].version);
+ ret = WERR_OK;
+ }
+ }
+
+ return ret;
+}
+
+
static WERROR cmd_spoolss_deletedriver(struct cli_state *cli,
TALLOC_CTX *mem_ctx,
int argc, const char **argv)
@@ -2403,13 +2458,14 @@ struct cmd_set spoolss_commands[] = {
{ "SPOOLSS" },
{ "adddriver", RPC_RTYPE_WERROR, NULL, cmd_spoolss_addprinterdriver, PI_SPOOLSS, "Add a print driver", "" },
- { "addprinter", RPC_RTYPE_WERROR, NULL, cmd_spoolss_addprinterex, PI_SPOOLSS, "Add a printer", "" },
+ { "addprinter", RPC_RTYPE_WERROR, NULL, cmd_spoolss_addprinterex, PI_SPOOLSS, "Add a printer", "" },
{ "deldriver", RPC_RTYPE_WERROR, NULL, cmd_spoolss_deletedriver, PI_SPOOLSS, "Delete a printer driver", "" },
+ { "deldriverex", RPC_RTYPE_WERROR, NULL, cmd_spoolss_deletedriverex, PI_SPOOLSS, "Delete a printer driver with files", "" },
{ "enumdata", RPC_RTYPE_WERROR, NULL, cmd_spoolss_enum_data, PI_SPOOLSS, "Enumerate printer data", "" },
- { "enumdataex", RPC_RTYPE_WERROR, NULL, cmd_spoolss_enum_data_ex, PI_SPOOLSS, "Enumerate printer data for a key", "" },
+ { "enumdataex", RPC_RTYPE_WERROR, NULL, cmd_spoolss_enum_data_ex, PI_SPOOLSS, "Enumerate printer data for a key", "" },
{ "enumkey", RPC_RTYPE_WERROR, NULL, cmd_spoolss_enum_printerkey, PI_SPOOLSS, "Enumerate printer keys", "" },
{ "enumjobs", RPC_RTYPE_WERROR, NULL, cmd_spoolss_enum_jobs, PI_SPOOLSS, "Enumerate print jobs", "" },
- { "enumports", RPC_RTYPE_WERROR, NULL, cmd_spoolss_enum_ports, PI_SPOOLSS, "Enumerate printer ports", "" },
+ { "enumports", RPC_RTYPE_WERROR, NULL, cmd_spoolss_enum_ports, PI_SPOOLSS, "Enumerate printer ports", "" },
{ "enumdrivers", RPC_RTYPE_WERROR, NULL, cmd_spoolss_enum_drivers, PI_SPOOLSS, "Enumerate installed printer drivers", "" },
{ "enumprinters", RPC_RTYPE_WERROR, NULL, cmd_spoolss_enum_printers, PI_SPOOLSS, "Enumerate printers", "" },
{ "getdata", RPC_RTYPE_WERROR, NULL, cmd_spoolss_getprinterdata, PI_SPOOLSS, "Get print driver data", "" },
@@ -2418,15 +2474,15 @@ struct cmd_set spoolss_commands[] = {
{ "getdriverdir", RPC_RTYPE_WERROR, NULL, cmd_spoolss_getdriverdir, PI_SPOOLSS, "Get print driver upload directory", "" },
{ "getprinter", RPC_RTYPE_WERROR, NULL, cmd_spoolss_getprinter, PI_SPOOLSS, "Get printer info", "" },
{ "openprinter", RPC_RTYPE_WERROR, NULL, cmd_spoolss_open_printer_ex, PI_SPOOLSS, "Open printer handle", "" },
- { "setdriver", RPC_RTYPE_WERROR, NULL, cmd_spoolss_setdriver, PI_SPOOLSS, "Set printer driver", "" },
+ { "setdriver", RPC_RTYPE_WERROR, NULL, cmd_spoolss_setdriver, PI_SPOOLSS, "Set printer driver", "" },
{ "getprintprocdir", RPC_RTYPE_WERROR, NULL, cmd_spoolss_getprintprocdir, PI_SPOOLSS, "Get print processor directory", "" },
{ "addform", RPC_RTYPE_WERROR, NULL, cmd_spoolss_addform, PI_SPOOLSS, "Add form", "" },
{ "setform", RPC_RTYPE_WERROR, NULL, cmd_spoolss_setform, PI_SPOOLSS, "Set form", "" },
{ "getform", RPC_RTYPE_WERROR, NULL, cmd_spoolss_getform, PI_SPOOLSS, "Get form", "" },
- { "deleteform", RPC_RTYPE_WERROR, NULL, cmd_spoolss_deleteform, PI_SPOOLSS, "Delete form", "" },
+ { "deleteform", RPC_RTYPE_WERROR, NULL, cmd_spoolss_deleteform, PI_SPOOLSS, "Delete form", "" },
{ "enumforms", RPC_RTYPE_WERROR, NULL, cmd_spoolss_enum_forms, PI_SPOOLSS, "Enumerate forms", "" },
- { "setprinter", RPC_RTYPE_WERROR, NULL, cmd_spoolss_setprinter, PI_SPOOLSS, "Set printer comment", "" },
- { "setprintername", RPC_RTYPE_WERROR, NULL, cmd_spoolss_setprintername, PI_SPOOLSS, "Set printername", "" },
+ { "setprinter", RPC_RTYPE_WERROR, NULL, cmd_spoolss_setprinter, PI_SPOOLSS, "Set printer comment", "" },
+ { "setprintername", RPC_RTYPE_WERROR, NULL, cmd_spoolss_setprintername, PI_SPOOLSS, "Set printername", "" },
{ "setprinterdata", RPC_RTYPE_WERROR, NULL, cmd_spoolss_setprinterdata, PI_SPOOLSS, "Set REG_SZ printer data", "" },
{ "rffpcnex", RPC_RTYPE_WERROR, NULL, cmd_spoolss_rffpcnex, PI_SPOOLSS, "Rffpcnex test", "" },
diff --git a/source/smbd/dosmode.c b/source/smbd/dosmode.c
index 3a3a6e6fdb0..7199b3ebbf3 100644
--- a/source/smbd/dosmode.c
+++ b/source/smbd/dosmode.c
@@ -344,9 +344,7 @@ int file_set_dosmode(connection_struct *conn, const char *fname, uint32 dosmode,
return(-1);
}
- if (!get_acl_group_bits(conn, fname, &st->st_mode)) {
- return(-1);
- }
+ get_acl_group_bits(conn, fname, &st->st_mode);
if (S_ISDIR(st->st_mode))
dosmode |= aDIR;
diff --git a/source/smbd/lanman.c b/source/smbd/lanman.c
index 610ee451201..e7aa05b54a6 100644
--- a/source/smbd/lanman.c
+++ b/source/smbd/lanman.c
@@ -2267,6 +2267,12 @@ static BOOL api_PrintJobInfo(connection_struct *conn,uint16 vuid,char *param,cha
return False;
*rparam_len = 4;
*rparam = REALLOC(*rparam,*rparam_len);
+
+ if ( (snum = lp_servicenumber(sharename)) == -1 ) {
+ DEBUG(0,("api_PrintJobInfo: unable to get service number from sharename [%s]\n",
+ sharename));
+ return False;
+ }
*rdata_len = 0;
diff --git a/source/utils/testparm.c b/source/utils/testparm.c
index d4dc22ec915..e1314078311 100644
--- a/source/utils/testparm.c
+++ b/source/utils/testparm.c
@@ -145,7 +145,7 @@ parameter.\n");
ret = 1;
} else
/* check if there's a %u parameter present */
- if(strstr_m(lp_passwd_chat(), "%u") == NULL) {
+ if(strstr_m(lp_passwd_program(), "%u") == NULL) {
fprintf(stderr, "ERROR: the 'passwd program' (%s) requires a '%%u' parameter.\n", lp_passwd_program());
ret = 1;
}